PspApplyJobLimitsToProcess
VOID __stdcall PspApplyJobLimitsToProcess(_EPROCESS *Process, UINT64 LimitFlagsFilter){
__int16 v2;
_ETHREAD *CurrentThread;
_EJOB *volatile Job;
unsigned __int64 v6;
unsigned int v7;
bool v8;
UINT64 AffinitySet;
LODWORD(AffinitySet) = 0;
v2 = LimitFlagsFilter;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
Job = Process->Job;
if( (LimitFlagsFilter & 0x20) == 0 && (*((_DWORD *)Job + 212) & 0x20) != 0 )
{
v8 = Process->Vm.Instance.Flags.MemoryPriority == 2;
Process->PriorityClass = *((_BYTE *)Job + 872);
PspSetProcessPriorityByClass(&Process->Pcb, (PSPROCESSPRIORITYMODE)v8);
}
if( (v2 & 0x10) == 0
&& (*((_DWORD *)Job + 212) & 0x10) != 0
&& PspSetProcessAffinitySafe(Process, 1ui64, (_KAFFINITY_EX *)((char *)Job + 616), 0i64, &AffinitySet) >= 0
&& (_DWORD)AffinitySet )
{
PspWritePebAffinityInfo(CurrentThread, (_EX_RUNDOWN_REF *)Process);
}
if( (v2 & 0x100) == 0 )
{
PspLockJobMemoryLimitsShared(Job, CurrentThread);
if( (*((_DWORD *)Job + 212) & 0x100) != 0 )
v6 = *((_QWORD *)Job + 101);
else
v6 = 0i64;
Process->CommitChargeLimit = v6;
PspUnlockJobMemoryLimitsShared(Job, CurrentThread);
}
if( (v2 & 0x80u) == 0 && Process->PriorityClass != 1 )
{
v7 = *((_DWORD *)Job + 213);
if( v7 >= 0xA )
v7 = *((_DWORD *)Job + 121);
if( PspUseJobSchedulingClasses )
KeSetQuantumProcess(&Process->Pcb, *((_BYTE *)PspJobSchedulingClasses + v7));
KeSetDisableQuantumProcess(Process, v7 == 9);
}
}Referenced by:
PspApplyJobChainLimitsToProcess
PspSetJobLimitsProcessCallback