This merge request is related to !820
-- v2: server: Allow a loaded key to be loaded multiple times. advapi32/tests: Test if a loaded key can be loaded multiple times.
From: Santino Mazza smazza@codeweavers.com
--- dlls/advapi32/tests/registry.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-)
diff --git a/dlls/advapi32/tests/registry.c b/dlls/advapi32/tests/registry.c index 55a8074f1b7..abb929a58d6 100644 --- a/dlls/advapi32/tests/registry.c +++ b/dlls/advapi32/tests/registry.c @@ -1545,7 +1545,7 @@ static void test_reg_save_key(void) static void test_reg_load_key(void) { DWORD ret; - HKEY hkHandle; + HKEY hkHandle, child_key;
if (!set_privileges(SE_RESTORE_NAME, TRUE) || !set_privileges(SE_BACKUP_NAME, FALSE)) @@ -1557,6 +1557,28 @@ static void test_reg_load_key(void) ret = RegLoadKeyA(HKEY_LOCAL_MACHINE, "Test", "saved_key"); ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %ld\n", ret);
+ /* Test behaviour when loading a loaded key again */ + ret = RegOpenKeyA(HKEY_LOCAL_MACHINE, "Test", &hkHandle); + ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %ld\n", ret); + + ret = RegCreateKeyA(hkHandle, "child_key", &child_key); + ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %ld\n", ret); + + RegCloseKey(child_key); + RegCloseKey(hkHandle); + + ret = RegLoadKeyA(HKEY_LOCAL_MACHINE, "Test", "saved_key"); + todo_wine ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %ld\n", ret); + + ret = RegOpenKeyA(HKEY_LOCAL_MACHINE, "Test", &hkHandle); + ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %ld\n", ret); + + ret = RegOpenKeyA(hkHandle, "child_key", &child_key); + ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %ld\n", ret); + + RegCloseKey(child_key); + RegCloseKey(hkHandle); + set_privileges(SE_RESTORE_NAME, FALSE);
ret = RegOpenKeyA(HKEY_LOCAL_MACHINE, "Test", &hkHandle);
From: Santino Mazza smazza@codeweavers.com
--- dlls/advapi32/tests/registry.c | 2 +- server/registry.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/advapi32/tests/registry.c b/dlls/advapi32/tests/registry.c index abb929a58d6..5844ae00977 100644 --- a/dlls/advapi32/tests/registry.c +++ b/dlls/advapi32/tests/registry.c @@ -1568,7 +1568,7 @@ static void test_reg_load_key(void) RegCloseKey(hkHandle);
ret = RegLoadKeyA(HKEY_LOCAL_MACHINE, "Test", "saved_key"); - todo_wine ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %ld\n", ret); + ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %ld\n", ret);
ret = RegOpenKeyA(HKEY_LOCAL_MACHINE, "Test", &hkHandle); ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %ld\n", ret); diff --git a/server/registry.c b/server/registry.c index 96ba18a0a5a..fb0204c787d 100644 --- a/server/registry.c +++ b/server/registry.c @@ -2295,7 +2295,7 @@ DECL_HANDLER(load_registry) if (!(parent = get_hkey_obj( objattr->rootdir, 0 ))) return; }
- if ((key = create_key( parent, &name, 0, KEY_WOW64_64KEY, 0, sd ))) + if ((key = create_key( parent, &name, 0, KEY_WOW64_64KEY, OBJ_OPENIF, sd ))) { load_registry( key, req->file ); release_object( key );