31#define WIN32_NO_STATUS
50#define HKEY_SPECIAL_ROOT_FIRST HKEY_CLASSES_ROOT
51#define HKEY_SPECIAL_ROOT_LAST HKEY_DYN_DATA
55 L"\\Registry\\Machine\\Software\\Classes",
57 L"\\Registry\\Machine",
60 L"\\Registry\\Machine\\System\\CurrentControlSet\\Hardware Profiles\\Current",
61 L"\\Registry\\DynData"
73 0, 0, { (
DWORD_PTR)(__FILE__
": reg_mui_cs") }
85#define REG_MUI_CACHE_SIZE 8
87#define IS_OPTION_TRUE(ch) ((ch) == 'y' || (ch) == 'Y' || (ch) == 't' || (ch) == 'T' || (ch) == '1')
109 static const WCHAR classes_root[] =
L"\\Registry\\Machine\\Software\\Classes\\";
112 return (
len >= classes_root_len - 1 && !
wcsnicmp(
name->Buffer, classes_root,
min(
len, classes_root_len ) ));
167 attr.SecurityQualityOfService =
NULL;
180 attr.RootDirectory = 0;
184 attr.SecurityQualityOfService =
NULL;
192 static const WCHAR performance_text[] =
193 L"\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Perflib\\009";
199 if (!
wcsicmp(
info->Name.Buffer, performance_text ))
228 options &= ~REG_OPTION_OPEN_LINK;
256 if (wow6432node != *subkey)
259 *subkey = wow6432node;
316 HKEY subkey = 0, subkey_root =
root;
331 attr.SecurityQualityOfService =
NULL;
359 if (subkey && subkey_root && subkey_root !=
root)
NtClose( subkey_root );
360 if (subkey) subkey_root = subkey;
366 if (subkey_root && subkey_root !=
root)
NtClose( subkey_root );
371 *retkey = subkey_root;
372 else if (subkey_root && subkey_root !=
root)
397 options &= ~REG_OPTION_CREATE_LINK;
429 attr.SecurityQualityOfService =
NULL;
459 if (subkey_root && subkey_root !=
root)
NtClose( subkey_root );
460 subkey_root = subkey;
465 *retkey = subkey_root;
479 TRACE(
"HKEY_CURRENT_USER -> %p\n", hkey );
540 TRACE(
"(%p %p)\n", hkey,
override);
556 if (old_key)
NtClose( old_key );
569 TRACE(
"(%p)\n", hkey);
579 if (old_key)
NtClose( old_key );
671 if (retkey && (!
name || !
name[0]) &&
716 if (retkey && (!
name || !
name[0]) &&
832 TRACE(
"(%p,%ld,%p,%p(%lu),%p,%p,%p,%p)\n", hkey,
index,
name, name_len,
833 name_len ? *name_len : 0,
reserved,
class, class_len, ft );
849 buf_ptr, total_size, &total_size );
859 if (
len >= *name_len || (
class && class_len && (cls_len >= *class_len)))
868 *class_len = cls_len;
896 TRACE(
"(%p,%ld,%p,%p(%lu),%p,%p,%p,%p)\n", hkey,
index,
name, name_len,
897 name_len ? *name_len : 0,
reserved,
class, class_len, ft );
913 buf_ptr, total_size, &total_size );
925 if (
len >= *name_len || (
class && class_len && (cls_len >= *class_len)))
934 *class_len = cls_len;
990 TRACE(
"(%p,%p,%ld,%p,%p,%p,%p,%p,%p,%p,%p)\n", hkey,
class, class_len ? *class_len : 0,
999 if (
class && class_len && *class_len)
1013 if (class_len && (
info->ClassLength/
sizeof(
WCHAR) + 1 > *class_len))
1020 class[
info->ClassLength/
sizeof(
WCHAR)] = 0;
1025 if (class_len) *class_len =
info->ClassLength /
sizeof(
WCHAR);
1026 if (subkeys) *subkeys =
info->SubKeys;
1027 if (max_subkey) *max_subkey =
info->MaxNameLen /
sizeof(
WCHAR);
1028 if (max_class) *max_class =
info->MaxClassLen /
sizeof(
WCHAR);
1030 if (max_value) *max_value =
info->MaxValueNameLen /
sizeof(
WCHAR);
1031 if (max_data) *max_data =
info->MaxValueDataLen;
1036 FIXME(
"security argument not supported.\n");
1080 TRACE(
"(%p,%p,%ld,%p,%p,%p,%p,%p,%p,%p,%p)\n", hkey,
class, class_len ? *class_len : 0,
1089 if (
class || class_len)
1103 if (
class && class_len && *class_len)
1107 (
WCHAR *)(buf_ptr +
info->ClassOffset),
info->ClassLength );
1108 if (*class_len ==
len)
1113 class[*class_len] = 0;
1117 (
WCHAR *)(buf_ptr +
info->ClassOffset),
info->ClassLength );
1121 if (subkeys) *subkeys =
info->SubKeys;
1122 if (max_subkey) *max_subkey =
info->MaxNameLen /
sizeof(
WCHAR);
1123 if (max_class) *max_class =
info->MaxClassLen /
sizeof(
WCHAR);
1125 if (max_value) *max_value =
info->MaxValueNameLen /
sizeof(
WCHAR);
1126 if (max_data) *max_data =
info->MaxValueDataLen;
1131 FIXME(
"security argument not supported.\n");
1317 TRACE(
"(%p,%s,%s,%ld,%p,%ld)\n", hkey,
debugstr_w(subkey),
debugstr_w(
name),
type,
data,
len );
1319 if (subkey && subkey[0])
1339 TRACE(
"(%p,%s,%s,%ld,%p,%ld)\n", hkey,
debugstr_a(subkey),
debugstr_a(
name),
type,
data,
len );
1341 if (subkey && subkey[0])
1357 static const WCHAR names[] =
L"1\0" "1847\0" "1846\0End Marker\0";
1361 *ret_size =
sizeof(
names);
1362 if (!unicode) *ret_size /=
sizeof(
WCHAR);
1378 static const WCHAR names[] =
L"1847\0End Marker\0";
1382 *ret_size =
sizeof(
names);
1383 if (!unicode) *ret_size /=
sizeof(
WCHAR);
1492 TRACE(
"Provider is missing required exports\n");
1527#define MAX_SERVICE_NAME 260
1543 data_size = *ret_size;
1549 if (!
data || data_size <
sizeof(*
pdb))
1554 pdb->Signature[0] =
'P';
1555 pdb->Signature[1] =
'E';
1556 pdb->Signature[2] =
'R';
1557 pdb->Signature[3] =
'F';
1558#ifdef WORDS_BIGENDIAN
1565 pdb->TotalByteLength = 0;
1566 pdb->HeaderLength =
sizeof(*pdb);
1567 pdb->NumObjectTypes = 0;
1568 pdb->DefaultObject = 0;
1572 pdb->SystemNameOffset =
sizeof(*pdb);
1573 pdb->SystemNameLength = (data_size -
sizeof(*pdb)) /
sizeof(
WCHAR);
1577 pdb->SystemNameLength++;
1578 pdb->SystemNameLength *=
sizeof(
WCHAR);
1580 pdb->HeaderLength +=
pdb->SystemNameLength;
1583 if (
pdb->SystemNameLength & 7)
1584 pdb->HeaderLength += 8 - (
pdb->SystemNameLength & 7);
1586 if (data_size < pdb->HeaderLength)
1589 pdb->TotalByteLength =
pdb->HeaderLength;
1591 data_size -=
pdb->HeaderLength;
1601 DWORD collected_size = data_size, obj_count = 0;
1605 void *collected_data =
data;
1630 TRACE(
"Collect: obj->TotalByteLength %lu, collected_size %lu\n",
1631 obj->TotalByteLength, collected_size);
1633 data_size -= collected_size;
1634 data = collected_data;
1636 pdb->TotalByteLength += collected_size;
1637 pdb->NumObjectTypes += obj_count;
1645 *ret_size =
pdb->TotalByteLength;
1669 TRACE(
"(%p,%s,%p,%p,%p,%p=%ld)\n",
1685 total_size = info_size;
1690 buffer, total_size, &total_size );
1703 buf_ptr, total_size, &total_size );
1708 memcpy(
data, buf_ptr + info_size, total_size - info_size );
1764 TRACE(
"(%p,%s,%p,%p,%p,%p=%ld)\n",
1807 buf_ptr, total_size, &total_size );
1817 total_size - info_size );
1824 total_size - info_size );
1830 total_size =
len + info_size;
1835 else memcpy(
data, buf_ptr + info_size, total_size - info_size );
1885 if (cbExpect && cbData != cbExpect)
1931 TRACE(
"(%p,%s,%s,%ld,%p,%p,%p=%ld)\n",
1942 if ((
dwFlags & RRF_WOW64_MASK) == RRF_WOW64_MASK)
1945 if (pszSubKey && pszSubKey[0])
1978 &dwType, pvBuf, &cbData);
1991 if (cbData <
sizeof(
WCHAR) || *((
WCHAR *)pvBuf + cbData /
sizeof(
WCHAR) - 1))
1993 *((
WCHAR *)pvBuf + cbData /
sizeof(
WCHAR)) = 0;
1994 cbData +=
sizeof(
WCHAR);
2018 if (pszSubKey && pszSubKey[0])
2026 if (pdwType) *pdwType = dwType;
2046 TRACE(
"(%p,%s,%s,%ld,%p,%p,%p=%ld)\n",
2057 if ((
dwFlags & RRF_WOW64_MASK) == RRF_WOW64_MASK)
2060 if (pszSubKey && pszSubKey[0])
2093 &dwType, pvBuf, &cbData);
2106 if (!cbData || *((
char *)pvBuf + cbData - 1))
2108 *((
char *)pvBuf + cbData) = 0;
2133 if (pszSubKey && pszSubKey[0])
2141 if (pdwType) *pdwType = dwType;
2176 TRACE(
"(%p,%ld,%p,%p,%p,%p,%p,%p)\n",
2185 total_size =
min(
sizeof(
buffer), total_size );
2188 buffer, total_size, &total_size );
2198 buf_ptr, total_size, &total_size );
2203 if (
info->NameLength/
sizeof(
WCHAR) >= *val_count)
2209 *val_count =
info->NameLength /
sizeof(
WCHAR);
2210 value[*val_count] = 0;
2214 if (total_size -
info->DataOffset > *
count)
2253 TRACE(
"(%p,%ld,%p,%p,%p,%p,%p,%p)\n",
2262 total_size =
min(
sizeof(
buffer), total_size );
2265 buffer, total_size, &total_size );
2278 buf_ptr, total_size, &total_size );
2287 total_size -
info->DataOffset );
2294 total_size -
info->DataOffset );
2313 if (
len >= *val_count)
2318 len = *val_count - 1;
2445 destkey.
Length =
sizeof(destkey);
2458 file.SecurityQualityOfService =
NULL;
2563 if (!lpFile || !*lpFile)
2653 TRACE(
"(%p,%ld,%p)\n",hkey,SecurityInfo,pSecurityDesc);
2690 LPDWORD lpcbSecurityDescriptor )
2693 *lpcbSecurityDescriptor);
2699 *lpcbSecurityDescriptor, lpcbSecurityDescriptor ) );
2750 TRACE(
"(%p,%i,%ld,%p,%i)\n", hkey, fWatchSubTree, fdwNotifyFilter,
2754 fdwNotifyFilter, fWatchSubTree,
NULL, 0,
2785 FIXME(
"(%p, 0x%lx, 0x%lx, %p) semi-stub\n", hToken,
dwOptions, samDesired, phkResult);
2796 TRACE(
"---------- MUI Cache ----------\n");
2798 TRACE(
"entry=%p, %s,-%lu [%#lx] => %s\n",
2861 TRACE(
"add %p\n", ent);
2865 TRACE(
"freeing %p\n", ent);
2918 *req_chars =
size + 1;
2927 if (
size < max_chars)
2930 if (
flags & REG_MUI_STRING_TRUNCATE)
2937 if (max_chars >= 0) {
2939 buffer[max_chars] =
'\0';
2976 DWORD dwValueType, cbData;
2980 TRACE(
"(hKey = %p, pwszValue = %s, pwszBuffer = %p, cbBuffer = %ld, pcbData = %p, "
2981 "dwFlags = %lu, pwszBaseDir = %s)\n",
hKey,
debugstr_w(pwszValue), pwszBuffer,
2985 if (!
hKey || (!pwszBuffer && cbBuffer) || (cbBuffer %
sizeof(
WCHAR))
2987 || (
dwFlags & ~REG_MUI_STRING_TRUNCATE))
2998 if (!pwszTempBuffer) {
3006 if (*pwszTempBuffer !=
'@') {
3015 if (!pwszExpandedBuffer) {
3023 WCHAR *pComma =
wcsrchr(pwszExpandedBuffer,
','), *pNewBuffer;
3029 if (!pComma || pComma[1] !=
'-') {
3038 baseDirLen = pwszBaseDir ?
lstrlenW(pwszBaseDir) : 0;
3039 cbData = (baseDirLen + 1 +
lstrlenW(pwszExpandedBuffer + 1) + 1) *
sizeof(
WCHAR);
3045 pwszTempBuffer = pNewBuffer;
3046 pwszTempBuffer[0] =
'\0';
3048 lstrcpyW(pwszTempBuffer, pwszBaseDir);
3049 if (pwszBaseDir[baseDirLen - 1] !=
'\\')
3052 lstrcatW(pwszTempBuffer, pwszExpandedBuffer + 1);
3085 DWORD name_size, max_name, max_subkey;
3091 if (subkey && *subkey)
3102 max_name =
max( max_subkey, max_name ) + 1;
3112 name_size = max_name;
3121 if (subkey && *subkey)
3130 name_size = max_name;
3142 if (subkey && *subkey)
3171 DWORD name_size, max_name;
3172 DWORD value_size, max_value;
3192 max_name =
max( max_subkey, max_name ) + 1;
3208 name_size = max_name;
3209 value_size = max_value;
3220 name_size = max_name;
3281 static const WCHAR allowed[] =
L"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&')(-_{}";
3294 if (!computername)
return FALSE;
3295 for (
i = 0;
i <
len;
i++)
3300 computername[
len] = 0;
3311 DWORD lenA, lenW = 0;
3347 const WCHAR *keyname, *valuename;
3353 case ComputerNameNetBIOS:
3354 case ComputerNamePhysicalNetBIOS:
3355 keyname =
L"System\\CurrentControlSet\\Control\\ComputerName\\ActiveComputerName";
3356 valuename =
L"ComputerName";
3358 case ComputerNameDnsHostname:
3359 case ComputerNamePhysicalDnsHostname:
3360 keyname =
L"System\\CurrentControlSet\\Services\\Tcpip\\Parameters";
3361 valuename =
L"Hostname";
3363 case ComputerNameDnsDomain:
3364 case ComputerNamePhysicalDnsDomain:
3365 keyname =
L"System\\CurrentControlSet\\Services\\Tcpip\\Parameters";
3366 valuename =
L"Domain";
3368 case ComputerNameDnsFullyQualified:
3369 case ComputerNamePhysicalDnsFullyQualified:
3466 case ComputerNameDnsHostname:
3467 case ComputerNamePhysicalDnsHostname:
3476 case ComputerNameNetBIOS:
3477 case ComputerNamePhysicalNetBIOS:
3502 case ComputerNameDnsDomain:
3503 case ComputerNamePhysicalDnsDomain:
3561 struct USKEY *mihk = hUSKey;
3585 struct USKEY *ret_key;
3600 ret_key = heap_alloc_zero(
sizeof(*ret_key));
3618 *new_uskey = ret_key;
3676 TRACE(
"%p, %#lx, %p, %p, %p, %p, %p, %#x\n", hUSKey,
index, value_name, value_name_len,
type,
data, data_len,
flags);
3684 FIXME(
"no support for SHREGENUM_BOTH\n");
3693 TRACE(
"%p, %#lx, %p, %p, %p, %p, %p, %#x\n", hUSKey,
index, value_name, value_name_len,
type,
data, data_len,
flags);
3701 FIXME(
"no support for SHREGENUM_BOTH\n");
3709 TRACE(
"%p, %ld, %p, %p(%ld), %d\n", hUSKey,
index,
name, name_len, *name_len,
flags);
3717 FIXME(
"no support for SHREGENUM_BOTH\n");
3725 TRACE(
"%p, %ld, %p, %p(%ld), %d\n", hUSKey,
index,
name, name_len, *name_len,
flags);
3733 FIXME(
"no support for SHREGENUM_BOTH\n");
3749 LONG ret2, ret1 = ~ERROR_SUCCESS;
3752 TRACE(
"%s, %#lx, %p, %p, %d\n",
debugstr_w(
path), access_mask, relative_key, uskey, ignore_hkcu);
3758 key = heap_alloc_zero(
sizeof(*
key));
3788 TRACE(
"one or more opens failed: HKCU=%ld HKLM=%ld\n", ret1, ret2);
3820 TRACE(
"%p, %s, %ld, %p, %ld, %#lx\n", hUSKey,
debugstr_w(
value),
type,
data, data_len,
flags);
3840 TRACE(
"Creating HKCU key, ret = %ld\n",
ret);
3854 TRACE(
"Writing HKCU value, ret = %ld\n",
ret);
3866 TRACE(
"Creating HKLM key, ret = %ld\n",
ret);
3880 TRACE(
"Writing HKLM value, ret = %ld\n",
ret);
3895 TRACE(
"%s, %s, %ld, %p, %ld, %#lx\n",
debugstr_a(subkey),
debugstr_a(
value),
type,
data, data_len,
flags);
3919 TRACE(
"%s, %s, %ld, %p, %ld, %#lx\n",
debugstr_w(subkey),
debugstr_w(
value),
type,
data, data_len,
flags);
3942 TRACE(
"%p, %p, %p, %p, %p, %#x\n", hUSKey, subkeys, max_subkey_len,
values, max_value_name_len,
flags);
3946 ret =
RegQueryInfoKeyA(dokey, 0, 0, 0, subkeys, max_subkey_len, 0,
values, max_value_name_len, 0, 0, 0);
3953 return RegQueryInfoKeyA(dokey, 0, 0, 0, subkeys, max_subkey_len, 0,
values, max_value_name_len, 0, 0, 0);
3965 TRACE(
"%p, %p, %p, %p, %p, %#x\n", hUSKey, subkeys, max_subkey_len,
values, max_value_name_len,
flags);
3969 ret =
RegQueryInfoKeyW(dokey, 0, 0, 0, subkeys, max_subkey_len, 0,
values, max_value_name_len, 0, 0, 0);
3976 return RegQueryInfoKeyW(dokey, 0, 0, 0, subkeys, max_subkey_len, 0,
values, max_value_name_len, 0, 0, 0);
3983 BOOL ignore_hkcu,
void *default_data,
DWORD default_data_len)
3993 TRACE(
"HKCU RegQueryValue returned %ld\n",
ret);
4000 TRACE(
"HKLM RegQueryValue returned %ld\n",
ret);
4006 if (default_data && default_data_len)
4008 move_len = default_data_len >= *data_len ? *data_len : default_data_len;
4010 *data_len = move_len;
4011 TRACE(
"setting default data\n");
4020 BOOL ignore_hkcu,
void *default_data,
DWORD default_data_len)
4030 TRACE(
"HKCU RegQueryValue returned %ld\n",
ret);
4037 TRACE(
"HKLM RegQueryValue returned %ld\n",
ret);
4043 if (default_data && default_data_len)
4045 move_len = default_data_len >= *data_len ? *data_len : default_data_len;
4047 *data_len = move_len;
4048 TRACE(
"setting default data\n");
4057 BOOL ignore_hkcu,
void *default_data,
DWORD default_data_len)
4062 if (!
data || !data_len)
4078 BOOL ignore_hkcu,
void *default_data,
DWORD default_data_len)
4083 if (!
data || !data_len)
4128 FIXME(
"Unsupported registry data type %ld\n",
type);
4131 TRACE(
"got value (type=%ld), returning %d\n",
type,
ret);
4134 TRACE(
"returning default value %d\n",
ret);
4169 FIXME(
"Unsupported registry data type %ld\n",
type);
4172 TRACE(
"got value (type=%ld), returning %d\n",
type,
ret);
4175 TRACE(
"returning default value %d\n",
ret);
NTSTATUS NtQueryObject(IN HANDLE Handle, IN OBJECT_INFO_CLASS ObjectInformationClass, OUT PVOID ObjectInformation, IN ULONG ObjectInformationLength, OUT PULONG ReturnLength)
ACPI_SIZE strlen(const char *String)
static struct sockaddr_in sa
static void * heap_alloc(size_t len)
static BOOL heap_free(void *mem)
static void * heap_realloc(void *mem, size_t len)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static const WCHAR nameW[]
#define FILE_NON_DIRECTORY_FILE
static void list_remove(struct list_entry *entry)
static void list_add_head(struct list_entry *head, struct list_entry *entry)
#define RegCloseKey(hKey)
#define STATUS_INVALID_HANDLE
#define ERROR_NOT_ENOUGH_MEMORY
#define ERROR_INVALID_FUNCTION
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
LONG WINAPI RegEnumKeyExW(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPWSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPWSTR lpClass, _Inout_opt_ LPDWORD lpcbClass, _Out_opt_ PFILETIME lpftLastWriteTime)
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
LONG WINAPI RegDeleteValueW(HKEY hKey, LPCWSTR lpValueName)
LONG WINAPI RegQueryInfoKeyW(HKEY hKey, LPWSTR lpClass, LPDWORD lpcClass, LPDWORD lpReserved, LPDWORD lpcSubKeys, LPDWORD lpcMaxSubKeyLen, LPDWORD lpcMaxClassLen, LPDWORD lpcValues, LPDWORD lpcMaxValueNameLen, LPDWORD lpcMaxValueLen, LPDWORD lpcbSecurityDescriptor, PFILETIME lpftLastWriteTime)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
BOOL WINAPI GetTokenInformation(HANDLE TokenHandle, TOKEN_INFORMATION_CLASS TokenInformationClass, LPVOID TokenInformation, DWORD TokenInformationLength, PDWORD ReturnLength)
BOOL WINAPI ImpersonateSelf(SECURITY_IMPERSONATION_LEVEL ImpersonationLevel)
BOOL WINAPI OpenThreadToken(HANDLE ThreadHandle, DWORD DesiredAccess, BOOL OpenAsSelf, HANDLE *TokenHandle)
#define ERROR_CALL_NOT_IMPLEMENTED
#define ERROR_INVALID_PARAMETER
#define GetProcAddress(x, y)
#define GetCurrentProcess()
#define ERROR_NO_MORE_ITEMS
#define HeapFree(x, y, z)
#define ERROR_INVALID_HANDLE
#define WideCharToMultiByte
#define MultiByteToWideChar
#define ERROR_ACCESS_DENIED
#define __EXCEPT_PAGE_FAULT
static void cleanup(void)
static const WCHAR valueW[]
DWORD WINAPI ExpandEnvironmentStringsA(IN LPCSTR lpSrc, IN LPSTR lpDst, IN DWORD nSize)
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
DWORD WINAPI GetFullPathNameW(IN LPCWSTR lpFileName, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart)
VOID WINAPI GetSystemTimeAsFileTime(OUT PFILETIME lpFileTime)
VOID WINAPI GetSystemTime(OUT LPSYSTEMTIME lpSystemTime)
LCID WINAPI GetThreadLocale(void)
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
int WINAPI lstrcmpiA(LPCSTR str1, LPCSTR str2)
LONG WINAPI SHRegDeleteEmptyUSKeyW(HUSKEY hUSKey, const WCHAR *value, SHREGDEL_FLAGS flags)
LONG WINAPI SHRegDeleteUSValueA(HUSKEY hUSKey, const char *value, SHREGDEL_FLAGS flags)
static DWORD query_perf_data(const WCHAR *query, DWORD *type, void *data, DWORD *ret_size, BOOL unicode)
#define IS_OPTION_TRUE(ch)
LSTATUS WINAPI RegEnumValueW(HKEY hkey, DWORD index, LPWSTR value, LPDWORD val_count, LPDWORD reserved, LPDWORD type, LPBYTE data, LPDWORD count)
static BOOL is_string(DWORD type)
static HKEY get_perflib_key(HANDLE key)
LSTATUS WINAPI RegDeleteValueA(HKEY hkey, LPCSTR name)
static HANDLE open_wow6432node(HANDLE key)
NTSTATUS WINAPI RemapPredefinedHandleInternal(HKEY hkey, HKEY override)
static void dump_mui_cache(void)
LONG WINAPI SHRegGetUSValueW(const WCHAR *subkey, const WCHAR *value, DWORD *type, void *data, DWORD *data_len, BOOL ignore_hkcu, void *default_data, DWORD default_data_len)
LONG WINAPI RegDeleteKeyValueW(HKEY hkey, LPCWSTR subkey, LPCWSTR name)
LONG WINAPI SHRegSetUSValueW(const WCHAR *subkey, const WCHAR *value, DWORD type, void *data, DWORD data_len, DWORD flags)
#define REG_MUI_CACHE_SIZE
static BOOL is_classes_wow6432node(HKEY key)
LONG WINAPI SHRegWriteUSValueA(HUSKEY hUSKey, const char *value, DWORD type, void *data, DWORD data_len, DWORD flags)
LSTATUS WINAPI RegGetKeySecurity(HKEY hkey, SECURITY_INFORMATION SecurityInformation, PSECURITY_DESCRIPTOR pSecurityDescriptor, LPDWORD lpcbSecurityDescriptor)
LONG WINAPI SHRegDeleteEmptyUSKeyA(HUSKEY hUSKey, const char *value, SHREGDEL_FLAGS flags)
static BOOL is_version_nt(void)
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
static struct list reg_mui_cache
LSTATUS WINAPI RegOpenCurrentUser(REGSAM access, PHKEY retkey)
static BOOL is_classes_root(const UNICODE_STRING *name)
static void reg_mui_cache_put(const WCHAR *file_name, UINT index, const WCHAR *buffer, INT size)
static BOOL is_perf_key(HKEY key)
LSTATUS WINAPI RegLoadMUIStringW(HKEY hKey, LPCWSTR pwszValue, LPWSTR pwszBuffer, DWORD cbBuffer, LPDWORD pcbData, DWORD dwFlags, LPCWSTR pwszBaseDir)
LONG WINAPI RegDeleteKeyValueA(HKEY hkey, LPCSTR subkey, LPCSTR name)
LSTATUS WINAPI RegDeleteTreeA(HKEY hkey, const char *subkey)
LSTATUS WINAPI RegRestoreKeyW(HKEY hkey, LPCWSTR lpFile, DWORD dwFlags)
static HKEY reg_duplicate_hkey(HKEY hKey)
LONG WINAPI SHRegQueryInfoUSKeyA(HUSKEY hUSKey, DWORD *subkeys, DWORD *max_subkey_len, DWORD *values, DWORD *max_value_name_len, SHREGENUM_FLAGS flags)
LSTATUS WINAPI RegNotifyChangeKeyValue(HKEY hkey, BOOL fWatchSubTree, DWORD fdwNotifyFilter, HANDLE hEvent, BOOL fAsync)
LSTATUS WINAPI RegUnLoadKeyW(HKEY hkey, LPCWSTR lpSubKey)
static unsigned int reg_mui_cache_count
static void free_mui_cache_entry(struct mui_cache_entry *ent)
LSTATUS WINAPI RegOpenUserClassesRoot(HANDLE hToken, DWORD dwOptions, REGSAM samDesired, PHKEY phkResult)
static const WCHAR *const root_key_names[]
NTSTATUS WINAPI DisablePredefinedHandleTableInternal(HKEY hkey)
static void * get_provider_entry(HKEY perf, HMODULE perflib, const char *name)
static NTSTATUS open_subkey(HKEY *subkey, HKEY root, UNICODE_STRING *name, DWORD options, ACCESS_MASK access)
LONG WINAPI RegSetKeyValueW(HKEY hkey, LPCWSTR subkey, LPCWSTR name, DWORD type, const void *data, DWORD len)
static DWORD query_perf_names(DWORD *type, void *data, DWORD *ret_size, BOOL unicode)
LONG WINAPI SHRegQueryInfoUSKeyW(HUSKEY hUSKey, DWORD *subkeys, DWORD *max_subkey_len, DWORD *values, DWORD *max_value_name_len, SHREGENUM_FLAGS flags)
LONG WINAPI SHRegEnumUSKeyA(HUSKEY hUSKey, DWORD index, char *name, DWORD *name_len, SHREGENUM_FLAGS flags)
LSTATUS WINAPI RegEnumValueA(HKEY hkey, DWORD index, LPSTR value, LPDWORD val_count, LPDWORD reserved, LPDWORD type, LPBYTE data, LPDWORD count)
#define HKEY_SPECIAL_ROOT_LAST
LONG WINAPI SHRegGetUSValueA(const char *subkey, const char *value, DWORD *type, void *data, DWORD *data_len, BOOL ignore_hkcu, void *default_data, DWORD default_data_len)
BOOL WINAPI GetComputerNameExW(COMPUTER_NAME_FORMAT type, WCHAR *name, DWORD *len)
LSTATUS WINAPI DECLSPEC_HOTPATCH RegQueryValueExA(HKEY hkey, LPCSTR name, LPDWORD reserved, LPDWORD type, LPBYTE data, LPDWORD count)
LSTATUS WINAPI RegEnumKeyExA(HKEY hkey, DWORD index, LPSTR name, LPDWORD name_len, LPDWORD reserved, LPSTR class, LPDWORD class_len, FILETIME *ft)
BOOL WINAPI DECLSPEC_HOTPATCH SetComputerNameW(const WCHAR *name)
LSTATUS WINAPI RegDeleteTreeW(HKEY hkey, const WCHAR *subkey)
LSTATUS WINAPI RegSetKeySecurity(HKEY hkey, SECURITY_INFORMATION SecurityInfo, PSECURITY_DESCRIPTOR pSecurityDesc)
LONG WINAPI SHRegOpenUSKeyA(const char *path, REGSAM access_mask, HUSKEY relative_key, HUSKEY *uskey, BOOL ignore_hkcu)
LONG WINAPI SHRegCreateUSKeyA(LPCSTR path, REGSAM samDesired, HUSKEY relative_key, PHUSKEY new_uskey, DWORD flags)
BOOL WINAPI DECLSPEC_HOTPATCH DnsHostnameToComputerNameExW(const WCHAR *hostname, WCHAR *computername, DWORD *size)
BOOL WINAPI DECLSPEC_HOTPATCH SetComputerNameExA(COMPUTER_NAME_FORMAT type, const char *name)
static HKEY get_special_root_hkey(HKEY hkey)
static int reg_mui_cache_get(const WCHAR *file_name, UINT index, WCHAR **buffer)
BOOL WINAPI SHRegGetBoolUSValueA(const char *subkey, const char *value, BOOL ignore_hkcu, BOOL default_value)
BOOL WINAPI SHRegGetBoolUSValueW(const WCHAR *subkey, const WCHAR *value, BOOL ignore_hkcu, BOOL default_value)
LONG WINAPI SHRegEnumUSValueA(HUSKEY hUSKey, DWORD index, char *value_name, DWORD *value_name_len, DWORD *type, void *data, DWORD *data_len, SHREGENUM_FLAGS flags)
static BOOL load_provider(HKEY root, const WCHAR *name, struct perf_provider *provider)
#define HKEY_SPECIAL_ROOT_FIRST
LONG WINAPI SHRegCloseUSKey(HUSKEY hUSKey)
LSTATUS WINAPI RegGetValueA(HKEY hKey, LPCSTR pszSubKey, LPCSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
LONG WINAPI SHRegSetUSValueA(const char *subkey, const char *value, DWORD type, void *data, DWORD data_len, DWORD flags)
LSTATUS WINAPI RegSaveKeyExW(HKEY hkey, LPCWSTR file, SECURITY_ATTRIBUTES *sa, DWORD flags)
static HKEY special_root_keys[ARRAY_SIZE(root_key_names)]
LONG WINAPI SHRegEnumUSValueW(HUSKEY hUSKey, DWORD index, WCHAR *value_name, DWORD *value_name_len, DWORD *type, void *data, DWORD *data_len, SHREGENUM_FLAGS flags)
BOOL WINAPI DECLSPEC_HOTPATCH SetComputerNameExW(COMPUTER_NAME_FORMAT type, const WCHAR *name)
static DWORD collect_data(struct perf_provider *provider, const WCHAR *query, void **data, DWORD *size, DWORD *obj_count)
LONG WINAPI SHRegQueryUSValueW(HUSKEY hUSKey, const WCHAR *value, DWORD *type, void *data, DWORD *data_len, BOOL ignore_hkcu, void *default_data, DWORD default_data_len)
static HANDLE open_classes_root(void)
LSTATUS WINAPI RegSaveKeyExA(HKEY hkey, LPCSTR file, SECURITY_ATTRIBUTES *sa, DWORD flags)
static LONG load_mui_string(const WCHAR *file_name, UINT res_id, WCHAR *buffer, INT max_chars, INT *req_chars, DWORD flags)
LSTATUS WINAPI RegCopyTreeW(HKEY hsrc, const WCHAR *subkey, HKEY hdst)
static NTSTATUS open_wow6432node_parent(HKEY *retkey, HKEY root, DWORD options, ACCESS_MASK access)
static HKEY create_special_root_hkey(HKEY hkey, DWORD access)
static DWORD query_perf_help(DWORD *type, void *data, DWORD *ret_size, BOOL unicode)
static BOOL cache_disabled[ARRAY_SIZE(root_key_names)]
LONG WINAPI RegSetKeyValueA(HKEY hkey, LPCSTR subkey, LPCSTR name, DWORD type, const void *data, DWORD len)
LSTATUS WINAPI RegDeleteKeyExW(HKEY hkey, LPCWSTR name, REGSAM access, DWORD reserved)
static NTSTATUS create_key(HKEY *retkey, HKEY root, UNICODE_STRING name, ULONG options, ACCESS_MASK access, const UNICODE_STRING *class, PULONG dispos)
LSTATUS WINAPI RegLoadKeyA(HKEY hkey, LPCSTR subkey, LPCSTR filename)
LONG WINAPI SHRegDeleteUSValueW(HUSKEY hUSKey, const WCHAR *value, SHREGDEL_FLAGS flags)
LSTATUS WINAPI RegLoadKeyW(HKEY hkey, LPCWSTR subkey, LPCWSTR filename)
LSTATUS WINAPI RegLoadAppKeyA(const char *file, HKEY *result, REGSAM sam, DWORD options, DWORD reserved)
LSTATUS WINAPI RegDeleteKeyExA(HKEY hkey, LPCSTR name, REGSAM access, DWORD reserved)
static CRITICAL_SECTION reg_mui_cs
LSTATUS WINAPI RegQueryInfoKeyA(HKEY hkey, LPSTR class, LPDWORD class_len, LPDWORD reserved, LPDWORD subkeys, LPDWORD max_subkey, LPDWORD max_class, LPDWORD values, LPDWORD max_value, LPDWORD max_data, LPDWORD security, FILETIME *modif)
BOOL WINAPI GetComputerNameExA(COMPUTER_NAME_FORMAT type, char *name, DWORD *len)
LONG WINAPI SHRegOpenUSKeyW(const WCHAR *path, REGSAM access_mask, HUSKEY relative_key, HUSKEY *uskey, BOOL ignore_hkcu)
LONG WINAPI SHRegCreateUSKeyW(const WCHAR *path, REGSAM samDesired, HUSKEY relative_key, PHUSKEY new_uskey, DWORD flags)
LONG WINAPI SHRegQueryUSValueA(HUSKEY hUSKey, const char *value, DWORD *type, void *data, DWORD *data_len, BOOL ignore_hkcu, void *default_data, DWORD default_data_len)
LSTATUS WINAPI DECLSPEC_HOTPATCH RegOpenKeyExA(HKEY hkey, LPCSTR name, DWORD options, REGSAM access, PHKEY retkey)
LSTATUS WINAPI RegRestoreKeyA(HKEY hkey, LPCSTR lpFile, DWORD dwFlags)
LSTATUS WINAPI DECLSPEC_HOTPATCH RegSetValueExA(HKEY hkey, LPCSTR name, DWORD reserved, DWORD type, const BYTE *data, DWORD count)
LSTATUS WINAPI DECLSPEC_HOTPATCH RegCreateKeyExA(HKEY hkey, LPCSTR name, DWORD reserved, LPSTR class, DWORD options, REGSAM access, SECURITY_ATTRIBUTES *sa, PHKEY retkey, LPDWORD dispos)
LONG WINAPI SHRegEnumUSKeyW(HUSKEY hUSKey, DWORD index, WCHAR *name, DWORD *name_len, SHREGENUM_FLAGS flags)
LSTATUS WINAPI RegLoadMUIStringA(HKEY hKey, LPCSTR pszValue, LPSTR pszBuffer, DWORD cbBuffer, LPDWORD pcbData, DWORD dwFlags, LPCSTR pszBaseDir)
static void apply_restrictions(DWORD dwFlags, DWORD dwType, DWORD cbData, PLONG ret)
static CRITICAL_SECTION_DEBUG reg_mui_cs_debug
LSTATUS WINAPI RegUnLoadKeyA(HKEY hkey, LPCSTR lpSubKey)
static HKEY reg_get_hkey_from_huskey(HUSKEY hUSKey, BOOL is_hkcu)
BOOL WINAPI DECLSPEC_HOTPATCH SetComputerNameA(const char *name)
static NTSTATUS create_subkey(HKEY *subkey, HKEY root, UNICODE_STRING *name, DWORD options, ACCESS_MASK access, const UNICODE_STRING *class, PULONG dispos)
static BOOL is_wow6432node(const UNICODE_STRING *name)
LSTATUS WINAPI RegFlushKey(HKEY hkey)
LONG WINAPI SHRegWriteUSValueW(HUSKEY hUSKey, const WCHAR *value, DWORD type, void *data, DWORD data_len, DWORD flags)
LSTATUS WINAPI RegLoadAppKeyW(const WCHAR *file, HKEY *result, REGSAM sam, DWORD options, DWORD reserved)
BOOL WINAPI RevertToSelf(void)
INT WINAPI DECLSPEC_HOTPATCH LoadStringW(HINSTANCE instance, UINT resource_id, LPWSTR buffer, INT buflen)
DWORD WINAPI GetVersion(void)
#define RRF_RT_REG_BINARY
#define RRF_ZEROONFAILURE
#define RRF_RT_REG_MULTI_SZ
#define RRF_RT_REG_EXPAND_SZ
static const WCHAR fileW[]
#define InterlockedExchangePointer(Target, Value)
_Must_inspect_result_ _In_ PFILE_OBJECT _In_ SECURITY_INFORMATION SecurityInformation
#define FILE_OVERWRITE_IF
#define FILE_SYNCHRONOUS_IO_NONALERT
GLuint GLuint GLsizei count
GLuint GLuint GLsizei GLenum type
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum GLuint GLenum GLsizei const GLchar * buf
GLboolean GLenum GLenum GLvoid * values
GLuint GLint GLboolean GLint GLenum access
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat token
#define OBJ_CASE_INSENSITIVE
NTSYSAPI NTSTATUS WINAPI NtOpenKeyEx(PHANDLE, ACCESS_MASK, const OBJECT_ATTRIBUTES *, ULONG)
NTSYSAPI ULONG WINAPI RtlNtStatusToDosError(NTSTATUS)
NTSYSAPI NTSTATUS WINAPI RtlDosPathNameToNtPathName_U_WithStatus(PCWSTR, PUNICODE_STRING, PWSTR *, CURDIR *)
#define InterlockedCompareExchangePointer
int const JOCTET unsigned int datalen
static const BOOL is_win64
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
#define memcpy(s1, s2, n)
#define memmove(s1, s2, n)
#define ERROR_FILE_NOT_FOUND
static const WCHAR filenameW[]
static const struct access_res create[16]
static HANDLE PIO_APC_ROUTINE PVOID PIO_STATUS_BLOCK io
static PIO_STATUS_BLOCK iosb
#define InitializeObjectAttributes(p, n, a, r, s)
static ACCESS_MASK const OBJECT_ATTRIBUTES ULONG const UNICODE_STRING ULONG PULONG dispos
static CHAR filenameA[MAX_PATH]
DWORD SECURITY_INFORMATION
NTSYSAPI NTSTATUS NTAPI RtlOpenCurrentUser(_In_ ACCESS_MASK DesiredAccess, _Out_ PHANDLE KeyHandle)
NTSYSAPI NTSTATUS NTAPI RtlEnterCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
NTSYSAPI NTSTATUS NTAPI RtlLeaveCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
NTSYSAPI BOOLEAN NTAPI RtlCreateUnicodeStringFromAsciiz(_Out_ PUNICODE_STRING Destination, _In_ PCSZ Source)
NTSYSAPI BOOLEAN NTAPI RtlDosPathNameToNtPathName_U(_In_opt_z_ PCWSTR DosPathName, _Out_ PUNICODE_STRING NtPathName, _Out_opt_ PCWSTR *NtFileNamePart, _Out_opt_ PRTL_RELATIVE_NAME_U DirectoryInfo)
_Use_decl_annotations_ NTSTATUS NTAPI RtlUnicodeToMultiByteN(_Out_ PCHAR MbString, _In_ ULONG MbSize, _Out_opt_ PULONG ResultSize, _In_ PCWCH UnicodeString, _In_ ULONG UnicodeSize)
_Use_decl_annotations_ NTSTATUS NTAPI RtlUnicodeToMultiByteSize(_Out_ PULONG MbSize, _In_ PCWCH UnicodeString, _In_ ULONG UnicodeSize)
_Use_decl_annotations_ NTSTATUS NTAPI RtlMultiByteToUnicodeN(_Out_ PWCH UnicodeString, _In_ ULONG UnicodeSize, _Out_opt_ PULONG ResultSize, _In_ PCCH MbString, _In_ ULONG MbSize)
_Use_decl_annotations_ NTSTATUS NTAPI RtlMultiByteToUnicodeSize(_Out_ PULONG UnicodeSize, _In_ PCCH MbString, _In_ ULONG MbSize)
NTSYSAPI NTSTATUS NTAPI NtSetValueKey(IN HANDLE KeyHandle, IN PUNICODE_STRING ValueName, IN ULONG TitleIndex OPTIONAL, IN ULONG Type, IN PVOID Data, IN ULONG DataSize)
#define REG_OPTION_OPEN_LINK
@ KeyValuePartialInformation
@ KeyValueFullInformation
NTSYSAPI NTSTATUS NTAPI NtDeleteValueKey(IN HANDLE KeyHandle, IN PUNICODE_STRING ValueName)
#define REG_OPTION_CREATE_LINK
NTSYSAPI NTSTATUS NTAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING DestinationString, PANSI_STRING SourceString, BOOLEAN AllocateDestinationString)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSYSAPI NTSTATUS NTAPI NtQueryValueKey(IN HANDLE KeyHandle, IN PUNICODE_STRING ValueName, IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, IN PVOID KeyValueInformation, IN ULONG Length, IN PULONG ResultLength)
#define REG_OPTION_NON_VOLATILE
NTSYSAPI NTSTATUS NTAPI NtEnumerateKey(IN HANDLE KeyHandle, IN ULONG Index, IN KEY_INFORMATION_CLASS KeyInformationClass, IN PVOID KeyInformation, IN ULONG Length, IN PULONG ResultLength)
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
#define REG_OPENED_EXISTING_KEY
NTSTATUS NTAPI NtCreateFile(OUT PHANDLE FileHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK IoStatusBlock, IN PLARGE_INTEGER AllocationSize OPTIONAL, IN ULONG FileAttributes, IN ULONG ShareAccess, IN ULONG CreateDisposition, IN ULONG CreateOptions, IN PVOID EaBuffer OPTIONAL, IN ULONG EaLength)
NTSYSAPI VOID NTAPI RtlInitAnsiString(PANSI_STRING DestinationString, PCSZ SourceString)
NTSTATUS NTAPI NtUnloadKey(IN POBJECT_ATTRIBUTES KeyObjectAttributes)
NTSTATUS NTAPI NtDeleteKey(IN HANDLE KeyHandle)
NTSTATUS NTAPI NtNotifyChangeKey(IN HANDLE KeyHandle, IN HANDLE Event, IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, IN PVOID ApcContext OPTIONAL, OUT PIO_STATUS_BLOCK IoStatusBlock, IN ULONG CompletionFilter, IN BOOLEAN WatchTree, OUT PVOID Buffer, IN ULONG Length, IN BOOLEAN Asynchronous)
NTSTATUS NTAPI NtCreateKey(OUT PHANDLE KeyHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN ULONG TitleIndex, IN PUNICODE_STRING Class OPTIONAL, IN ULONG CreateOptions, OUT PULONG Disposition OPTIONAL)
NTSTATUS NTAPI NtFlushKey(IN HANDLE KeyHandle)
NTSTATUS NTAPI NtSaveKey(IN HANDLE KeyHandle, IN HANDLE FileHandle)
NTSTATUS NTAPI NtEnumerateValueKey(IN HANDLE KeyHandle, IN ULONG Index, IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, OUT PVOID KeyValueInformation, IN ULONG Length, OUT PULONG ResultLength)
NTSTATUS NTAPI NtLoadKey(IN POBJECT_ATTRIBUTES KeyObjectAttributes, IN POBJECT_ATTRIBUTES FileObjectAttributes)
NTSTATUS NTAPI NtQueryKey(IN HANDLE KeyHandle, IN KEY_INFORMATION_CLASS KeyInformationClass, OUT PVOID KeyInformation, IN ULONG Length, OUT PULONG ResultLength)
NTSYSAPI NTSTATUS NTAPI RtlConvertSidToUnicodeString(OUT PUNICODE_STRING DestinationString, IN PVOID Sid, IN BOOLEAN AllocateDestinationString)
NTSTATUS NTAPI NtQueryPerformanceCounter(OUT PLARGE_INTEGER PerformanceCounter, OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL)
#define STATUS_OBJECT_PATH_INVALID
#define STATUS_PREDEFINED_HANDLE
NTSTATUS NTAPI NtDuplicateObject(IN HANDLE SourceProcessHandle, IN HANDLE SourceHandle, IN HANDLE TargetProcessHandle OPTIONAL, OUT PHANDLE TargetHandle OPTIONAL, IN ACCESS_MASK DesiredAccess, IN ULONG HandleAttributes, IN ULONG Options)
NTSTATUS NTAPI NtQuerySecurityObject(IN HANDLE Handle, IN SECURITY_INFORMATION SecurityInformation, OUT PSECURITY_DESCRIPTOR SecurityDescriptor, IN ULONG Length, OUT PULONG ResultLength)
#define open_key(r, p, s, k)
#define offsetof(TYPE, MEMBER)
_Check_return_ long __cdecl wcstol(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
#define DECLSPEC_HOTPATCH
const char int int int static __inline const char * wine_dbgstr_a(const char *s)
static void * heap_calloc(SIZE_T count, SIZE_T size)
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
__WINE_SERVER_LIST_INLINE struct list * list_prev(const struct list *list, const struct list *elem)
__WINE_SERVER_LIST_INLINE struct list * list_tail(const struct list *list)
#define STATUS_BUFFER_TOO_SMALL
#define STATUS_BUFFER_OVERFLOW
NTSTATUS WINAPI NtSetSecurityObject(HANDLE Handle, SECURITY_INFORMATION SecurityInformation, PSECURITY_DESCRIPTOR SecurityDescriptor)
#define SHREGSET_FORCE_HKLM
#define SHREGSET_FORCE_HKCU
LIST_ENTRY ProcessLocksList
PVOID SecurityQualityOfService
PUNICODE_STRING ObjectName
PM_COLLECT_PROC * pCollect
#define RTL_CONSTANT_STRING(s)
#define STATUS_OBJECT_NAME_COLLISION
#define STATUS_OBJECT_NAME_NOT_FOUND
static const WCHAR classW[]
#define INVALID_FILE_ATTRIBUTES
DWORD WINAPI GetLastError(void)
HANDLE WINAPI GetCurrentThread(void)
#define LOAD_LIBRARY_AS_IMAGE_RESOURCE
#define LOAD_LIBRARY_AS_DATAFILE
#define MAX_COMPUTERNAME_LENGTH
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
_In_ DWORD _Out_writes_bytes_to_opt_ pcbData void _Inout_ DWORD * pcbData
_In_ ULONG _In_opt_ PVOID pvData
#define ERROR_UNSUPPORTED_TYPE
#define ERROR_DATATYPE_MISMATCH
#define ERROR_INVALID_DATA
#define PERF_DATA_REVISION
#define PERF_DATA_VERSION
#define HKEY_LOCAL_MACHINE
#define HKEY_CURRENT_CONFIG
#define HKEY_CURRENT_USER
#define HKEY_PERFORMANCE_TEXT
#define HKEY_PERFORMANCE_NLSTEXT
#define HKEY_PERFORMANCE_DATA
#define HKEY_CLASSES_ROOT
#define DUPLICATE_SAME_ACCESS
#define DACL_SECURITY_INFORMATION
#define OWNER_SECURITY_INFORMATION
#define GROUP_SECURITY_INFORMATION
#define SACL_SECURITY_INFORMATION