ntdll: Fix the return value of NtQueryKey.

杨堃 yangkun at uniontech.com
Tue Jun 14 03:28:19 CDT 2022


Signed-off-by: Kun Yang <yangkun at uniontech.com>
---
 dlls/ntdll/tests/reg.c     | 2 +-
 dlls/ntdll/unix/registry.c | 7 ++++++-
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/dlls/ntdll/tests/reg.c b/dlls/ntdll/tests/reg.c
index 2c158be17b4..ab6f7914e4b 100644
--- a/dlls/ntdll/tests/reg.c
+++ b/dlls/ntdll/tests/reg.c
@@ -1831,7 +1831,7 @@ static void test_NtQueryKey(void)
         pNtClose(key);
         return;
     }
-    todo_wine ok(status == STATUS_BUFFER_TOO_SMALL, "NtQueryKey Failed: 0x%08lx\n", status);
+    ok(status == STATUS_BUFFER_TOO_SMALL, "NtQueryKey Failed: 0x%08lx\n", status);
     info = HeapAlloc(GetProcessHeap(), 0, length);
 
     /* non-zero buffer size, but insufficient */
diff --git a/dlls/ntdll/unix/registry.c b/dlls/ntdll/unix/registry.c
index 6628454440a..767fa36302d 100644
--- a/dlls/ntdll/unix/registry.c
+++ b/dlls/ntdll/unix/registry.c
@@ -321,7 +321,12 @@ static NTSTATUS enumerate_key( HANDLE handle, int index, KEY_INFORMATION_CLASS i
                 break;
             }
             *result_len = fixed_size + reply->total;
-            if (length < *result_len) ret = STATUS_BUFFER_OVERFLOW;
+            if (length < *result_len){
+                if(min(length, fixed_size) == 0)
+                    ret = STATUS_BUFFER_TOO_SMALL;
+                else
+                    ret = STATUS_BUFFER_OVERFLOW;
+            }
         }
     }
     SERVER_END_REQ;
-- 
2.20.1


More information about the wine-devel mailing list