Re: [PATCH] advapi32: Use the lower 32bit of the special HKEYs on 64bit.
Rico Schüller <kgbricola(a)web.de> writes:
@@ -228,9 +228,9 @@ static NTSTATUS open_key( HKEY *retkey, ACCESS_MASK access, OBJECT_ATTRIBUTES *a static HKEY create_special_root_hkey( HKEY hkey, DWORD access ) { HKEY ret = 0; - int idx = (UINT_PTR)hkey - (UINT_PTR)HKEY_SPECIAL_ROOT_FIRST; + int idx = (DWORD)hkey - (DWORD)HKEY_SPECIAL_ROOT_FIRST;
- if (hkey == HKEY_CURRENT_USER) + if ((DWORD)hkey == (DWORD)HKEY_CURRENT_USER)
You want HandleToUlong and the like.
@@ -947,6 +948,57 @@ static void test_reg_open_key(void) "RegOpenKeyEx with KEY_WOW64_64KEY failed (err=%u)\n", ret); RegCloseKey(hkResult);
+ /* check special HKEYs on 64bit + * only the lower 4 bytes of the supplied key are used + */ + if (ptr_size == 64) + { + DWORD mask = ~0U; + HKEY hkBig = (HKEY)((ULONG_PTR)HKEY_CURRENT_USER & mask); + + ret = RegOpenKeyA(HKEY_CURRENT_USER, "Software", &hkResult); + ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret); + ok(hkResult != NULL, "expected hkResult != NULL\n"); + hkPreserve = hkResult; + RegCloseKey(hkResult); + + hkBig = (HKEY)(((ULONG_PTR)HKEY_CURRENT_USER & mask) | 0x100000000ULL); + ret = RegOpenKeyA(hkBig, "Software", &hkResult); + ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret); + ok(hkResult == hkPreserve, "expected hkResult == hkPreserve\n"); + RegCloseKey(hkResult);
Please don't use long long constants. -- Alexandre Julliard julliard(a)winehq.org
participants (1)
-
Alexandre Julliard