Alexandre Julliard : kernelbase: Use RtlWow64GetProcessMachines() to get native system information.
Alexandre Julliard
julliard at winehq.org
Thu Apr 29 16:38:30 CDT 2021
Module: wine
Branch: master
Commit: 9b0a8f5f49f941d42ed08b1546c50203c0b07ad6
URL: https://source.winehq.org/git/wine.git/?a=commit;h=9b0a8f5f49f941d42ed08b1546c50203c0b07ad6
Author: Alexandre Julliard <julliard at 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 at 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 ));
}
More information about the wine-cvs
mailing list