Module: wine Branch: master Commit: 9b0a8f5f49f941d42ed08b1546c50203c0b07ad6 URL: https://source.winehq.org/git/wine.git/?a=commit;h=9b0a8f5f49f941d42ed08b154...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Apr 29 16:19:27 2021 +0200
kernelbase: Use RtlWow64GetProcessMachines() to get native system information.
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/kernelbase/memory.c | 13 +++++++--- dlls/kernelbase/process.c | 65 +---------------------------------------------- 2 files changed, 11 insertions(+), 67 deletions(-)
diff --git a/dlls/kernelbase/memory.c b/dlls/kernelbase/memory.c index fb5f5100399..4e03267cbb5 100644 --- a/dlls/kernelbase/memory.c +++ b/dlls/kernelbase/memory.c @@ -74,14 +74,21 @@ SIZE_T WINAPI GetLargePageMinimum(void) */ void WINAPI DECLSPEC_HOTPATCH GetNativeSystemInfo( SYSTEM_INFO *si ) { + USHORT current_machine, native_machine; + GetSystemInfo( si ); - if (!is_wow64) return; - switch (si->u.s.wProcessorArchitecture) + RtlWow64GetProcessMachines( GetCurrentProcess(), ¤t_machine, &native_machine ); + if (!current_machine) return; + switch (native_machine) { - case PROCESSOR_ARCHITECTURE_INTEL: + case PROCESSOR_ARCHITECTURE_AMD64: si->u.s.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64; si->dwProcessorType = PROCESSOR_AMD_X8664; break; + case PROCESSOR_ARCHITECTURE_ARM64: + si->u.s.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_ARM64; + si->dwProcessorType = 0; + break; default: FIXME( "Add the proper information for %d in wow64 mode\n", si->u.s.wProcessorArchitecture ); } diff --git a/dlls/kernelbase/process.c b/dlls/kernelbase/process.c index 2b0287432fb..ae91168ecf4 100644 --- a/dlls/kernelbase/process.c +++ b/dlls/kernelbase/process.c @@ -952,70 +952,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH IsProcessorFeaturePresent ( DWORD feature ) */ BOOL WINAPI DECLSPEC_HOTPATCH IsWow64Process2( HANDLE process, USHORT *machine, USHORT *native_machine ) { - BOOL wow64; - SYSTEM_INFO si; - - TRACE( "(%p,%p,%p)\n", process, machine, native_machine ); - - if (!IsWow64Process( process, &wow64 )) - return FALSE; - - if (wow64) - { - if (process != GetCurrentProcess()) - { -#if defined(__i386__) || defined(__x86_64__) - *machine = IMAGE_FILE_MACHINE_I386; -#else - FIXME("not implemented for other process\n"); - *machine = IMAGE_FILE_MACHINE_UNKNOWN; -#endif - } - else - { - IMAGE_NT_HEADERS *nt; - 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 - } - - switch (si.u.s.wProcessorArchitecture) - { - case PROCESSOR_ARCHITECTURE_INTEL: - *native_machine = IMAGE_FILE_MACHINE_I386; - break; - case PROCESSOR_ARCHITECTURE_ARM: - *native_machine = IMAGE_FILE_MACHINE_ARMNT; - break; - case PROCESSOR_ARCHITECTURE_AMD64: - *native_machine = IMAGE_FILE_MACHINE_AMD64; - break; - case PROCESSOR_ARCHITECTURE_ARM64: - *native_machine = IMAGE_FILE_MACHINE_ARM64; - break; - default: - FIXME("unknown architecture %u\n", si.u.s.wProcessorArchitecture); - *native_machine = IMAGE_FILE_MACHINE_UNKNOWN; - break; - } - - return TRUE; + return set_ntstatus( RtlWow64GetProcessMachines( process, machine, native_machine )); }