From 26e383c8df94d76c849dc6e61998fd043c2dacdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bernhard=20=C3=9Cbelacker?= Date: Sun, 21 Jan 2024 15:24:11 +0100 Subject: [PATCH] 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 );