[PATCH] advapi32: Allow opening HKEY_CLASSES_ROOT subkeys with backslash prefix on NT. (try 2)
Lei Zhang
thestig at google.com
Fri Nov 21 19:05:18 CST 2008
Hi,
On NT+, it's ok to open a subkey of HKEY_CLASSES_ROOT where the subkey
starts with a backslash.
This version modifies RegOpenKeyExW as well.
Tested on 98, 2000, and XP.
-------------- next part --------------
From af2ea2523281cf368056ebeb3332182276f6904c Mon Sep 17 00:00:00 2001
From: Lei Zhang <thestig at google.com>
Date: Fri, 21 Nov 2008 17:03:51 -0800
Subject: [PATCH] advapi32: Allow opening HKEY_CLASSES_ROOT subkeys with backslash prefix on NT.
---
dlls/advapi32/registry.c | 8 ++++++++
dlls/advapi32/tests/registry.c | 7 +++++++
2 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/dlls/advapi32/registry.c b/dlls/advapi32/registry.c
index ff574b2..6615bc0 100644
--- a/dlls/advapi32/registry.c
+++ b/dlls/advapi32/registry.c
@@ -306,6 +306,9 @@ LSTATUS WINAPI RegOpenKeyExW( HKEY hkey, LPCWSTR name, DWORD reserved, REGSAM ac
OBJECT_ATTRIBUTES attr;
UNICODE_STRING nameW;
+ /* NT+ allows beginning backslash for HKEY_CLASSES_ROOT */
+ if (hkey == HKEY_CLASSES_ROOT && name && *name == '\\') name++;
+
if (!(hkey = get_special_root_hkey( hkey ))) return ERROR_INVALID_HANDLE;
attr.Length = sizeof(attr);
@@ -346,6 +349,11 @@ LSTATUS WINAPI RegOpenKeyExA( HKEY hkey, LPCSTR name, DWORD reserved, REGSAM acc
NTSTATUS status;
if (!is_version_nt()) access = KEY_ALL_ACCESS; /* Win95 ignores the access mask */
+ else
+ {
+ /* NT+ allows beginning backslash for HKEY_CLASSES_ROOT */
+ if (hkey == HKEY_CLASSES_ROOT && name && *name == '\\') name++;
+ }
if (!(hkey = get_special_root_hkey( hkey ))) return ERROR_INVALID_HANDLE;
diff --git a/dlls/advapi32/tests/registry.c b/dlls/advapi32/tests/registry.c
index b3331b4..1ef78d2 100644
--- a/dlls/advapi32/tests/registry.c
+++ b/dlls/advapi32/tests/registry.c
@@ -961,6 +961,13 @@ static void test_reg_open_key(void)
ret == ERROR_FILE_NOT_FOUND /* Win9x,ME */
, "expected ERROR_BAD_PATHNAME or ERROR_FILE_NOT_FOUND, got %d\n", ret);
+ hkResult = NULL;
+ ret = RegOpenKeyExA(HKEY_CLASSES_ROOT, "\\clsid", 0, KEY_QUERY_VALUE, &hkResult);
+ ok(ret == ERROR_SUCCESS || /* NT/2k/XP */
+ ret == ERROR_FILE_NOT_FOUND /* Win9x,ME */
+ , "expected ERROR_SUCCESS or ERROR_FILE_NOT_FOUND, got %d\n", ret);
+ RegCloseKey(hkResult);
+
/* WOW64 flags */
hkResult = NULL;
ret = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software", 0, KEY_READ|KEY_WOW64_32KEY, &hkResult);
--
1.5.4.5
More information about the wine-patches
mailing list