mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2024-11-21 16:46:54 -08:00
70 lines
3.2 KiB
Diff
70 lines
3.2 KiB
Diff
From 0413b624582ad1db0af0dbeddb41ef698a2d2504 Mon Sep 17 00:00:00 2001
|
|
From: Zebediah Figura <z.figura12@gmail.com>
|
|
Date: Wed, 8 Aug 2018 20:00:15 -0500
|
|
Subject: [PATCH] ntdll: Add a stub implementation of Wow64Transition.
|
|
|
|
---
|
|
dlls/ntdll/loader.c | 13 ++++++++++++-
|
|
dlls/ntdll/ntdll.spec | 1 +
|
|
2 files changed, 13 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
|
|
index 1a76be3f0a6..b6c55071a15 100644
|
|
--- a/dlls/ntdll/loader.c
|
|
+++ b/dlls/ntdll/loader.c
|
|
@@ -3912,6 +3912,7 @@ BOOL WINAPI DllMain( HINSTANCE inst, DWORD reason, LPVOID reserved )
|
|
return TRUE;
|
|
}
|
|
|
|
+void *Wow64Transition;
|
|
|
|
/***********************************************************************
|
|
* __wine_process_init
|
|
@@ -3921,13 +3922,16 @@ void __wine_process_init(void)
|
|
static const WCHAR ntdllW[] = {'\\','?','?','\\','C',':','\\','w','i','n','d','o','w','s','\\',
|
|
's','y','s','t','e','m','3','2','\\',
|
|
'n','t','d','l','l','.','d','l','l',0};
|
|
+ static const WCHAR wow64cpuW[] = {'\\','?','?','\\','C',':','\\','w','i','n','d','o','w','s','\\',
|
|
+ 's','y','s','t','e','m','3','2','\\',
|
|
+ 'w','o','w','6','4','c','p','u','.','d','l','l',0};
|
|
static const WCHAR kernel32W[] = {'\\','?','?','\\','C',':','\\','w','i','n','d','o','w','s','\\',
|
|
's','y','s','t','e','m','3','2','\\',
|
|
'k','e','r','n','e','l','3','2','.','d','l','l',0};
|
|
void (WINAPI *kernel32_start_process)(LPTHREAD_START_ROUTINE,void*) = NULL;
|
|
RTL_USER_PROCESS_PARAMETERS *params;
|
|
ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION runlevel;
|
|
- WINE_MODREF *wm;
|
|
+ WINE_MODREF *wm, *wow64cpu_wm;
|
|
NTSTATUS status;
|
|
ANSI_STRING func_name;
|
|
UNICODE_STRING nt_name;
|
|
@@ -3986,6 +3990,13 @@ void __wine_process_init(void)
|
|
MESSAGE( "wine: could not load kernel32.dll, status %x\n", status );
|
|
NtTerminateProcess( GetCurrentProcess(), status );
|
|
}
|
|
+
|
|
+ RtlInitUnicodeString( &nt_name, wow64cpuW );
|
|
+ if ((status = load_builtin_dll( NULL, &nt_name, 0, 0, &wow64cpu_wm )) == STATUS_SUCCESS)
|
|
+ Wow64Transition = wow64cpu_wm->ldr.DllBase;
|
|
+ else
|
|
+ WARN( "could not load wow64cpu.dll, status %#x\n", status );
|
|
+
|
|
RtlInitAnsiString( &func_name, "__wine_start_process" );
|
|
if ((status = LdrGetProcedureAddress( wm->ldr.DllBase, &func_name,
|
|
0, (void **)&kernel32_start_process )) != STATUS_SUCCESS)
|
|
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec
|
|
index 850a40412d0..2734099f11f 100644
|
|
--- a/dlls/ntdll/ntdll.spec
|
|
+++ b/dlls/ntdll/ntdll.spec
|
|
@@ -1112,6 +1112,7 @@
|
|
@ stdcall WinSqmIsOptedIn()
|
|
@ stdcall WinSqmSetDWORD(ptr long long)
|
|
@ stdcall WinSqmStartSession(ptr long long)
|
|
+@ extern Wow64Transition
|
|
@ stdcall -private -syscall ZwAcceptConnectPort(ptr long ptr long ptr ptr) NtAcceptConnectPort
|
|
@ stdcall -private -syscall ZwAccessCheck(ptr long long ptr ptr ptr ptr ptr) NtAccessCheck
|
|
@ stdcall -private -syscall ZwAccessCheckAndAuditAlarm(ptr long ptr ptr ptr long ptr long ptr ptr ptr) NtAccessCheckAndAuditAlarm
|
|
--
|
|
2.27.0
|
|
|