ntdll: Add ProcessExecuteFlags handling to NtQueryInformationProcess.
This commit is contained in:
parent
a0509811a5
commit
7aa1f6c346
|
@ -37,6 +37,8 @@
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(ntdll);
|
WINE_DEFAULT_DEBUG_CHANNEL(ntdll);
|
||||||
|
|
||||||
|
static ULONG execute_flags = MEM_EXECUTE_OPTION_ENABLE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Process object
|
* Process object
|
||||||
*/
|
*/
|
||||||
|
@ -347,6 +349,14 @@ NTSTATUS WINAPI NtQueryInformationProcess(
|
||||||
}
|
}
|
||||||
SERVER_END_REQ;
|
SERVER_END_REQ;
|
||||||
break;
|
break;
|
||||||
|
case ProcessExecuteFlags:
|
||||||
|
if (ProcessInformationLength == sizeof(ULONG))
|
||||||
|
{
|
||||||
|
*(ULONG *)ProcessInformation = execute_flags;
|
||||||
|
len = sizeof(ULONG);
|
||||||
|
}
|
||||||
|
else ret = STATUS_INFO_LENGTH_MISMATCH;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
FIXME("(%p,info_class=%d,%p,0x%08x,%p) Unknown information class\n",
|
FIXME("(%p,info_class=%d,%p,0x%08x,%p) Unknown information class\n",
|
||||||
ProcessHandle,ProcessInformationClass,
|
ProcessHandle,ProcessInformationClass,
|
||||||
|
@ -424,6 +434,7 @@ NTSTATUS WINAPI NtSetInformationProcess(
|
||||||
default:
|
default:
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
execute_flags = *(ULONG *)ProcessInformation;
|
||||||
VIRTUAL_SetForceExec( enable );
|
VIRTUAL_SetForceExec( enable );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1053,6 +1053,10 @@ static void test_dpe_exceptions(void)
|
||||||
info.exception_caught = FALSE;
|
info.exception_caught = FALSE;
|
||||||
run_exception_test(dpe_exception_handler, &info, single_ret, sizeof(single_ret), PAGE_NOACCESS);
|
run_exception_test(dpe_exception_handler, &info, single_ret, sizeof(single_ret), PAGE_NOACCESS);
|
||||||
ok(info.exception_caught == TRUE, "Execution of disabled memory suceeded\n");
|
ok(info.exception_caught == TRUE, "Execution of disabled memory suceeded\n");
|
||||||
|
if(has_hw_support)
|
||||||
|
todo_wine ok(info.exception_info == EXCEPTION_READ_FAULT,
|
||||||
|
"Access violation type: %08x\n", (unsigned)info.exception_info);
|
||||||
|
else
|
||||||
ok(info.exception_info == EXCEPTION_READ_FAULT,
|
ok(info.exception_info == EXCEPTION_READ_FAULT,
|
||||||
"Access violation type: %08x\n", (unsigned)info.exception_info);
|
"Access violation type: %08x\n", (unsigned)info.exception_info);
|
||||||
}
|
}
|
||||||
|
@ -1070,12 +1074,12 @@ static void test_dpe_exceptions(void)
|
||||||
/* Try to turn off DEP */
|
/* Try to turn off DEP */
|
||||||
val = MEM_EXECUTE_OPTION_ENABLE;
|
val = MEM_EXECUTE_OPTION_ENABLE;
|
||||||
stat = pNtSetInformationProcess(GetCurrentProcess(), ProcessExecuteFlags, &val, sizeof val);
|
stat = pNtSetInformationProcess(GetCurrentProcess(), ProcessExecuteFlags, &val, sizeof val);
|
||||||
ok(stat == STATUS_ACCESS_DENIED, "disabling DEP while permanent: status %08x\n", stat);
|
todo_wine ok(stat == STATUS_ACCESS_DENIED, "disabling DEP while permanent: status %08x\n", stat);
|
||||||
|
|
||||||
/* Try to turn on DEP */
|
/* Try to turn on DEP */
|
||||||
val = MEM_EXECUTE_OPTION_DISABLE;
|
val = MEM_EXECUTE_OPTION_DISABLE;
|
||||||
stat = pNtSetInformationProcess(GetCurrentProcess(), ProcessExecuteFlags, &val, sizeof val);
|
stat = pNtSetInformationProcess(GetCurrentProcess(), ProcessExecuteFlags, &val, sizeof val);
|
||||||
ok(stat == STATUS_ACCESS_DENIED, "enabling DEP while permanent: status %08x\n", stat);
|
todo_wine ok(stat == STATUS_ACCESS_DENIED, "enabling DEP while permanent: status %08x\n", stat);
|
||||||
}
|
}
|
||||||
|
|
||||||
#elif defined(__x86_64__)
|
#elif defined(__x86_64__)
|
||||||
|
|
Loading…
Reference in New Issue