Do not overwrite the valid ObjectAttributes->RootDirectory.
Perform case insensitive comparison for the registry paths.
This commit is contained in:
parent
1da43e3e3d
commit
6fdfd53eaa
@ -57,31 +57,36 @@ static BOOLEAN _NtKeyToWinKey(
|
|||||||
'\\','C','L','A','S','S','E','S',0};
|
'\\','C','L','A','S','S','E','S',0};
|
||||||
int len;
|
int len;
|
||||||
PUNICODE_STRING ObjectName = ObjectAttributes->ObjectName;
|
PUNICODE_STRING ObjectName = ObjectAttributes->ObjectName;
|
||||||
|
|
||||||
if((ObjectName->Length > (len=lstrlenW(KeyPath_HKLM)))
|
if(ObjectAttributes->RootDirectory)
|
||||||
&& (0==CRTDLL_wcsncmp(ObjectName->Buffer,KeyPath_HKLM,len)))
|
{
|
||||||
|
len = 0;
|
||||||
|
*KeyHandle = ObjectAttributes->RootDirectory;
|
||||||
|
}
|
||||||
|
else if((ObjectName->Length > (len=lstrlenW(KeyPath_HKLM)))
|
||||||
|
&& (0==CRTDLL__wcsnicmp(ObjectName->Buffer,KeyPath_HKLM,len)))
|
||||||
{ *KeyHandle = HKEY_LOCAL_MACHINE;
|
{ *KeyHandle = HKEY_LOCAL_MACHINE;
|
||||||
}
|
}
|
||||||
else if((ObjectName->Length > (len=lstrlenW(KeyPath_HKU)))
|
else if((ObjectName->Length > (len=lstrlenW(KeyPath_HKU)))
|
||||||
&& (0==CRTDLL_wcsncmp(ObjectName->Buffer,KeyPath_HKU,len)))
|
&& (0==CRTDLL__wcsnicmp(ObjectName->Buffer,KeyPath_HKU,len)))
|
||||||
{ *KeyHandle = HKEY_USERS;
|
{ *KeyHandle = HKEY_USERS;
|
||||||
}
|
}
|
||||||
else if((ObjectName->Length > (len=lstrlenW(KeyPath_HCR)))
|
else if((ObjectName->Length > (len=lstrlenW(KeyPath_HCR)))
|
||||||
&& (0==CRTDLL_wcsncmp(ObjectName->Buffer,KeyPath_HCR,len)))
|
&& (0==CRTDLL__wcsnicmp(ObjectName->Buffer,KeyPath_HCR,len)))
|
||||||
{ *KeyHandle = HKEY_CLASSES_ROOT;
|
{ *KeyHandle = HKEY_CLASSES_ROOT;
|
||||||
}
|
}
|
||||||
else if((ObjectName->Length > (len=lstrlenW(KeyPath_HCC)))
|
else if((ObjectName->Length > (len=lstrlenW(KeyPath_HCC)))
|
||||||
&& (0==CRTDLL_wcsncmp(ObjectName->Buffer,KeyPath_HCC,len)))
|
&& (0==CRTDLL__wcsnicmp(ObjectName->Buffer,KeyPath_HCC,len)))
|
||||||
{ *KeyHandle = HKEY_CURRENT_CONFIG;
|
{ *KeyHandle = HKEY_CURRENT_CONFIG;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
*KeyHandle = ObjectAttributes->RootDirectory;
|
*KeyHandle = 0;
|
||||||
*Offset = 0;
|
*Offset = 0;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ObjectName->Buffer[len] == (WCHAR)'\\') len++;
|
if (len > 0 && ObjectName->Buffer[len] == (WCHAR)'\\') len++;
|
||||||
*Offset = len;
|
*Offset = len;
|
||||||
|
|
||||||
TRACE("off=%u hkey=0x%08x\n", *Offset, *KeyHandle);
|
TRACE("off=%u hkey=0x%08x\n", *Offset, *KeyHandle);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user