Module: wine Branch: master Commit: 6928a14d9800fd8dce35ab9ff5873617713558b1 URL: https://gitlab.winehq.org/wine/wine/-/commit/6928a14d9800fd8dce35ab9ff587361...
Author: Alexandre Julliard julliard@winehq.org Date: Tue Jul 9 12:20:05 2024 +0200
ntdll: Support the ARM64EC work list in RtlOpenCrossProcessEmulatorWorkConnection.
---
dlls/ntdll/process.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-)
diff --git a/dlls/ntdll/process.c b/dlls/ntdll/process.c index 16bc445b7f9..8906e254cc0 100644 --- a/dlls/ntdll/process.c +++ b/dlls/ntdll/process.c @@ -314,17 +314,30 @@ void WINAPI RtlOpenCrossProcessEmulatorWorkConnection( HANDLE process, HANDLE *s { WOW64INFO wow64info; BOOLEAN is_wow64; + HANDLE handle = 0; SIZE_T size = 0;
*addr = NULL; *section = 0;
+ if (RtlIsCurrentProcess( process )) return; if (RtlWow64GetSharedInfoProcess( process, &is_wow64, &wow64info )) return; - if (!is_wow64) return; - if (!wow64info.SectionHandle) return;
- if (NtDuplicateObject( process, (HANDLE)(ULONG_PTR)wow64info.SectionHandle, - GetCurrentProcess(), section, 0, 0, DUPLICATE_SAME_ACCESS )) + if (is_wow64) handle = (HANDLE)(ULONG_PTR)wow64info.SectionHandle; +#if defined __aarch64__ || defined __arm64ec__ + else + { + PROCESS_BASIC_INFORMATION basic; + struct arm64ec_shared_info info; + + if (!NtQueryInformationProcess( process, ProcessBasicInformation, &basic, sizeof(basic), NULL ) && + !NtReadVirtualMemory( process, (PEB *)basic.PebBaseAddress + 1, &info, sizeof(info), NULL )) + handle = info.SectionHandle; + } +#endif + + if (!handle) return; + if (NtDuplicateObject( process, handle, GetCurrentProcess(), section, 0, 0, DUPLICATE_SAME_ACCESS )) return;
if (!NtMapViewOfSection( *section, GetCurrentProcess(), addr, 0, 0, NULL,