From: Bernhard Übelacker bernhardu@mailbox.org
https://bugs.winehq.org/show_bug.cgi?id=51998 --- dlls/ntoskrnl.exe/ntoskrnl.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c index a47bba8df13..2b94e4ed807 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/ntoskrnl.c @@ -3917,14 +3917,16 @@ static void WINAPI ldr_notify_callback(ULONG reason, LDR_DLL_NOTIFICATION_DATA *
static WCHAR* get_absolute_imagepath( WCHAR *path, DWORD size, DWORD offset ) { + static const WCHAR separator[] = L"\"; WCHAR buffer[MAX_PATH]; LPWSTR str;
GetWindowsDirectoryW(buffer, MAX_PATH);
str = HeapAlloc(GetProcessHeap(), 0, - (size - offset + lstrlenW(buffer)) * sizeof(WCHAR)); + (size - offset + lstrlenW(buffer) + lstrlenW(separator)) * sizeof(WCHAR)); lstrcpyW(str, buffer); + lstrcatW(str, separator); lstrcatW(str, path + offset); HeapFree( GetProcessHeap(), 0, path ); return str; @@ -3935,6 +3937,7 @@ static HMODULE load_driver( const WCHAR *driver_name, const UNICODE_STRING *keyn { static const WCHAR driversW[] = L"\drivers\"; static const WCHAR systemrootW[] = L"\SystemRoot\"; + static const WCHAR system32W[] = L"System32"; static const WCHAR postfixW[] = L".sys"; static const WCHAR ntprefixW[] = L"\??\"; static const WCHAR ImagePathW[] = L"ImagePath"; @@ -3968,7 +3971,9 @@ static HMODULE load_driver( const WCHAR *driver_name, const UNICODE_STRING *keyn }
if (!wcsnicmp( path, systemrootW, 12 )) - str = path = get_absolute_imagepath( path, size, 11 ); + str = path = get_absolute_imagepath( path, size, 12 ); + else if (!wcsnicmp( path, system32W, 8 )) + str = path = get_absolute_imagepath( path, size, 0 ); else if (!wcsncmp( path, ntprefixW, 4 )) str = path + 4; else