Lei Zhang : advapi32: Allow opening HKEY_CLASSES_ROOT subkeys with backslash prefix on NT.

Alexandre Julliard julliard at winehq.org
Mon Nov 24 09:17:08 CST 2008


Module: wine
Branch: master
Commit: aacb511da1540fa015c5e853c90fd054b9442701
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=aacb511da1540fa015c5e853c90fd054b9442701

Author: Lei Zhang <thestig at google.com>
Date:   Fri Nov 21 17:03:51 2008 -0800

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);




More information about the wine-cvs mailing list