From 91a67de356a82dcb63bb39b88111ec3091021b68 Mon Sep 17 00:00:00 2001 From: Mark Jansen Date: Sat, 5 Nov 2016 17:46:30 +0000 Subject: [PATCH] [ADVAPI32] Set REG_NONE type in RegQueryValueExW with certain failure cases. Patch by Victor Martinez Calvo. CORE-9666 #resolve #comment Thanks! svn path=/trunk/; revision=73143 --- reactos/dll/win32/advapi32/reg/reg.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/reactos/dll/win32/advapi32/reg/reg.c b/reactos/dll/win32/advapi32/reg/reg.c index 86e14b8e50d..043d74dc7b2 100644 --- a/reactos/dll/win32/advapi32/reg/reg.c +++ b/reactos/dll/win32/advapi32/reg/reg.c @@ -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) {