ntdll: Enable WoW64 filesystem redirection when loading libraries.

This matches the behavior seen on Windows 7/2008R2 and newer.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47912
Signed-off-by: Brendan Shanks <bshanks@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Brendan Shanks 2019-10-24 15:12:12 -07:00 committed by Alexandre Julliard
parent a7269a1035
commit aa51aee1a9
2 changed files with 6 additions and 1 deletions

View File

@ -3822,7 +3822,7 @@ static void test_wow64_redirection_for_dll(const char *libname)
if (!GetModuleHandleA(libname))
{
lib = LoadLibraryExA(libname, NULL, 0);
todo_wine ok (broken(lib == NULL) /* Vista/2008 */ ||
ok (broken(lib == NULL) /* Vista/2008 */ ||
lib != NULL, "Loading %s should succeed with WOW64 redirection disabled\n", libname);
if (lib)
{

View File

@ -2881,6 +2881,7 @@ static NTSTATUS find_dll_file( const WCHAR *load_path, const WCHAR *libname,
{
WCHAR *ext, *dllname;
NTSTATUS status;
ULONG wow64_old_value = 0;
/* first append .dll if needed */
@ -2897,6 +2898,9 @@ static NTSTATUS find_dll_file( const WCHAR *load_path, const WCHAR *libname,
libname = dllname;
}
/* Win 7/2008R2 and up seem to re-enable WoW64 FS redirection when loading libraries */
if (is_wow64) RtlWow64EnableFsRedirectionEx( 0, &wow64_old_value );
nt_name->Buffer = NULL;
if (!contains_path( libname ))
@ -2930,6 +2934,7 @@ static NTSTATUS find_dll_file( const WCHAR *load_path, const WCHAR *libname,
done:
RtlFreeHeap( GetProcessHeap(), 0, dllname );
if (wow64_old_value) RtlWow64EnableFsRedirectionEx( 1, &wow64_old_value );
return status;
}