Module: wine Branch: master Commit: 3786462a568b6827d1ba1cc1ab2ced117817dcf4 URL: https://source.winehq.org/git/wine.git/?a=commit;h=3786462a568b6827d1ba1cc1a...
Author: Dmitry Timoshkov dmitry@baikal.ru Date: Tue Aug 18 17:59:01 2020 +0300
kernelbase: Native machine is optional for IsWow64Process2.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=49716 Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/kernel32/tests/process.c | 15 +++++++++++++++ dlls/kernelbase/process.c | 11 ++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/dlls/kernel32/tests/process.c b/dlls/kernel32/tests/process.c index eaa5da2e95..3162ba3c53 100644 --- a/dlls/kernel32/tests/process.c +++ b/dlls/kernel32/tests/process.c @@ -2238,6 +2238,12 @@ static void test_IsWow64Process2(void) ok(machine == IMAGE_FILE_MACHINE_UNKNOWN, "got %#x\n", machine); ok(native_machine == expect_native, "got %#x\n", native_machine);
+ SetLastError(0xdeadbeef); + machine = 0xdead; + ret = pIsWow64Process2(pi.hProcess, &machine, NULL); + ok(ret, "IsWow64Process2 error %u\n", GetLastError()); + ok(machine == IMAGE_FILE_MACHINE_UNKNOWN, "got %#x\n", machine); + ret = TerminateProcess(pi.hProcess, 0); ok(ret, "TerminateProcess error\n");
@@ -2263,6 +2269,15 @@ static void test_IsWow64Process2(void) ok(machine == IMAGE_FILE_MACHINE_UNKNOWN, "got %#x\n", machine); ok(native_machine == expect_native, "got %#x\n", native_machine); } + + SetLastError(0xdeadbeef); + machine = 0xdead; + ret = pIsWow64Process2(GetCurrentProcess(), &machine, NULL); + ok(ret, "IsWow64Process2 error %u\n", GetLastError()); + if (is_wow64) + ok(machine == IMAGE_FILE_MACHINE_I386, "got %#x\n", machine); + else + ok(machine == IMAGE_FILE_MACHINE_UNKNOWN, "got %#x\n", machine); }
static void test_SystemInfo(void) diff --git a/dlls/kernelbase/process.c b/dlls/kernelbase/process.c index 936eed4d18..2b9b1c019e 100644 --- a/dlls/kernelbase/process.c +++ b/dlls/kernelbase/process.c @@ -899,8 +899,6 @@ BOOL WINAPI DECLSPEC_HOTPATCH IsWow64Process2( HANDLE process, USHORT *machine,
if (wow64) { - GetNativeSystemInfo( &si ); - if (process != GetCurrentProcess()) { #if defined(__i386__) || defined(__x86_64__) @@ -916,15 +914,22 @@ BOOL WINAPI DECLSPEC_HOTPATCH IsWow64Process2( HANDLE process, USHORT *machine, nt = RtlImageNtHeader( NtCurrentTeb()->Peb->ImageBaseAddress ); *machine = nt->FileHeader.Machine; } + + if (!native_machine) return TRUE; + + GetNativeSystemInfo( &si ); } else { + *machine = IMAGE_FILE_MACHINE_UNKNOWN; + + if (!native_machine) return TRUE; + #ifdef _WIN64 GetSystemInfo( &si ); #else GetNativeSystemInfo( &si ); #endif - *machine = IMAGE_FILE_MACHINE_UNKNOWN; }
switch (si.u.s.wProcessorArchitecture)