From 6fdfd53eaa04518ce0e7ca2050da9894e41eba43 Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Fri, 25 Feb 2000 21:37:21 +0000 Subject: [PATCH] Do not overwrite the valid ObjectAttributes->RootDirectory. Perform case insensitive comparison for the registry paths. --- dlls/ntdll/reg.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/dlls/ntdll/reg.c b/dlls/ntdll/reg.c index 6df1f324500..7451bdc93d2 100644 --- a/dlls/ntdll/reg.c +++ b/dlls/ntdll/reg.c @@ -57,31 +57,36 @@ static BOOLEAN _NtKeyToWinKey( '\\','C','L','A','S','S','E','S',0}; int len; PUNICODE_STRING ObjectName = ObjectAttributes->ObjectName; - - if((ObjectName->Length > (len=lstrlenW(KeyPath_HKLM))) - && (0==CRTDLL_wcsncmp(ObjectName->Buffer,KeyPath_HKLM,len))) + + if(ObjectAttributes->RootDirectory) + { + 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; } 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; } 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; } 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; } else { - *KeyHandle = ObjectAttributes->RootDirectory; + *KeyHandle = 0; *Offset = 0; return FALSE; } - if (ObjectName->Buffer[len] == (WCHAR)'\\') len++; + if (len > 0 && ObjectName->Buffer[len] == (WCHAR)'\\') len++; *Offset = len; TRACE("off=%u hkey=0x%08x\n", *Offset, *KeyHandle); -- 2.11.4.GIT