ntdll: Add ProcessExecuteFlags handling to NtQueryInformationProcess.

This commit is contained in:
Michael Karcher 2009-08-18 01:20:52 +02:00 committed by Alexandre Julliard
parent a0509811a5
commit 7aa1f6c346
2 changed files with 18 additions and 3 deletions

View File

@ -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;

View File

@ -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__)