Module: wine Branch: master Commit: bd5edbe1eb1d1e57ded07e291fdc0fd0000a40dc URL: https://gitlab.winehq.org/wine/wine/-/commit/bd5edbe1eb1d1e57ded07e291fdc0fd...
Author: Alexandre Julliard julliard@winehq.org Date: Wed Jul 13 12:29:01 2022 +0200
server: Create new keys in the parent of a shared key.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=53343
---
dlls/ntdll/tests/reg.c | 8 -------- server/registry.c | 7 +++++-- 2 files changed, 5 insertions(+), 10 deletions(-)
diff --git a/dlls/ntdll/tests/reg.c b/dlls/ntdll/tests/reg.c index 10e69b73e6d..f3c4eb15da0 100644 --- a/dlls/ntdll/tests/reg.c +++ b/dlls/ntdll/tests/reg.c @@ -1829,30 +1829,22 @@ static void test_redirection(void)
attr.RootDirectory = root64; status = pNtOpenKey( &key, KEY_ALL_ACCESS, &attr ); - todo_wine_if( ptr_size == 32) ok( status == STATUS_SUCCESS, "NtOpenKey failed: 0x%08lx\n", status ); - if (!status) - { len = sizeof(buffer); status = pNtQueryValueKey( key, &value_str, KeyValuePartialInformation, info, len, &len ); ok( status == STATUS_SUCCESS, "NtQueryValueKey failed: 0x%08lx\n", status ); dw = *(DWORD *)info->Data; ok( dw == 32, "wrong value %lu\n", dw ); pNtClose( key ); - }
attr.RootDirectory = root64; status = pNtOpenKey( &key64, KEY_WOW64_64KEY | KEY_ALL_ACCESS, &attr ); - todo_wine_if( ptr_size == 32) ok( status == STATUS_SUCCESS, "NtOpenKey failed: 0x%08lx\n", status ); - if (!status) - { len = sizeof(buffer); status = pNtQueryValueKey( key64, &value_str, KeyValuePartialInformation, info, len, &len ); ok( status == STATUS_SUCCESS, "NtQueryValueKey failed: 0x%08lx\n", status ); dw = *(DWORD *)info->Data; ok( dw == 32, "wrong value %lu\n", dw ); - }
pNtDeleteKey( key32 ); pNtClose( key32 ); diff --git a/server/registry.c b/server/registry.c index f9a9f75a974..96ba18a0a5a 100644 --- a/server/registry.c +++ b/server/registry.c @@ -536,9 +536,12 @@ static struct object *key_lookup_name( struct object *obj, struct unicode_str *n
if (!(found = find_subkey( key, &tmp, &index ))) { - /* try in the 64-bit parent */ if ((key->flags & KEY_WOWSHARE) && (attr & OBJ_KEY_WOW64)) - found = find_subkey( get_parent( key ), &tmp, &index ); + { + /* try in the 64-bit parent */ + key = get_parent( key ); + if (!(found = find_subkey( key, &tmp, &index ))) return grab_object( key ); + } }
if (!found)