[PATCH v5 0/1] MR11253: wow64: Add BTCpuNotifyProcessExecuteFlagsChange interface
Fixes games that toggle DEP at runtime. Like Bioshock. @julliard for visibility since they seem to be in this area a lot. -- v5: wow64: Add BTCpuNotifyProcessExecuteFlagsChange interface https://gitlab.winehq.org/wine/wine/-/merge_requests/11253
From: Ryan Houdek <Sonicadvance1@gmail.com> Fixes games that toggle DEP at runtime. Like Bioshock. --- dlls/wow64/process.c | 7 ++++++- dlls/wow64/syscall.c | 2 ++ dlls/wow64/wow64_private.h | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/dlls/wow64/process.c b/dlls/wow64/process.c index 625b0eaff75..98d1c600dd9 100644 --- a/dlls/wow64/process.c +++ b/dlls/wow64/process.c @@ -927,13 +927,18 @@ NTSTATUS WINAPI wow64_NtSetInformationProcess( UINT *args ) case ProcessPriorityClass: /* PROCESS_PRIORITY_CLASS */ case ProcessBasePriority: /* ULONG */ case ProcessPriorityBoost: /* ULONG */ - case ProcessExecuteFlags: /* ULONG */ case ProcessPagePriority: /* MEMORY_PRIORITY_INFORMATION */ case ProcessPowerThrottlingState: /* PROCESS_POWER_THROTTLING_STATE */ case ProcessLeapSecondInformation: /* PROCESS_LEAP_SECOND_INFO */ case ProcessWineGrantAdminToken: /* NULL */ return NtSetInformationProcess( handle, class, ptr, len ); + case ProcessExecuteFlags: /* ULONG */ + status = NtSetInformationProcess( handle, class, ptr, len ); + if (!status && pBTCpuNotifyProcessExecuteFlagsChange) + pBTCpuNotifyProcessExecuteFlagsChange(*(ULONG *)ptr); + return status; + case ProcessAccessToken: /* PROCESS_ACCESS_TOKEN */ if (len == sizeof(PROCESS_ACCESS_TOKEN32)) { diff --git a/dlls/wow64/syscall.c b/dlls/wow64/syscall.c index d52c52fef8e..4ab656656a0 100644 --- a/dlls/wow64/syscall.c +++ b/dlls/wow64/syscall.c @@ -103,6 +103,7 @@ static NTSTATUS (WINAPI *pBTCpuSetContext)(HANDLE,HANDLE,void *,void *); static void (WINAPI *pBTCpuThreadInit)(void); static void (WINAPI *pBTCpuSimulate)(void) __attribute__((used)); static void * (WINAPI *p__wine_get_unix_opcode)(void); +static void (WINAPI *pBTCpuNotifyProcessExecuteFlagsChange)(ULONG); static void * (WINAPI *pKiRaiseUserExceptionDispatcher)(void); void (WINAPI *pBTCpuFlushInstructionCache2)( const void *, SIZE_T ) = NULL; void (WINAPI *pBTCpuFlushInstructionCacheHeavy)( const void *, SIZE_T ) = NULL; @@ -1029,6 +1030,7 @@ static DWORD WINAPI process_init( RTL_RUN_ONCE *once, void *param, void **contex GET_PTR( BTCpuProcessTerm ); GET_PTR( BTCpuThreadTerm ); GET_PTR( __wine_get_unix_opcode ); + GET_PTR( BTCpuNotifyProcessExecuteFlagsChange ); module = load_64bit_module( L"wow64win.dll" ); GET_PTR( sdwhwin32 ); diff --git a/dlls/wow64/wow64_private.h b/dlls/wow64/wow64_private.h index 2ac3e51f1f0..b53493c534f 100644 --- a/dlls/wow64/wow64_private.h +++ b/dlls/wow64/wow64_private.h @@ -51,6 +51,7 @@ extern void (WINAPI *pBTCpuNotifyUnmapViewOfSection)( void *, BOOL, NTSTATUS extern void (WINAPI *pBTCpuUpdateProcessorInformation)( SYSTEM_CPU_INFORMATION * ); extern void (WINAPI *pBTCpuProcessTerm)( HANDLE, BOOL, NTSTATUS ); extern void (WINAPI *pBTCpuThreadTerm)( HANDLE, LONG ); +extern void (WINAPI *pBTCpuNotifyProcessExecuteFlagsChange)(ULONG); struct object_attr64 { -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/11253
participants (2)
-
Ryan Houdek -
Ryan Houdek (@sonicadvance1)