Author: mjansen
Date: Sat Nov 5 17:46:30 2016
New Revision: 73143
URL:
http://svn.reactos.org/svn/reactos?rev=73143&view=rev
Log:
[ADVAPI32] Set REG_NONE type in RegQueryValueExW with certain failure cases. Patch by
Victor Martinez Calvo. CORE-9666 #resolve #comment Thanks!
Modified:
trunk/reactos/dll/win32/advapi32/reg/reg.c
Modified: trunk/reactos/dll/win32/advapi32/reg/reg.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/advapi32/reg/reg…
==============================================================================
--- trunk/reactos/dll/win32/advapi32/reg/reg.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/advapi32/reg/reg.c [iso-8859-1] Sat Nov 5 17:46:30 2016
@@ -4135,19 +4135,25 @@
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)
{