Lei Zhang : advapi32: Allow opening HKEY_CLASSES_ROOT subkeys with backslash prefix on NT.
Module: wine Branch: master Commit: aacb511da1540fa015c5e853c90fd054b9442701 URL: http://source.winehq.org/git/wine.git/?a=commit;h=aacb511da1540fa015c5e853c9... Author: Lei Zhang <thestig(a)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);
participants (1)
-
Alexandre Julliard