[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
This commit is contained in:
Mark Jansen
2016-11-05 17:46:30 +00:00
parent 5cccca79c2
commit 91a67de356
+13 -7
View 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)
{