Module: wine Branch: master Commit: 26e383c8df94d76c849dc6e61998fd043c2dacdc URL: https://gitlab.winehq.org/wine/wine/-/commit/26e383c8df94d76c849dc6e61998fd0...
Author: Bernhard Übelacker bernhardu@mailbox.org Date: Sun Jan 21 15:24:11 2024 +0100
server: Avoid unloading of HKU .Default registry branch.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55000
---
dlls/advapi32/tests/registry.c | 8 ++++++++ server/registry.c | 2 ++ 2 files changed, 10 insertions(+)
diff --git a/dlls/advapi32/tests/registry.c b/dlls/advapi32/tests/registry.c index 35df1b226f5..c2b73a8a3fa 100644 --- a/dlls/advapi32/tests/registry.c +++ b/dlls/advapi32/tests/registry.c @@ -1598,6 +1598,14 @@ static void test_reg_unload_key(void) ret = RegUnLoadKeyA(HKEY_LOCAL_MACHINE, "Test"); ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %ld\n", ret);
+ pRtlInitUnicodeString(&key_name, L"\REGISTRY\User\.Default"); + InitializeObjectAttributes(&attr, &key_name, OBJ_CASE_INSENSITIVE, NULL, NULL); + status = pNtUnloadKey(&attr); + ok(status == STATUS_ACCESS_DENIED, "expected STATUS_ACCESS_DENIED, got %08lx\n", status); + + ret = RegUnLoadKeyA(HKEY_USERS, ".Default"); + ok(ret == ERROR_ACCESS_DENIED, "expected ERROR_ACCESS_DENIED, got %ld\n", ret); + set_privileges(SE_RESTORE_NAME, FALSE);
DeleteFileA("saved_key"); diff --git a/server/registry.c b/server/registry.c index 0128b8be9d8..da6a6d0982e 100644 --- a/server/registry.c +++ b/server/registry.c @@ -2357,6 +2357,8 @@ DECL_HANDLER(unload_registry) { if (key->obj.handle_count) set_error( STATUS_CANNOT_DELETE ); + else if (key->obj.is_permanent) + set_error( STATUS_ACCESS_DENIED ); else delete_key( key, 1 ); /* FIXME */ release_object( key );