Brendan Shanks : ntdll: Allow changes to DEP flags under Wow64.
Alexandre Julliard
julliard at winehq.org
Mon Jul 25 16:19:29 CDT 2022
Module: wine
Branch: master
Commit: ce5fe931e138b880aa110143d840cf13143066ba
URL: https://gitlab.winehq.org/wine/wine/-/commit/ce5fe931e138b880aa110143d840cf13143066ba
Author: Brendan Shanks <bshanks at codeweavers.com>
Date: Thu Jul 21 11:03:18 2022 -0700
ntdll: Allow changes to DEP flags under Wow64.
---
dlls/ntdll/unix/process.c | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/dlls/ntdll/unix/process.c b/dlls/ntdll/unix/process.c
index 078ad75099d..83888717a5c 100644
--- a/dlls/ntdll/unix/process.c
+++ b/dlls/ntdll/unix/process.c
@@ -73,9 +73,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(process);
-static ULONG execute_flags = MEM_EXECUTE_OPTION_DISABLE | (sizeof(void *) > sizeof(int) ?
- MEM_EXECUTE_OPTION_DISABLE_THUNK_EMULATION |
- MEM_EXECUTE_OPTION_PERMANENT : 0);
+static ULONG execute_flags = MEM_EXECUTE_OPTION_DISABLE;
static UINT process_error_mode;
@@ -1434,8 +1432,14 @@ NTSTATUS WINAPI NtQueryInformationProcess( HANDLE handle, PROCESSINFOCLASS class
case ProcessExecuteFlags:
len = sizeof(ULONG);
- if (size == len) *(ULONG *)info = execute_flags;
- else ret = STATUS_INFO_LENGTH_MISMATCH;
+ if (size != len)
+ ret = STATUS_INFO_LENGTH_MISMATCH;
+ else if (is_win64 && !NtCurrentTeb()->WowTebOffset)
+ *(ULONG *)info = MEM_EXECUTE_OPTION_DISABLE |
+ MEM_EXECUTE_OPTION_DISABLE_THUNK_EMULATION |
+ MEM_EXECUTE_OPTION_PERMANENT;
+ else
+ *(ULONG *)info = execute_flags;
break;
case ProcessPriorityClass:
@@ -1560,7 +1564,7 @@ NTSTATUS WINAPI NtSetInformationProcess( HANDLE handle, PROCESSINFOCLASS class,
break;
case ProcessExecuteFlags:
- if (is_win64 || size != sizeof(ULONG)) return STATUS_INVALID_PARAMETER;
+ if ((is_win64 && !NtCurrentTeb()->WowTebOffset) || size != sizeof(ULONG)) return STATUS_INVALID_PARAMETER;
if (execute_flags & MEM_EXECUTE_OPTION_PERMANENT) return STATUS_ACCESS_DENIED;
else
{
More information about the wine-cvs
mailing list