[ADVAPI32] Set REG_NONE type in RegQueryValueExW with certain failure cases. Patch...
authorMark Jansen <mark.jansen@reactos.org>
Sat, 5 Nov 2016 17:46:30 +0000 (17:46 +0000)
committerMark Jansen <mark.jansen@reactos.org>
Sat, 5 Nov 2016 17:46:30 +0000 (17:46 +0000)
svn path=/trunk/; revision=73143

reactos/dll/win32/advapi32/reg/reg.c

index 86e14b8..043d74d 100644 (file)
@@ -4135,19 +4135,25 @@ RegQueryValueExW(
 
     RtlInitUnicodeString( &name_str, name );
 
-    if (data) total_size = min( sizeof(buffer), *count + info_size );
+    if (data)
+        total_size = min( sizeof(buffer), *count + info_size );
     else
-    {
         total_size = info_size;
-        if (count) *count = 0;
-    }
 
-    /* this matches Win9x behaviour - NT sets *type to a random value */
-    if (type) *type = REG_NONE;
 
     status = NtQueryValueKey( hkey, &name_str, KeyValuePartialInformation,
                               buffer, total_size, &total_size );
-    if (!NT_SUCCESS(status) && status != STATUS_BUFFER_OVERFLOW) goto done;
+
+    if (!NT_SUCCESS(status) && status != STATUS_BUFFER_OVERFLOW)
+    {
+        // NT: Valid handles with inexistant/null values or invalid (but not NULL) handles sets type to REG_NONE
+        if ((status == STATUS_OBJECT_NAME_NOT_FOUND) ||(status == STATUS_INVALID_HANDLE && hkey))
+        {
+            if (type) *type = REG_NONE;
+            if (count) *count = 0;
+        }
+        goto done;
+    }
 
     if (data)
     {