[NTDLL:LDR] Don't hardcode process-execute flag values. (#4111)

This commit is contained in:
Hermès Bélusca-Maïto 2021-11-16 00:34:39 +01:00
parent 0889182d66
commit 4dd734e92c
No known key found for this signature in database
GPG key ID: 3B2539C65E7B93D0

View file

@ -2427,21 +2427,26 @@ LdrpInitializeProcess(IN PCONTEXT Context,
/* Validate the Image for MP Usage */
if (LdrpNumberOfProcessors > 1) LdrpValidateImageForMp(LdrpImageEntry);
/* Check NX Options */
if (SharedUserData->NXSupportPolicy == 1)
/* Check NX options and set them */
if (SharedUserData->NXSupportPolicy == NX_SUPPORT_POLICY_ALWAYSON)
{
ExecuteOptions = 0xD;
ExecuteOptions = MEM_EXECUTE_OPTION_DISABLE |
MEM_EXECUTE_OPTION_DISABLE_THUNK_EMULATION |
MEM_EXECUTE_OPTION_PERMANENT;
}
else if (!SharedUserData->NXSupportPolicy)
else if (SharedUserData->NXSupportPolicy == NX_SUPPORT_POLICY_ALWAYSOFF)
{
ExecuteOptions = 0xA;
ExecuteOptions = MEM_EXECUTE_OPTION_ENABLE | MEM_EXECUTE_OPTION_PERMANENT;
}
Status = NtSetInformationProcess(NtCurrentProcess(),
ProcessExecuteFlags,
&ExecuteOptions,
sizeof(ExecuteOptions));
if (!NT_SUCCESS(Status))
{
DPRINT1("LDR: Could not set process execute flags 0x%x; status %x\n",
ExecuteOptions, Status);
}
/* Let Mm know */
ZwSetInformationProcess(NtCurrentProcess(),
ProcessExecuteFlags,
&ExecuteOptions,
sizeof(ULONG));
// FIXME: Should be done by Application Compatibility features,
// by reading the registry, etc...