26#define WIN32_NO_STATUS
38#ifndef wine_dbg_sprintf
51#define IS_HKCR(hk) ((UINT_PTR)hk > 0 && ((UINT_PTR)hk & 3) == 2)
56static const char *
sTestpath1 =
"%LONGSYSTEMVAR%\\subdir1";
99#define ADVAPI32_GET_PROC(func) \
100 p ## func = (void*)GetProcAddress(hadvapi32, #func)
175 ok(hkey !=
NULL,
"RegOpenKeyExA succeeded but returned NULL hkey\n");
180 ok(hkey ==
NULL,
"RegOpenKeyExA failed but returned hkey %p\n", hkey);
182 trace(
"running as limited user\n");
186#define lok ok_(__FILE__, line)
187#define test_hkey_main_Value_A(name, string, full_byte_len) _test_hkey_main_Value_A(__LINE__, name, string, full_byte_len)
205 ok(
GLE == 0xdeadbeef,
"RegQueryValueExA set GLE = %lu\n",
GLE);
208 str_byte_len = (
string ?
lstrlenA(
string) : 0) + 1;
210 lok(
cbData == full_byte_len,
"cbData=%ld instead of %ld or %ld\n",
cbData, full_byte_len, str_byte_len);
221 lok(*
value == 0xbd,
"RegQueryValueExA overflowed: cbData=%lu *value=%02x\n",
cbData, *
value);
227 debugstr_an(
string, full_byte_len), full_byte_len);
233#define test_hkey_main_Value_W(name, string, full_byte_len) _test_hkey_main_Value_W(__LINE__, name, string, full_byte_len)
251 win_skip(
"RegQueryValueExW() is not implemented\n");
257 "cbData=%ld instead of %ld\n",
cbData, full_byte_len);
282 static const WCHAR name1W[] =
L"CleanSingleString";
283 static const WCHAR name2W[] =
L"SomeIntraZeroedString";
285 static const WCHAR string1W[] =
L"ThisNeverBreaks";
286 static const WCHAR string2W[] =
L"This\0Breaks\0\0A\0\0\0Lot\0\0\0\0";
287 static const WCHAR substring2W[] =
L"This";
289 static const char name1A[] =
"CleanSingleString";
290 static const char name2A[] =
"SomeIntraZeroedString";
291 static const char emptyA[] =
"";
292 static const char string1A[] =
"ThisNeverBreaks";
293 static const char string2A[] =
"This\0Breaks\0\0A\0\0\0Lot\0\0\0\0";
294 static const char substring2A[] =
"This";
437 if (!pRegSetKeyValueW)
438 win_skip(
"RegSetKeyValue() is not supported.\n");
457 ok(
len ==
sizeof(string1W),
"got %ld\n",
len);
475 static const DWORD qw[2] = { 0x12345678, 0x87654321 };
481 "RegSetValueExA failed\n");
483 "RegSetValueExA failed\n");
485 "RegSetValueExA failed\n");
487 "RegSetValueExA failed\n");
489 "RegSetValueExA failed\n");
491 "RegSetValueExA failed\n");
493 "RegSetValueExA failed\n");
513 ok( !
res,
"RegSetValueExA returned %ld\n",
res );
527 ok( val_count == 4,
"val_count set to %ld instead of 4\n", val_count );
528 ok( data_count == 0,
"data_count set to %ld instead of 0\n", data_count );
531 ok( !
strcmp(
data,
"xxxxxxxxxx" ),
"data is '%s' instead of xxxxxxxxxx\n",
data );
540 ok( val_count == 4,
"val_count set to %ld instead of 4\n", val_count );
541 ok( data_count == 0,
"data_count set to %ld instead of 0\n", data_count );
544 ok( !
wcscmp( dataW,
L"xxxxxxxx" ),
"data is not 'xxxxxxxx'\n" );
547 ok(
res == 0,
"RegSetValueExA failed error %ld\n",
res );
557 ok( val_count == 2,
"val_count set to %ld\n", val_count );
559 ok( data_count == 7 ||
broken( data_count > 7 ),
"data_count set to %ld instead of 7\n", data_count );
573 ok( val_count == 3,
"val_count set to %ld\n", val_count );
578 ok( data_count == 7 ||
broken( data_count > 7 ),
"data_count set to %ld instead of 7\n", data_count );
584 "value set to '%s' instead of 'Te' or 'xxxxxxxxxx'\n",
value );
586 broken( data_count > 7 && data_count < 16 &&
589 "data set to '%s' instead of 'foobar' or x's, data_count=%lu\n",
data, data_count );
600 ok( val_count == 0,
"val_count set to %ld\n", val_count );
602 ok( data_count == 7 ||
broken( data_count > 7 ),
"data_count set to %ld instead of 7\n", data_count );
607 broken( data_count > 7 && data_count < 16 &&
610 "data set to '%s' instead of 'foobar' or x's, data_count=%lu\n",
data, data_count );
620 ok( val_count == 20,
"val_count set to %ld\n", val_count );
621 ok( data_count == 7,
"data_count set to %ld instead of 7\n", data_count );
634 ok( val_count == 4,
"val_count set to %ld instead of 4\n", val_count );
635 ok( data_count == 7,
"data_count set to %ld instead of 7\n", data_count );
672 win_skip(
"RegSetValueExW is not implemented\n");
675 ok(
res == 0,
"RegSetValueExW failed error %ld\n",
res );
685 ok( val_count == 2,
"val_count set to %ld\n", val_count );
686 ok( data_count == 7*
sizeof(
WCHAR),
"data_count set to %ld instead of 7*sizeof(WCHAR)\n", data_count );
689 ok( !
wcscmp( dataW,
L"xxxxxxxx" ),
"data modified\n" );
699 ok( val_count == 3,
"val_count set to %ld\n", val_count );
700 ok( data_count == 7*
sizeof(
WCHAR),
"data_count set to %ld instead of 7*sizeof(WCHAR)\n", data_count );
703 ok( !
wcscmp( dataW,
L"xxxxxxxx" ),
"data modified\n" );
713 ok( val_count == 4,
"val_count set to %ld instead of 4\n", val_count );
714 ok( data_count == 7*
sizeof(
WCHAR),
"data_count set to %ld instead of 7*sizeof(WCHAR)\n", data_count );
717 ok( !
wcscmp( dataW,
L"xxxxxxxx" ),
"data modified\n" );
727 ok( val_count == 4,
"val_count set to %ld instead of 4\n", val_count );
728 ok( data_count == 7*
sizeof(
WCHAR),
"data_count set to %ld instead of 7*sizeof(WCHAR)\n", data_count );
731 ok( !
wcscmp( dataW,
L"foobar" ),
"data is not 'foobar'\n" );
779 ok(
size == 0,
"size should have been set to 0 instead of %ld\n",
size);
784 ok(
size ==
sizeof(
buffer),
"size shouldn't have been changed to %ld\n",
size);
798 CHAR expanded[] =
"bar\\subdir1";
799 CHAR expanded2[] =
"ImARatherLongButIndeedNeededString\\subdir1";
803 win_skip(
"RegGetValue not available on this platform\n");
817 ok(
dw == 0x12345678,
"dw=%ld\n",
dw);
848 ok(
dw == 0x12345678,
"dw=%ld\n",
dw);
858 ok(
dw == 0,
"dw=%ld\n",
dw);
873 ok(
dw == 0x12345678,
"dw=%ld\n",
dw);
881 ok(
dw == 0x12345678,
"dw=%ld\n",
dw);
884 qw[0] = qw[1] =
size =
type = 0xdeadbeef;
889 ok(qw[0] == 0x12345678 &&
890 qw[1] == 0x87654321,
"qw={%ld,%ld}\n", qw[0], qw[1]);
896 ok(
dw == 0xdeadbeef,
"dw=%ld\n",
dw);
900 qw[0] = qw[1] =
size =
type = 0xdeadbeef;
905 ok(qw[0] == 0x12345678 &&
906 qw[1] == 0x87654321,
"qw={%ld,%ld}\n", qw[0], qw[1]);
961 ok(!
strcmp(expanded,
buf),
"expanded=\"%s\" buf=\"%s\"\n", expanded,
buf);
970 ok(!
strcmp(expanded2,
buf),
"expanded2=\"%s\" buf=\"%s\"\n", expanded2,
buf);
1002 ok(!
strcmp(expanded,
buf),
"expanded=\"%s\" buf=\"%s\"\n", expanded,
buf);
1022 ok(hkResult !=
NULL,
"expected hkResult != NULL\n");
1023 hkPreserve = hkResult;
1028 ok(hkResult != hkPreserve,
"expected hkResult != hkPreserve\n");
1029 ok(hkResult !=
NULL,
"hkResult != NULL\n");
1040 hkResult = hkPreserve;
1043 ok(hkResult ==
NULL,
"expected hkResult == NULL\n");
1046 hkResult = hkPreserve;
1049 ok(hkResult ==
NULL,
"expected hkResult == NULL\n");
1054 hkResult = hkPreserve;
1060 hkResult = hkPreserve;
1068 hkResult = hkPreserve;
1071 ok(hkResult ==
NULL,
"expected hkResult == NULL\n");
1076 hkResult = hkPreserve;
1079 "expected ERROR_INVALID_HANDLE or ERROR_BADKEY, got %ld\n",
ret);
1080 ok(hkResult == hkPreserve,
"expected hkResult == hkPreserve\n");
1095 "expected ERROR_BAD_PATHNAME or ERROR_FILE_NOT_FOUND, got %ld\n",
ret);
1101 "expected ERROR_SUCCESS, ERROR_BAD_PATHNAME or ERROR_FILE_NOT_FOUND, got %ld\n",
ret);
1122 hkResult = hkPreserve;
1125 ok(hkResult != hkPreserve,
"expected hkResult != hkPreserve\n");
1129 hkResult = hkPreserve;
1132 ok(hkResult != hkPreserve,
"expected hkResult != hkPreserve\n");
1136 hkResult = hkPreserve;
1142 ok(hkResult ==
NULL,
"expected hkResult == NULL\n");
1145 hkResult = hkPreserve;
1148 ok(hkResult == hkPreserve,
"expected hkResult == hkPreserve\n");
1171 ok(hkResult !=
NULL,
"expected hkResult != NULL\n");
1176 ok(hkResult !=
NULL,
"expected hkResult != NULL\n");
1181 ok(hkResult !=
NULL,
"expected hkResult != NULL\n");
1186 ok(hkResult !=
NULL,
"expected hkResult != NULL\n");
1192 ok(hkResult !=
NULL,
"expected hkResult != NULL\n");
1202 skip(
"Not running WoW64 tests on 32-bit\n");
1209 "RegCreateKeyEx with KEY_WOW64_32KEY failed (err=%lu)\n",
ret);
1211 ok(hkRoot32 !=
NULL,
"hkRoot32 was set\n");
1216 "RegCreateKeyEx with KEY_WOW64_64KEY failed (err=%lu)\n",
ret);
1223 ok(hkRoot64 !=
NULL,
"hkRoot64 was set\n");
1226 0, 0, 0, 0, 0, 0, 0, &world_sid);
1228 "Expected AllocateAndInitializeSid to return TRUE, got %d, last error %lu\n", bRet,
GetLastError());
1237 access.Trustee.ptstrName = (
char *)world_sid;
1241 "Expected SetEntriesInAclA to return ERROR_SUCCESS, got %lu, last error %lu\n",
ret,
GetLastError());
1246 "Expected InitializeSecurityDescriptor to return TRUE, got %d, last error %lu\n", bRet,
GetLastError());
1250 "Expected SetSecurityDescriptorDacl to return TRUE, got %d, last error %lu\n", bRet,
GetLastError());
1254 skip(
"not enough privileges to modify HKLM\n");
1262 "Expected RegSetKeySecurity to return success, got error %lu\n",
error);
1266 "Expected RegSetKeySecurity to return success, got error %lu\n",
error);
1271 ok(hkResult !=
NULL,
"hkResult wasn't set\n");
1277 ok(hkResult !=
NULL,
"hkResult wasn't set\n");
1322 ok(!
ret,
"RegCreateKeyExA failed with error %ld\n",
ret);
1326 ok(!
ret,
"RegCreateKeyExA failed with error %ld\n",
ret);
1336 ok(!
ret,
"RegCreateKeyExA failed with error %ld\n",
ret);
1341 ok(!
ret,
"RegCreateKeyExA failed with error %ld\n",
ret);
1345 ok(!
ret,
"RegCreateKeyExA failed with error %ld\n",
ret);
1367 "RegOpenKeyEx with KEY_WOW64_32KEY failed (err=%lu)\n",
ret);
1373 "RegOpenKeyEx with KEY_WOW64_64KEY failed (err=%lu)\n",
ret);
1382 skip(
"WOW64 flags are not recognized\n");
1390 "RegCreateKeyEx with KEY_WOW64_32KEY failed (err=%ld)\n",
ret);
1393 "RegCreateKeyEx with KEY_WOW64_32KEY failed (err=%ld)\n",
ret);
1399 "RegCreateKeyEx with KEY_WOW64_64KEY failed (err=%ld)\n",
ret);
1402 "RegCreateKeyEx with KEY_WOW64_64KEY failed (err=%ld)\n",
ret);
1405 0, 0, 0, 0, 0, 0, 0, &world_sid);
1407 "Expected AllocateAndInitializeSid to return TRUE, got %d, last error %lu\n", bRet,
GetLastError());
1416 access.Trustee.ptstrName = (
char *)world_sid;
1420 "Expected SetEntriesInAclA to return ERROR_SUCCESS, got %lu, last error %lu\n", dwRet,
GetLastError());
1425 "Expected InitializeSecurityDescriptor to return TRUE, got %d, last error %lu\n", bRet,
GetLastError());
1429 "Expected SetSecurityDescriptorDacl to return TRUE, got %d, last error %lu\n", bRet,
GetLastError());
1433 skip(
"not enough privileges to modify HKLM\n");
1439 "Expected RegSetKeySecurity to return success, got error %lu\n",
ret);
1443 "Expected RegSetKeySecurity to return success, got error %lu\n",
ret);
1449 "RegOpenKeyEx with KEY_WOW64_64KEY failed (err=%lu)\n",
ret);
1456 "RegOpenKeyEx with KEY_WOW64_32KEY failed (err=%lu)\n",
ret);
1485 "expected ERROR_INVALID_HANDLE or ERROR_SUCCESS, got %ld\n",
ret);
1490 "expected ERROR_INVALID_HANDLE or ERROR_BADKEY, got %ld\n",
ret);
1498 trace(
"The main handle is most likely closed, so re-opening\n");
1552 tp.PrivilegeCount = 1;
1553 tp.Privileges[0].Luid = luid;
1558 tp.Privileges[0].Attributes = 0;
1614 win_skip(
"Failed to set SE_RESTORE_NAME privileges, skipping tests\n");
1619 strcat(saved_key,
"\\wine_reg_test");
1621 strcat(saved_key,
"\\saved_key");
1636 pRtlInitUnicodeString(&
key_name,
L"\\REGISTRY\\Machine\\Test");
1670 pRtlInitUnicodeString(&
key_name,
L"\\REGISTRY\\User\\.Default");
1708#if defined(__REACTOS__) && DLL_EXPORT_VERSION < 0x600
1709 skip(
"test_reg_load_app_key() can't be built unless DLL_EXPORT_VERSION >= 0x600\n");
1719 win_skip(
"Failed to set SE_BACKUP_NAME privileges, skipping tests\n");
1724 strcat(hivefilepath,
"\\wine_reg_test");
1726 strcat(hivefilepath,
"\\saved_key");
1737 ok(appkey !=
NULL,
"got a null key\n");
1748 ok(appkey !=
NULL,
"got a null key\n");
1751 memset(output, 0xff,
sizeof(output));
1789 ok( !retl,
"RegConnectRegistryA failed err = %ld\n", retl);
1793 ok( !retl,
"RegConnectRegistryA failed err = %ld\n", retl);
1800 win_skip(
"OpenSCManagerA is not implemented\n");
1834 "Expected ERROR_INVALID_HANDLE or ERROR_BADKEY, got %ld\n",
ret);
1842 "Expected ERROR_INVALID_HANDLE or ERROR_BADKEY, got %ld\n",
ret);
1849 ok(
size == 5,
"Expected 5, got %ld\n",
size);
1857 ok(!
val[0],
"Expected val to be untouched, got %s\n",
val);
1870 ok(!
val[0],
"Expected val to be untouched, got %s\n",
val);
1871 ok(
size == 5,
"Expected 5, got %ld\n",
size);
1878 ok(
size == 5,
"Expected 5, got %ld\n",
size);
1885 ok(
size == 5,
"Expected 5, got %ld\n",
size);
1894 win_skip(
"RegQueryValueW is not implemented\n");
1899 ok(!valW[0],
"Expected valW to be untouched\n");
1900 ok(
size == 10,
"Got wrong size: %ld\n",
size);
1908 ok(!valW[0],
"Expected valW to be untouched\n");
1909 ok(
size == 10,
"Got wrong size: %ld\n",
size);
1912 size =
sizeof(valW);
1915 ok(!
lstrcmpW(valW,
L"data"),
"Got wrong value\n");
1916 ok(
size == 10,
"Got wrong size: %ld\n",
size);
1923 memset(valW,
'a',
sizeof(valW));
1924 size =
sizeof(valW);
1927 ok(!
lstrcmpW(valW,
L"data"),
"Got wrong value\n");
1928 ok(
size == 10,
"Got wrong size: %ld\n",
size);
1940 char classbuffer[32];
1941 WCHAR classbufferW[32];
1942 char expectbuffer[32];
1943 WCHAR expectbufferW[32];
1944 char subkey_class[] =
"subkey class";
1945 WCHAR subkey_classW[] =
L"subkey class";
1946 char subsubkey_class[] =
"subsubkey class";
1948 DWORD subkeys, maxsubkeylen, maxclasslen;
1957 ret =
RegQueryInfoKeyA(
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL);
1960 ret =
RegQueryInfoKeyW(
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL);
1964 ret =
RegQueryInfoKeyA(subkey,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL);
1967 ret =
RegQueryInfoKeyW(subkey,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL);
1971 memset(classbuffer, 0x55,
sizeof(classbuffer));
1972 ret =
RegQueryInfoKeyA(subkey, classbuffer,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL);
1974 ok(classbuffer[0] == 0x55,
"classbuffer[0] = 0x%x\n", classbuffer[0]);
1976 memset(classbufferW, 0x55,
sizeof(classbufferW));
1977 ret =
RegQueryInfoKeyW(subkey, classbufferW,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL);
1979 ok(classbufferW[0] == 0x5555,
"classbufferW[0] = 0x%x\n", classbufferW[0]);
1982 sdlen = classlen =0;
1983 ret =
RegQueryInfoKeyA(subkey,
NULL, &classlen,
NULL, &subkeys, &maxsubkeylen, &maxclasslen, &
values, &maxvaluenamelen, &maxvaluelen, &sdlen, &lastwrite);
1985 ok(classlen ==
strlen(subkey_class),
"classlen = %lu\n", classlen);
1986 ok(subkeys == 0,
"subkeys = %lu\n", subkeys);
1987 ok(maxsubkeylen == 0,
"maxsubkeylen = %lu\n", maxsubkeylen);
1988 ok(maxclasslen == 0,
"maxclasslen = %lu\n", maxclasslen);
1990 ok(maxvaluenamelen == 0,
"maxvaluenamelen = %lu\n", maxvaluenamelen);
1991 ok(maxvaluelen == 0,
"maxvaluelen = %lu\n", maxvaluelen);
1996 sdlen = classlen = 0;
1997 ret =
RegQueryInfoKeyW(subkey,
NULL, &classlen,
NULL, &subkeys, &maxsubkeylen, &maxclasslen, &
values, &maxvaluenamelen, &maxvaluelen, &sdlen, &lastwrite);
1999 ok(classlen ==
strlen(subkey_class),
"classlen = %lu\n", classlen);
2000 ok(subkeys == 0,
"subkeys = %lu\n", subkeys);
2001 ok(maxsubkeylen == 0,
"maxsubkeylen = %lu\n", maxsubkeylen);
2002 ok(maxclasslen == 0,
"maxclasslen = %lu\n", maxclasslen);
2004 ok(maxvaluenamelen == 0,
"maxvaluenamelen = %lu\n", maxvaluenamelen);
2005 ok(maxvaluelen == 0,
"maxvaluelen = %lu\n", maxvaluelen);
2017 sdlen = classlen = 0;
2018 ret =
RegQueryInfoKeyA(subkey,
NULL, &classlen,
NULL, &subkeys, &maxsubkeylen, &maxclasslen, &
values, &maxvaluenamelen, &maxvaluelen, &sdlen, &lastwrite);
2020 ok(classlen ==
strlen(subkey_class),
"classlen = %lu\n", classlen);
2021 ok(subkeys == 1,
"subkeys = %lu\n", subkeys);
2022 ok(maxsubkeylen ==
strlen(
"subsubkey"),
"maxsubkeylen = %lu\n", maxsubkeylen);
2023 ok(maxclasslen ==
strlen(subsubkey_class),
"maxclasslen = %lu\n", maxclasslen);
2025 ok(maxvaluenamelen == 0,
"maxvaluenamelen = %lu\n", maxvaluenamelen);
2026 ok(maxvaluelen ==
sizeof(
"data") *
sizeof(
WCHAR),
"maxvaluelen = %lu\n", maxvaluelen);
2031 sdlen = classlen = 0;
2032 ret =
RegQueryInfoKeyW(subkey,
NULL, &classlen,
NULL, &subkeys, &maxsubkeylen, &maxclasslen, &
values, &maxvaluenamelen, &maxvaluelen, &sdlen, &lastwrite);
2034 ok(classlen ==
strlen(subkey_class),
"classlen = %lu\n", classlen);
2035 ok(subkeys == 1,
"subkeys = %lu\n", subkeys);
2036 ok(maxsubkeylen ==
strlen(
"subsubkey"),
"maxsubkeylen = %lu\n", maxsubkeylen);
2037 ok(maxclasslen ==
strlen(subsubkey_class),
"maxclasslen = %lu\n", maxclasslen);
2039 ok(maxvaluenamelen == 0,
"maxvaluenamelen = %lu\n", maxvaluenamelen);
2040 ok(maxvaluelen ==
sizeof(
"data") *
sizeof(
WCHAR),
"maxvaluelen = %lu\n", maxvaluelen);
2053 ret =
RegQueryInfoKeyA(subkey,
NULL, &classlen,
NULL, &subkeys, &maxsubkeylen, &maxclasslen, &
values, &maxvaluenamelen, &maxvaluelen, &sdlen, &lastwrite);
2056 ok(maxvaluenamelen ==
strlen(
"value one"),
"maxvaluenamelen = %lu\n", maxvaluenamelen);
2057 ok(maxvaluelen ==
sizeof(
"second value data") *
sizeof(
WCHAR),
"maxvaluelen = %lu\n", maxvaluelen);
2060 ret =
RegQueryInfoKeyW(subkey,
NULL, &classlen,
NULL, &subkeys, &maxsubkeylen, &maxclasslen, &
values, &maxvaluenamelen, &maxvaluelen, &sdlen, &lastwrite);
2063 ok(maxvaluenamelen ==
strlen(
"value one"),
"maxvaluenamelen = %lu\n", maxvaluenamelen);
2064 ok(maxvaluelen ==
sizeof(
"second value data") *
sizeof(
WCHAR),
"maxvaluelen = %lu\n", maxvaluelen);
2067 memset(classbuffer, 0x55,
sizeof(classbuffer));
2069 ret =
RegQueryInfoKeyA(subkey, classbuffer, &classlen,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL);
2071 todo_wine ok(classlen == 0,
"classlen = %lu\n", classlen);
2072 memset(expectbuffer, 0x55,
sizeof(expectbuffer));
2073 ok(!
memcmp(classbuffer, expectbuffer,
sizeof(classbuffer)),
"classbuffer was modified\n");
2075 memset(classbufferW, 0x55,
sizeof(classbufferW));
2077 ret =
RegQueryInfoKeyW(subkey, classbufferW, &classlen,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL);
2079 todo_wine ok(classlen == 0,
"classlen = %lu\n", classlen);
2080 memset(expectbufferW, 0x55,
sizeof(expectbufferW));
2081 ok(!
memcmp(classbufferW, expectbufferW,
sizeof(classbufferW)),
"classbufferW was modified\n");
2084 memset(classbuffer, 0x55,
sizeof(classbuffer));
2086 ret =
RegQueryInfoKeyA(subkey, classbuffer, &classlen,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL);
2088 ok(classlen == 0,
"classlen = %lu\n", classlen);
2089 memset(expectbuffer, 0x55,
sizeof(expectbuffer));
2090 expectbuffer[0] = 0;
2091 ok(!
memcmp(classbuffer, expectbuffer,
sizeof(classbuffer)),
"classbuffer was modified\n");
2093 memset(classbufferW, 0x55,
sizeof(classbufferW));
2095 ret =
RegQueryInfoKeyW(subkey, classbufferW, &classlen,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL);
2099 classlen ==
strlen(subkey_class),
"classlen = %lu\n", classlen);
2100 memset(expectbufferW, 0x55,
sizeof(expectbufferW));
2101 ok(!
memcmp(classbufferW, expectbufferW,
sizeof(classbufferW)),
"classbufferW was modified\n");
2104 memset(classbuffer, 0x55,
sizeof(classbuffer));
2105 classlen =
sizeof(subkey_class) - 1;
2106 ret =
RegQueryInfoKeyA(subkey, classbuffer, &classlen,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL);
2108 ok(classlen ==
sizeof(subkey_class) - 2,
"classlen = %lu\n", classlen);
2109 memset(expectbuffer, 0x55,
sizeof(expectbuffer));
2110 strcpy(expectbuffer, subkey_class);
2111 expectbuffer[
sizeof(subkey_class) - 2] = 0;
2112 expectbuffer[
sizeof(subkey_class) - 1] = 0x55;
2113 ok(!
memcmp(classbuffer, expectbuffer,
sizeof(classbuffer)),
2114 "classbuffer = %.*s, expected %s\n",
2115 (
int)
sizeof(classbuffer), classbuffer, expectbuffer);
2117 memset(classbufferW, 0x55,
sizeof(classbufferW));
2118 classlen =
sizeof(subkey_class) - 1;
2119 ret =
RegQueryInfoKeyW(subkey, classbufferW, &classlen,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL);
2121 ok(classlen ==
sizeof(subkey_class) - 2 ||
2122 classlen ==
strlen(subkey_class),
"classlen = %lu\n", classlen);
2123 memset(expectbufferW, 0x55,
sizeof(expectbufferW));
2124 ok(!
memcmp(classbufferW, expectbufferW,
sizeof(classbufferW)),
"classbufferW was modified\n");
2127 memset(classbuffer, 0x55,
sizeof(classbuffer));
2128 classlen =
sizeof(subkey_class);
2129 ret =
RegQueryInfoKeyA(subkey, classbuffer, &classlen,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL);
2131 ok(classlen ==
sizeof(subkey_class) - 1,
"classlen = %lu\n", classlen);
2132 memset(expectbuffer, 0x55,
sizeof(expectbuffer));
2133 strcpy(expectbuffer, subkey_class);
2134 ok(!
memcmp(classbuffer, expectbuffer,
sizeof(classbuffer)),
2135 "classbuffer = \"%.*s\", expected %s\n",
2136 (
int)
sizeof(classbuffer), classbuffer, expectbuffer);
2138 memset(classbuffer, 0x55,
sizeof(classbuffer));
2139 classlen = 0xdeadbeef;
2140 ret =
RegQueryInfoKeyA(subkey, classbuffer, &classlen,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL);
2142 ok(classlen ==
sizeof(subkey_class) - 1,
"classlen = %lu\n", classlen);
2143 memset(expectbuffer, 0x55,
sizeof(expectbuffer));
2144 strcpy(expectbuffer, subkey_class);
2145 ok(!
memcmp(classbuffer, expectbuffer,
sizeof(classbuffer)),
2146 "classbuffer = \"%.*s\", expected %s\n",
2147 (
int)
sizeof(classbuffer), classbuffer, expectbuffer);
2149 memset(classbufferW, 0x55,
sizeof(classbufferW));
2150 classlen =
sizeof(subkey_class);
2151 ret =
RegQueryInfoKeyW(subkey, classbufferW, &classlen,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL);
2153 ok(classlen ==
sizeof(subkey_class) - 1,
"classlen = %lu\n", classlen);
2154 memset(expectbufferW, 0x55,
sizeof(expectbufferW));
2155 lstrcpyW(expectbufferW, subkey_classW);
2156 ok(!
memcmp(classbufferW, expectbufferW,
sizeof(classbufferW)),
2157 "classbufferW = %s, expected %s\n",
2160 memset(classbufferW, 0x55,
sizeof(classbufferW));
2161 classlen = 0xdeadbeef;
2162 ret =
RegQueryInfoKeyW(subkey, classbufferW, &classlen,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL);
2164 ok(classlen ==
sizeof(subkey_class) - 1,
"classlen = %lu\n", classlen);
2165 memset(expectbufferW, 0x55,
sizeof(expectbufferW));
2166 lstrcpyW(expectbufferW, subkey_classW);
2167 ok(!
memcmp(classbufferW, expectbufferW,
sizeof(classbufferW)),
2168 "classbufferW = %s, expected %s\n",
2181 static const char string[] =
"FullString";
2274 static const char multistring[] =
"Aa\0Bb\0Cc\0";
2275 char name[
sizeof(
"multistringtest")];
2283 insize =
sizeof(multistring) - 1;
2292 insize =
sizeof(multistring) - 2;
2300 insize =
sizeof(multistring) - 3;
2341 nsize =
sizeof(
name);
2353 nsize =
sizeof(
name);
2392 win_skip(
"Skipping RegCopyTreeA tests, function not present\n");
2402 ret = pRegCopyTreeA(
src,
"nonexistent_subkey",
dst);
2426 ret = pRegCopyTreeA(
src,
"subkey2",
dst);
2481 HKEY subkey, subkey2;
2485 if(!pRegDeleteTreeA) {
2486 win_skip(
"Skipping RegDeleteTreeA tests, function not present\n");
2501 ret = pRegDeleteTreeA(subkey,
"subkey2");
2504 "subkey2 was not deleted\n");
2507 "Default value of subkey no longer present\n");
2516 "subkey2 was not deleted\n");
2518 "Default value of subkey no longer present\n");
2532 ret = pRegDeleteTreeA(subkey,
NULL);
2535 "subkey was deleted\n");
2537 "subkey2 was not deleted\n");
2539 "subkey3 was not deleted\n");
2543 "Default value of subkey is not present\n");
2547 "Value is still present\n");
2553 ret = pRegDeleteTreeA(subkey,
"");
2565 "Expected ERROR_FILE_NOT_FOUND, got %ld\n",
ret);
2572 static const char keyname[] =
"test_rw_order";
2580 skip(
"Couldn't create key. Skipping.\n");
2585 "RegSetValueExA for value \"A\" failed\n");
2587 "RegSetValueExA for value \"C\" failed\n");
2589 "RegSetValueExA for value \"D\" failed\n");
2591 "RegSetValueExA for value \"B\" failed\n");
2594 &value_name_max_len,
NULL,
NULL,
NULL),
"RegQueryInfoKeyA failed\n");
2600 ok(
strcmp(value_buf,
"A") == 0,
"Expected name \"A\", got %s\n", value_buf);
2603 todo_wine ok(
strcmp(value_buf,
"C") == 0,
"Expected name \"C\", got %s\n", value_buf);
2606 todo_wine ok(
strcmp(value_buf,
"D") == 0,
"Expected name \"D\", got %s\n", value_buf);
2609 todo_wine ok(
strcmp(value_buf,
"B") == 0,
"Expected name \"B\", got %s\n", value_buf);
2616 static const WCHAR targetW[] =
L"\\Software\\Wine\\Test\\target";
2624 if (!pRtlFormatCurrentUserKeyPath || !pNtDeleteKey)
2626 win_skip(
"Can't perform symlink tests\n" );
2630 pRtlFormatCurrentUserKeyPath( &target_str );
2632 target_len = target_str.
Length +
sizeof(targetW);
2683 ok(
len == target_len -
sizeof(
WCHAR),
"wrong len %lu\n",
len );
2708 ok(
len == target_len -
sizeof(
WCHAR),
"wrong len %lu\n",
len );
2717 ok(
len == target_len -
sizeof(
WCHAR),
"wrong len %lu\n",
len );
2739 pRtlFreeUnicodeString( &target_str );
2765#define check_key_value(root,name,flags,expect) _check_key_value( __LINE__, root, name, flags, expect )
2780 ok_( __FILE__,
line )( subkeys == subkeys_in,
"wrong number of subkeys: %lu\n", subkeys );
2783 for (
i = 0;
i < subkeys;
i++)
2791 ok_( __FILE__,
line )( found == found_in,
"found equals %d\n", found );
2794#define check_enum_value(name, flags, subkeys, found) _check_enum_value( __LINE__, name, flags, subkeys, found )
2800 DWORD subkeys, subkeys32, subkeys64;
2804 skip(
"Not on Wow64, no redirection\n" );
2810 skip(
"not enough privileges to modify HKLM\n");
2813#if defined(__REACTOS__) && defined(_WIN64)
2815 skip(
"test_redirection() invalid for Vista x64 and hangs.\n");
2848 ok(
dw == 32,
"wrong value %lu\n",
dw );
2854 ok(
dw == 64,
"wrong value %lu\n",
dw );
2969 if (pRegDeleteKeyExA)
3006 if (pRegDeleteTreeA)
3020 skip(
"Not authorized to modify the Classes key\n");
3033 "RegOpenKeyExA failed: %lu\n",
err );
3163 "RegOpenKeyExA failed: %lu\n",
err );
3175 "RegOpenKeyExA failed: %lu\n",
err );
3227 "RegOpenKeyExA failed: %lu\n",
err );
3239 "RegOpenKeyExA failed: %lu\n",
err );
3347 "RegOpenKeyExA failed: %lu\n",
err );
3353 "RegOpenKeyExA failed: %lu\n",
err );
3359 "RegOpenKeyExA failed: %lu\n",
err );
3365 "RegOpenKeyExA failed: %lu\n",
err );
3371 "RegOpenKeyExA failed: %lu\n",
err );
3381 ok( subkeys > 0,
"wrong number of subkeys: %lu\n", subkeys );
3382 subkeys32 = subkeys;
3392 ok( subkeys > subkeys32,
"wrong number of subkeys: %lu\n", subkeys );
3393 subkeys64 = subkeys;
3421 HKEY hkey, hklm, hkcr, hkeysub1, hklmsub1, hkcrsub1, hklmsub2, hkcrsub2;
3437 skip(
"not enough privileges to add a user class\n");
3440 ok(!
IS_HKCR(hkey),
"hkcr mask set in %p\n", hkey);
3447 "test key not found in hkcr: %ld\n",
res);
3450 skip(
"HKCR key merging not supported\n");
3510 skip(
"not enough privileges to add a system class\n");
3513 ok(!
IS_HKCR(hklm),
"hkcr mask set in %p\n", hklm);
3519 "test key not found in hkcr: %ld\n",
res);
3520 ok(
IS_HKCR(hkcr),
"hkcr mask not set in %p\n", hkcr);
3548 ok(!
IS_HKCR(hkey),
"hkcr mask set in %p\n", hkey);
3554 "test key not found in hkcr: %ld\n",
res);
3555 ok(
IS_HKCR(hkcr),
"hkcr mask not set in %p\n", hkcr);
3593 ok(!
IS_HKCR(hklmsub1),
"hkcr mask set in %p\n", hklmsub1);
3597 ok(
IS_HKCR(hkcrsub1),
"hkcr mask not set in %p\n", hkcrsub1);
3620 ok(!
IS_HKCR(hkeysub1),
"hkcr mask set in %p\n", hkeysub1);
3658 ok(
IS_HKCR(hkcrsub2),
"hkcr mask not set in %p\n", hkcrsub2);
3668 ok(!
IS_HKCR(hklmsub2),
"hkcr mask set in %p\n", hklmsub2);
3688 ok(!
IS_HKCR(hklmsub1),
"hkcr mask set in %p\n", hklmsub1);
3720 HKEY hkcu=0, hklm=0, hkcr=0, hkcusub[2]={0}, hklmsub[2]={0};
3736 skip(
"failed to add a user class\n");
3743 "test key not found in hkcr: %ld\n",
res);
3746 skip(
"HKCR key merging not supported\n");
3800 skip(
"not enough privileges to add a system class\n");
3852 "expected ERROR_KEY_DELETED, got %ld\n",
res);
3857 "expected ERROR_KEY_DELETED, got %ld\n",
res);
3903 "hkcr mask not set in %p\n", hkey);
3908 ok(!
IS_HKCR(hkey),
"hkcr mask set in %p\n", hkey);
3913 ok(!
IS_HKCR(hkey),
"hkcr mask set in %p\n", hkey);
3918 ok(!
IS_HKCR(hkey),
"hkcr mask set in %p\n", hkey);
3923 ok(!
IS_HKCR(hkey),
"hkcr mask set in %p\n", hkey);
3939 val_count =
sizeof(
value);
3947 val_count =
sizeof(
value);
3993 memset(longname,
'a', 400);
4017 if (!pRegDeleteKeyValueA)
4019 win_skip(
"RegDeleteKeyValue is not available.\n");
4044 ok(!
ret,
"failed with error %ld\n",
ret);
4052 ret = pRegDeleteKeyValueA(
hkey_main,
"Subkey1",
"test");
4121 ok(dwret ==
WAIT_TIMEOUT,
"expected WAIT_TIMEOUT, got %lu\n", dwret);
4126 ok(dwret ==
WAIT_OBJECT_0,
"expected WAIT_OBJECT_0, got %lu\n", dwret);
4132 ok(dwret ==
WAIT_TIMEOUT,
"expected WAIT_TIMEOUT, got %lu\n", dwret);
4137 ok(dwret ==
WAIT_OBJECT_0,
"expected WAIT_OBJECT_0, got %lu\n", dwret);
4143 ok(dwret ==
WAIT_TIMEOUT,
"expected WAIT_TIMEOUT, got %lu\n", dwret);
4148 ok(dwret ==
WAIT_OBJECT_0,
"expected WAIT_OBJECT_0, got %lu\n", dwret);
4158 ok(dwret ==
WAIT_TIMEOUT,
"expected WAIT_TIMEOUT, got %lu\n", dwret);
4163 ok(dwret ==
WAIT_TIMEOUT,
"expected WAIT_TIMEOUT, got %lu\n", dwret);
4178 win_skip(
"REG_NOTIFY_THREAD_AGNOSTIC is not supported\n");
4187 ok(dwret ==
WAIT_OBJECT_0,
"expected WAIT_OBJECT_0, got %lu\n", dwret);
4209 ok(dwret ==
WAIT_OBJECT_0,
"expected WAIT_OBJECT_0, got %lu\n", dwret);
4223 ok(dwret ==
WAIT_TIMEOUT,
"expected WAIT_TIMEOUT, got %lu\n", dwret);
4229 ok(dwret ==
WAIT_OBJECT_0,
"expected WAIT_OBJECT_0, got %lu\n", dwret);
4240 const char *
p =
text;
4256 const char *
p =
text;
4268 ok(
index > 0,
"expected nonzero index\n");
4271 ok(*
p,
"name missing for %u\n",
index);
4283 const char *
p =
text;
4290 ok(
index > 0,
"expected nonzero index\n");
4305 static const char *
const names[] = {
NULL,
"",
"Global",
"2",
"invalid counter name",
"System"};
4306 DWORD size,
type, sysname_len, expect_size, key_count, value_count;
4307 LARGE_INTEGER perftime1, perftime2, systime1, systime2, freq;
4327 skip(
"test_performance_keys() is invalid for Vista x64 and WS03\n");
4377 ok(
data->LittleEndian == 1,
"got endianness %lu\n",
data->LittleEndian);
4378 ok(
data->Version == 1,
"got version %lu\n",
data->Version);
4379 ok(
data->Revision == 1,
"got version %lu\n",
data->Revision);
4380 ok(
data->TotalByteLength ==
size,
"expected size %lu, got %lu\n",
4384 expect_size = (expect_size + 7) & ~7;
4386 ok(
data->HeaderLength == expect_size,
"expected header size %lu, got %lu\n",
4387 expect_size,
data->HeaderLength);
4389 todo_wine ok(
data->DefaultObject == 238,
"got default object %lu\n",
data->DefaultObject);
4393 "got times %I64d, %I64d, %I64d\n",
4395 ok(
data->PerfFreq.QuadPart == freq.
QuadPart,
"expected frequency %I64d, got %I64d\n",
4398 &&
data->PerfTime100nSec.QuadPart <= systime2.
QuadPart,
4399 "got times %I64d, %I64d, %I64d\n",
4404 "got times %I64d, %I64d, %I64d\n", systime1.
QuadPart, file_time.l, systime2.
QuadPart);
4406 ok(
data->SystemNameLength == (sysname_len + 1) *
sizeof(
WCHAR),
"got %lu\n",
data->SystemNameLength);
4408 "got name offset %lu\n",
data->SystemNameOffset);
4513 key_count = 0x900ddeed;
4517 todo_wine ok(!key_count,
"got %lu subkeys\n", key_count);
4518 todo_wine ok(value_count == 2,
"got %lu values\n", value_count);
4543 if (pRegSetKeyValueW)
4576 const char *knames[2] = {
"009",
"CurrentLanguage"};
4582 "Software\\Microsoft\\Windows NT\\CurrentVersion\\Perflib", 0,
KEY_READ, &perflib_key);
4605 skip(
"Not enough permissions to test the perflib key.\n");
4698 ok(
c >= 2 && (
c % 2) == 0,
"%d is not a valid number of entries in %s\n",
c, knames[
l]);
4699 trace(
"%s has %d entries\n", knames[
l],
c);
4707 ok(
broken(
l == 0),
"expected a special handle, got %p\n",
key);
4717 switch (primary_lang)
4724 sprintf(lang_name,
"%03x", primary_lang);
4766 const static char tz_value[] =
"MUI_Std";
4767 const static WCHAR tz_valueW[] =
L"MUI_Std";
4796 if (!pRegLoadMUIStringA || !pRegLoadMUIStringW)
4798 win_skip(
"RegLoadMUIString is not available\n");
4801#if defined(__REACTOS__) && defined(_WIN64)
4803 skip(
"test_RegLoadMUIString() spams the console with garbage and crashes on Vista x64.\n");
4809 ok(hUser32 !=
NULL,
"cannot load user32.dll\n");
4811 ok(pLoadStringW !=
NULL,
"failed to get LoadStringW address\n");
4814 "Software\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones\\UTC", 0,
4821 ok(
buf[0] ==
'@',
"got %s\n",
buf);
4824 strcpy(with_env_var,
"@%windir%\\system32\\");
4836 ok(
ret > 0,
"failed to load string resource\n");
4837 text_size = (
ret + 1) *
sizeof(
WCHAR);
4842 ok(
ret > 0,
"GetSystemDirectoryW failed\n");
4844 ok(
ret > 0,
"GetSystemDirectoryA failed\n");
4856 ok(
size == text_size,
"got %lu, expected %lu\n",
size, text_size);
4859 memset(bufW, 0xff,
sizeof(bufW));
4860 ret = pRegLoadMUIStringW(hkey, tz_valueW, bufW,
sizeof(
WCHAR)+1, &
size, 0,
NULL);
4862 ok(bufW[0] == 0xffff,
"got 0x%04x, expected 0xffff\n", bufW[0]);
4865 memset(bufW, 0xff,
sizeof(bufW));
4866 ret = pRegLoadMUIStringW(hkey, tz_valueW, bufW,
sizeof(
WCHAR)*2, &
size, 0,
NULL);
4869 "got %lu, expected %lu\n",
size, text_size);
4870 ok(bufW[0] == 0xffff,
"got 0x%04x, expected 0xffff\n", bufW[0]);
4872 memset(bufW, 0xff,
sizeof(bufW));
4875 ok(bufW[0] == 0xffff,
"got 0x%04x, expected 0xffff\n", bufW[0]);
4877 memset(bufW, 0xff,
sizeof(bufW));
4878 ret = pRegLoadMUIStringW(hkey, tz_valueW, bufW,
sizeof(
WCHAR)*2,
NULL, 0xdeadbeef,
NULL);
4880 ok(bufW[0] == 0xffff,
"got 0x%04x, expected 0xffff\n", bufW[0]);
4882 memset(bufW, 0xff,
sizeof(bufW));
4885 ok(bufW[0] ==
textW[0],
"got 0x%04x, expected 0x%04x\n", bufW[0],
textW[0]);
4886 ok(bufW[1] == 0,
"got 0x%04x, expected nul\n", bufW[1]);
4889 memset(bufW, 0xff,
sizeof(bufW));
4892 ok(
size == text_size,
"got %lu, expected %lu\n",
size, text_size);
4903 memset(bufW, 0xff,
sizeof(bufW));
4904 ret = pRegLoadMUIStringW(hkey, tz_valueW, bufW,
ARRAY_SIZE(bufW), &
size, 0, sysdirW);
4906 ok(
size == text_size,
"got %lu, expected %lu\n",
size, text_size);
4942 memset(bufW, 0xff,
sizeof(bufW));
4945 test_case[
i].use_sysdir ? sysdirW :
NULL);
4951 broken(test_case[
i].broken_ret &&
ret == test_case[
i].broken_ret ),
4952 "[%2u] expected %ld, got %ld\n",
i, test_case[
i].
expected,
ret);
4955 ok(
size == text_size,
"[%2u] got %lu, expected %lu\n",
i,
size, text_size);
4988 if (!pEnumDynamicTimeZoneInformation)
4990 win_skip(
"EnumDynamicTimeZoneInformation is not supported.\n");
4994 if (pRegLoadMUIStringW)
4998 ret = pEnumDynamicTimeZoneInformation(0,
NULL);
5000 ok(gle == 0xdeadbeef,
"got 0x%lx\n", gle);
5003 memset(&bogus_dtzi, 0xcc,
sizeof(bogus_dtzi));
5004 memset(&dtzi, 0xcc,
sizeof(dtzi));
5006 ret = pEnumDynamicTimeZoneInformation(-1, &dtzi);
5008 ok(gle == 0xdeadbeef,
"got 0x%lx\n", gle);
5010 ok(!
memcmp(&dtzi, &bogus_dtzi,
sizeof(dtzi)),
"mismatch\n");
5013 "Software\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones", 0,
5024 memset(&dtzi, 0xcc,
sizeof(dtzi));
5026 ret = pEnumDynamicTimeZoneInformation(
index, &dtzi);
5032 "got 0x%lx\n", gle);
5044 ok(*
name,
"Std name is empty\n");
5045 if (pRegLoadMUIStringW)
5052 ok(*
name,
"MUI_Std name is empty\n");
5062 ok(*
name,
"Dlt name is empty\n");
5063 if (pRegLoadMUIStringW)
5070 ok(*
name,
"MUI_Dlt name is empty\n");
5080 ok(*
name,
"Display name is empty\n");
5081 if (pRegLoadMUIStringW)
5101 size =
sizeof(tz_data);
5105 ok(dtzi.
Bias == tz_data.bias,
"expected %ld, got %ld\n",
5106 tz_data.bias, dtzi.
Bias);
5107 ok(dtzi.
StandardBias == tz_data.std_bias,
"expected %ld, got %ld\n",
5109 ok(dtzi.
DaylightBias == tz_data.dlt_bias,
"expected %ld, got %ld\n",
5113 "expected %s, got %s\n",
5117 "expected %s, got %s\n",
5126 memset(&dtzi, 0xcc,
sizeof(dtzi));
5128 ret = pEnumDynamicTimeZoneInformation(
index, &dtzi);
5130 ok(gle == 0xdeadbeef,
"got 0x%lx\n", gle);
5132 ok(!
memcmp(&dtzi, &bogus_dtzi,
sizeof(dtzi)),
"mismatch\n");
5139#if defined(__REACTOS__) && DLL_EXPORT_VERSION < 0x600
5140 skip(
"test_RegRenameKey() can't be built unless DLL_EXPORT_VERSION >= 0x600\n");
5151 ret = RegRenameKey(
NULL,
L"oldname",
L"newname");
5155 ok(!
ret,
"Unexpected return value %ld.\n",
ret);
5156 ret = RegRenameKey(
key,
NULL,
L"TestNewRenameKey");
5162 ok(!
ret,
"Unexpected return value %ld.\n",
ret);
5165 ret = RegRenameKey(
key,
NULL,
L"TestNewRenameKey");
5166 ok(!
ret,
"Unexpected return value %ld.\n",
ret);
5170 ok(!
ret,
"Unexpected return value %ld.\n",
ret);
5172 ok(
ret,
"Unexpected return value %ld.\n",
ret);
5176 ok(!
ret,
"Unexpected return value %ld.\n",
ret);
5179 ret = RegRenameKey(
key,
L"unknown_subkey",
L"known_subkey");
5184 ok(!
ret,
"Unexpected return value %ld.\n",
ret);
5187 ret = RegRenameKey(
key,
L"known_subkey",
L"renamed_subkey");
5188 ok(!
ret,
"Unexpected return value %ld.\n",
ret);
5191 ok(!
ret,
"Unexpected return value %ld.\n",
ret);
5193 ok(
ret,
"Unexpected return value %ld.\n",
ret);
5201 if (
str[0] <
'0' ||
str[0] >
'9' ||
str[1] <
'0' ||
str[1] >
'9' ||
str[2] <
'0' ||
str[2] >
'9')
5203 if (
str[0] ==
'0' &&
str[1] ==
'0' &&
str[2] ==
'0')
5210 static const WCHAR target_pfxW[] =
L"\\REGISTRY\\Machine\\System\\ControlSet";
5215 target_len =
sizeof(target_pfxW) + 3 *
sizeof(
WCHAR);
5222 ok(
len == target_len -
sizeof(
WCHAR),
"wrong len %lu\n",
len );
5225 "wrong link target\n" );
NTSTATUS NtQueryObject(IN HANDLE Handle, IN OBJECT_INFO_CLASS ObjectInformationClass, OUT PVOID ObjectInformation, IN ULONG ObjectInformationLength, OUT PULONG ReturnLength)
DWORD WINAPI SetEntriesInAclA(ULONG cCountOfExplicitEntries, PEXPLICIT_ACCESS_A pListOfExplicitEntries, PACL OldAcl, PACL *NewAcl)
#define SUB_CONTAINERS_AND_OBJECTS_INHERIT
@ TRUSTEE_IS_WELL_KNOWN_GROUP
#define UlongToHandle(ul)
#define RegCloseKey(hKey)
BOOL WINAPI GetComputerNameW(LPWSTR lpBuffer, LPDWORD lpnSize)
#define STATUS_INVALID_HANDLE
#define ERROR_INSUFFICIENT_BUFFER
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
LONG WINAPI RegCreateKeyA(HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult)
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 RegOpenKeyA(HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult)
LONG WINAPI RegSetValueA(HKEY hKeyOriginal, LPCSTR lpSubKey, DWORD dwType, LPCSTR lpData, DWORD cbData)
LONG WINAPI RegEnumKeyA(HKEY hKey, DWORD dwIndex, LPSTR lpName, DWORD cbName)
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
LSTATUS WINAPI RegQueryValueA(HKEY hkey, LPCSTR name, LPSTR data, LPLONG count)
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)
LSTATUS WINAPI RegQueryValueW(HKEY hkey, LPCWSTR name, LPWSTR data, LPLONG count)
LONG WINAPI RegCopyTreeA(IN HKEY hKeySrc, IN LPCSTR lpSubKey OPTIONAL, IN HKEY hKeyDest)
LONG WINAPI RegSaveKeyA(HKEY hKey, LPCSTR lpFile, LPSECURITY_ATTRIBUTES lpSecurityAttributes)
LONG WINAPI RegConnectRegistryA(IN LPCSTR lpMachineName, IN HKEY hKey, OUT PHKEY phkResult)
LONG WINAPI RegSetValueW(HKEY hKeyOriginal, LPCWSTR lpSubKey, DWORD dwType, LPCWSTR lpData, DWORD cbData)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
LONG WINAPI RegEnumKeyW(HKEY hKey, DWORD dwIndex, LPWSTR lpName, DWORD cbName)
LONG WINAPI RegCreateKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
LONG WINAPI RegDeleteKeyA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey)
BOOL WINAPI LookupPrivilegeValueA(LPCSTR lpSystemName, LPCSTR lpName, PLUID lpLuid)
BOOL WINAPI AdjustTokenPrivileges(HANDLE TokenHandle, BOOL DisableAllPrivileges, PTOKEN_PRIVILEGES NewState, DWORD BufferLength, PTOKEN_PRIVILEGES PreviousState, PDWORD ReturnLength)
BOOL WINAPI OpenProcessToken(HANDLE ProcessHandle, DWORD DesiredAccess, PHANDLE TokenHandle)
BOOL WINAPI AllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority, BYTE nSubAuthorityCount, DWORD nSubAuthority0, DWORD nSubAuthority1, DWORD nSubAuthority2, DWORD nSubAuthority3, DWORD nSubAuthority4, DWORD nSubAuthority5, DWORD nSubAuthority6, DWORD nSubAuthority7, PSID *pSid)
BOOL WINAPI InitializeSecurityDescriptor(PSECURITY_DESCRIPTOR pSecurityDescriptor, DWORD dwRevision)
PVOID WINAPI FreeSid(PSID pSid)
const char * wine_dbg_sprintf(const char *format,...)
#define ERROR_CALL_NOT_IMPLEMENTED
#define ERROR_INVALID_PARAMETER
#define GetCurrentDirectoryW(x, y)
#define GetProcAddress(x, y)
#define INVALID_HANDLE_VALUE
#define CreateFileA(a, b, c, d, e, f, g)
static __inline const char * debugstr_an(const char *s, int n)
#define GetCurrentProcess()
#define ERROR_NO_MORE_ITEMS
#define ERROR_INVALID_HANDLE
#define FILE_ATTRIBUTE_NORMAL
#define WideCharToMultiByte
#define ERROR_ACCESS_DENIED
static void cleanup(void)
static const WCHAR valueW[]
BOOL WINAPI DECLSPEC_HOTPATCH SetEnvironmentVariableA(IN LPCSTR lpName, IN LPCSTR lpValue)
BOOL WINAPI DeleteFileA(IN LPCSTR lpFileName)
BOOL WINAPI RemoveDirectoryA(IN LPCSTR lpPathName)
BOOL WINAPI CreateDirectoryA(IN LPCSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
HANDLE WINAPI FindFirstFileA(IN LPCSTR lpFileName, OUT LPWIN32_FIND_DATAA lpFindFileData)
BOOL WINAPI FindClose(HANDLE hFindFile)
BOOL WINAPI FindNextFileA(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAA lpFindFileData)
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryExA(LPCSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
DWORD WINAPI GetModuleFileNameA(HINSTANCE hModule, LPSTR lpFilename, DWORD nSize)
BOOL WINAPI SetCurrentDirectoryW(IN LPCWSTR lpPathName)
UINT WINAPI GetSystemDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
BOOL WINAPI SetCurrentDirectoryA(IN LPCSTR lpPathName)
DWORD WINAPI GetTempPathA(IN DWORD nBufferLength, OUT LPSTR lpBuffer)
UINT WINAPI GetSystemDirectoryA(OUT LPSTR lpBuffer, IN UINT uSize)
BOOL WINAPI QueryPerformanceFrequency(OUT PLARGE_INTEGER lpFrequency)
BOOL WINAPI QueryPerformanceCounter(OUT PLARGE_INTEGER lpPerformanceCount)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
BOOL WINAPI SystemTimeToFileTime(IN CONST SYSTEMTIME *lpSystemTime, OUT LPFILETIME lpFileTime)
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
int WINAPI lstrcmpA(LPCSTR str1, LPCSTR str2)
LANGID WINAPI GetUserDefaultLangID(void)
DWORD WINAPI DECLSPEC_HOTPATCH EnumDynamicTimeZoneInformation(DWORD index, DYNAMIC_TIME_ZONE_INFORMATION *info)
LSTATUS WINAPI RegEnumValueW(HKEY hkey, DWORD index, LPWSTR value, LPDWORD val_count, LPDWORD reserved, LPDWORD type, LPBYTE data, LPDWORD count)
LSTATUS WINAPI RegDeleteValueA(HKEY hkey, LPCSTR name)
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
LSTATUS WINAPI RegOpenCurrentUser(REGSAM access, PHKEY retkey)
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 RegNotifyChangeKeyValue(HKEY hkey, BOOL fWatchSubTree, DWORD fdwNotifyFilter, HANDLE hEvent, BOOL fAsync)
LONG WINAPI RegSetKeyValueW(HKEY hkey, LPCWSTR subkey, LPCWSTR name, DWORD type, const void *data, DWORD len)
LSTATUS WINAPI RegEnumValueA(HKEY hkey, DWORD index, LPSTR value, LPDWORD val_count, LPDWORD reserved, LPDWORD type, LPBYTE data, LPDWORD count)
LSTATUS WINAPI DECLSPEC_HOTPATCH RegQueryValueExA(HKEY hkey, LPCSTR name, LPDWORD reserved, LPDWORD type, LPBYTE data, LPDWORD count)
LSTATUS WINAPI RegSetKeySecurity(HKEY hkey, SECURITY_INFORMATION SecurityInfo, PSECURITY_DESCRIPTOR pSecurityDesc)
LSTATUS WINAPI RegGetValueA(HKEY hKey, LPCSTR pszSubKey, LPCSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
LSTATUS WINAPI RegLoadKeyA(HKEY hkey, LPCSTR subkey, LPCSTR 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)
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)
LSTATUS WINAPI DECLSPEC_HOTPATCH RegOpenKeyExA(HKEY hkey, LPCSTR name, DWORD options, REGSAM access, PHKEY retkey)
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)
LSTATUS WINAPI RegLoadMUIStringA(HKEY hKey, LPCSTR pszValue, LPSTR pszBuffer, DWORD cbBuffer, LPDWORD pcbData, DWORD dwFlags, LPCSTR pszBaseDir)
LSTATUS WINAPI RegUnLoadKeyA(HKEY hkey, LPCSTR lpSubKey)
LSTATUS WINAPI RegFlushKey(HKEY hkey)
DWORD WINAPI GetVersion(void)
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
_ACRTIMP int __cdecl wcsncmp(const wchar_t *, const wchar_t *, size_t)
_ACRTIMP int __cdecl atoi(const char *)
_ACRTIMP size_t __cdecl strlen(const char *)
_ACRTIMP int __cdecl strcmp(const char *, const char *)
_ACRTIMP size_t __cdecl strspn(const char *, const char *)
_ACRTIMP char *__cdecl strrchr(const char *, int)
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
_In_ uint64_t _In_ uint64_t _In_ uint64_t _In_opt_ traverse_ptr * tp
UNICODE_STRING * PUNICODE_STRING
UINT WINAPI GetTempFileNameA(IN LPCSTR lpPathName, IN LPCSTR lpPrefixString, IN UINT uUnique, OUT LPSTR lpTempFileName)
GLuint GLuint GLsizei GLenum type
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLdouble GLdouble GLdouble r
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 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 GLint GLint j
HLOCAL NTAPI LocalFree(HLOCAL hMem)
static const WCHAR emptyW[]
REFIID LPVOID DWORD_PTR dw
const unsigned char size_t insize
unsigned char size_t * outsize
LPSTR WINAPI lstrcpyA(LPSTR lpString1, LPCSTR lpString2)
int WINAPI lstrlenA(LPCSTR lpString)
void __cdecl void __cdecl void __cdecl void __cdecl void __cdecl winetest_push_context(const char *fmt,...) __WINE_PRINTF_ATTR(1
#define todo_wine_if(is_todo)
void __cdecl void __cdecl void __cdecl void __cdecl void __cdecl void winetest_pop_context(void)
#define memcpy(s1, s2, n)
#define ERROR_ALREADY_EXISTS
#define ERROR_FILE_NOT_FOUND
static const char * dbgstr_SYSTEMTIME(const SYSTEMTIME *st)
static void test_multistring_termination(void)
static void test_performance_keys(void)
static void test_reg_copy_tree(void)
static BOOL set_privileges(LPCSTR privilege, BOOL set)
static const BOOL is_64bit
static DWORD get_key_value(HKEY root, const char *name, DWORD flags)
static void check_user_privs(void)
static void create_test_entries(void)
#define check_enum_value(name, flags, subkeys, found)
static void test_RegLoadMUIString(void)
static void test_reg_load_app_key(void)
static const char * sTestpath2
static void test_enum_value(void)
static void test_string_termination(void)
static void test_reg_delete_tree(void)
static void test_RegNotifyChangeKeyValue(void)
static void test_redirection(void)
static void test_symlinks(void)
static void test_query_value_ex(void)
static void test_reg_open_key(void)
static void test_reg_query_value(void)
static void test_get_value(void)
static void test_reg_close_key(void)
static void test_classesroot(void)
static void test_reg_create_key(void)
static void test_reg_query_info(void)
#define test_hkey_main_Value_A(name, string, full_byte_len)
static void test_help_values(const char *text, HKEY key)
static void _test_hkey_main_Value_W(int line, LPCWSTR name, LPCWSTR string, DWORD full_byte_len)
#define ADVAPI32_GET_PROC(func)
static void test_perflib_key(void)
static void wait_file_available(char *path)
static void test_classesroot_mask(void)
static void _check_enum_value(int line, const char *name, DWORD flags, DWORD subkeys_in, BOOL found_in)
static const DWORD ptr_size
static void InitFunctionPtrs(void)
#define check_key_value(root, name, flags, expect)
static BOOL check_cs_number(const WCHAR *str)
static DYNAMIC_TIME_ZONE_INFORMATION *static BOOL limited_user
static void test_counter_values(const char *text, HKEY key)
static void test_classesroot_enum(void)
static void _check_key_value(int line, HANDLE root, const char *name, DWORD flags, DWORD expect)
static const char * sTestpath1
static const char * find_counter_value(const char *text, const char *index)
static void test_control_set_symlink(void)
static BOOL has_wow64(void)
static void test_reg_delete_key(void)
static void test_deleted_key(void)
static BOOL is_special_key(HKEY key)
static void test_EnumDynamicTimeZoneInformation(void)
static const char *static REGSAM
static void test_delete_key_value(void)
static void test_RegOpenCurrentUser(void)
static void delete_dir(const char *path)
static void test_rw_order(void)
static DWORD WINAPI notify_change_thread(void *arg)
static void test_delete_value(void)
static void _test_hkey_main_Value_A(int line, LPCSTR name, LPCSTR string, DWORD full_byte_len)
#define test_hkey_main_Value_W(name, string, full_byte_len)
static void test_reg_load_key(void)
static void test_set_value(void)
static void test_RegRenameKey(void)
static void setup_main_key(void)
static void test_regconnectregistry(void)
static const WCHAR textW[]
static const CHAR emptyA[]
static HINSTANCE hkernel32
#define InitializeObjectAttributes(p, n, a, r, s)
NTSYSAPI NTSTATUS NTAPI NtOpenKey(OUT PHANDLE KeyHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
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
NTSYSAPI NTSTATUS NTAPI NtDeleteValueKey(IN HANDLE KeyHandle, IN PUNICODE_STRING ValueName)
#define REG_OPTION_CREATE_LINK
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)
#define STANDARD_RIGHTS_ALL
#define KEY_ENUMERATE_SUB_KEYS
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
#define REG_OPTION_VOLATILE
NTSTATUS NTAPI NtDeleteKey(IN HANDLE KeyHandle)
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 NtEnumerateValueKey(IN HANDLE KeyHandle, IN ULONG Index, IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, OUT PVOID KeyValueInformation, IN ULONG Length, OUT PULONG ResultLength)
NTSTATUS NTAPI NtQueryKey(IN HANDLE KeyHandle, IN KEY_INFORMATION_CLASS KeyInformationClass, OUT PVOID KeyInformation, IN ULONG Length, OUT PULONG ResultLength)
NTSTATUS NTAPI NtQuerySystemTime(OUT PLARGE_INTEGER SystemTime)
#define STATUS_PREDEFINED_HANDLE
_In_opt_ _In_opt_ _In_ _In_ DWORD cbData
#define OBJ_CASE_INSENSITIVE
#define delete_key(r, p, s)
SC_HANDLE WINAPI OpenSCManagerA(LPCSTR lpMachineName, LPCSTR lpDatabaseName, DWORD dwDesiredAccess)
BOOL WINAPI CloseServiceHandle(SC_HANDLE hSCObject)
#define _WIN32_WINNT_WS03
#define _WIN32_WINNT_VISTA
BOOL WINAPI SetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR pSecurityDescriptor, BOOL bDaclPresent, PACL pDacl, BOOL bDaclDefaulted)
#define STATUS_CANNOT_DELETE
BOOL WINAPI SHIM_OBJ_NAME() GetComputerNameA(LPSTR lpBuffer, LPDWORD lpnSize)
wchar_t const *const size_t const buffer_size
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCWSTR lpName OPTIONAL)
#define STATUS_ACCESS_DENIED
#define STATUS_OBJECT_NAME_NOT_FOUND
struct _OBJECT_ATTRIBUTES * POBJECT_ATTRIBUTES
DWORD WINAPI GetLastError(void)
#define LOAD_LIBRARY_AS_IMAGE_RESOURCE
#define LOAD_LIBRARY_AS_DATAFILE
#define MAX_COMPUTERNAME_LENGTH
#define ERROR_MUI_FILE_NOT_FOUND
#define ERROR_UNSUPPORTED_TYPE
#define ERROR_BAD_PATHNAME
#define ERROR_KEY_DELETED
#define ERROR_BAD_EXE_FORMAT
#define ERROR_NO_SYSTEM_RESOURCES
#define ERROR_CHILD_MUST_BE_VOLATILE
#define ERROR_RESOURCE_TYPE_NOT_FOUND
#define ERROR_RESOURCE_NAME_NOT_FOUND
#define ERROR_DATATYPE_MISMATCH
#define ERROR_RESOURCE_DATA_NOT_FOUND
#define ERROR_INVALID_DATA
struct _PERF_DATA_BLOCK PERF_DATA_BLOCK
#define HKEY_LOCAL_MACHINE
#define HKEY_CURRENT_CONFIG
#define HKEY_CURRENT_USER
#define REG_MUI_STRING_TRUNCATE
#define REG_NOTIFY_CHANGE_NAME
#define HKEY_PERFORMANCE_TEXT
#define HKEY_PERFORMANCE_NLSTEXT
#define RRF_SUBKEY_WOW6464KEY
#define REG_NOTIFY_CHANGE_LAST_SET
#define RRF_RT_REG_BINARY
#define RRF_ZEROONFAILURE
#define REG_NOTIFY_THREAD_AGNOSTIC
#define RRF_RT_REG_EXPAND_SZ
#define HKEY_PERFORMANCE_DATA
#define HKEY_CLASSES_ROOT
#define RRF_SUBKEY_WOW6432KEY
#define DACL_SECURITY_INFORMATION
#define SECURITY_WORLD_SID_AUTHORITY
#define TOKEN_ADJUST_PRIVILEGES
#define SECURITY_WORLD_RID
#define SECURITY_DESCRIPTOR_REVISION
#define SE_PRIVILEGE_ENABLED
#define SECURITY_DESCRIPTOR_MIN_LENGTH