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