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..45ae98210b1 100644 --- a/dlls/wow64/syscall.c +++ b/dlls/wow64/syscall.c @@ -117,6 +117,7 @@ NTSTATUS (WINAPI *pBTCpuResetToConsistentState)( EXCEPTION_POINTERS * ) = NULL; void (WINAPI *pBTCpuUpdateProcessorInformation)( SYSTEM_CPU_INFORMATION * ) = NULL; void (WINAPI *pBTCpuProcessTerm)( HANDLE, BOOL, NTSTATUS ) = NULL; void (WINAPI *pBTCpuThreadTerm)( HANDLE, LONG ) = NULL; +void (WINAPI *pBTCpuNotifyProcessExecuteFlagsChange)(ULONG) = NULL; BOOL WINAPI DllMain( HINSTANCE inst, DWORD reason, void *reserved ) { @@ -1028,6 +1029,7 @@ static DWORD WINAPI process_init( RTL_RUN_ONCE *once, void *param, void **contex GET_PTR( BTCpuUpdateProcessorInformation ); GET_PTR( BTCpuProcessTerm ); GET_PTR( BTCpuThreadTerm ); + GET_PTR( BTCpuNotifyProcessExecuteFlagsChange ); GET_PTR( __wine_get_unix_opcode ); module = load_64bit_module( L"wow64win.dll" ); 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