PspApplyJobLimitsToProcess
void __fastcall PspApplyJobLimitsToProcess(__int64 a1, __int16 a2){
_ETHREAD *CurrentThread;
__int64 v5;
__int64 v6;
unsigned int v7;
bool v8;
int v9;
v9 = 0;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v5 = *(_QWORD *)(a1 + 1296);
if( (a2 & 0x20) == 0 && (*(_DWORD *)(v5 + 848) & 0x20) != 0 )
{
v8 = *(_BYTE *)(a1 + 1850) == 2;
*(_BYTE *)(a1 + 1463) = *(_BYTE *)(v5 + 872);
PspSetProcessPriorityByClass(a1, v8);
}
if( (a2 & 0x10) == 0
&& (*(_DWORD *)(v5 + 848) & 0x10) != 0
&& (int)PspSetProcessAffinitySafe(a1, 1, (unsigned __int16 *)(v5 + 616), 0i64, &v9) >= 0
&& v9 )
{
PspWritePebAffinityInfo((__int64)CurrentThread, (struct _EX_RUNDOWN_REF *)a1);
}
if( (a2 & 0x100) == 0 )
{
PspLockJobMemoryLimitsShared(v5, (__int64)CurrentThread);
if( (*(_DWORD *)(v5 + 848) & 0x100) != 0 )
v6 = *(_QWORD *)(v5 + 808);
else
v6 = 0i64;
*(_QWORD *)(a1 + 1600) = v6;
PspUnlockJobMemoryLimitsShared(v5, (__int64)CurrentThread);
}
if( (a2 & 0x80u) == 0 && *(_BYTE *)(a1 + 1463) != 1 )
{
v7 = *(_DWORD *)(v5 + 852);
if( v7 >= 0xA )
v7 = *(_DWORD *)(v5 + 484);
if( PspUseJobSchedulingClasses )
KeSetQuantumProcess(a1, *((_BYTE *)PspJobSchedulingClasses + v7));
KeSetDisableQuantumProcess((_KPROCESS *)a1, v7 == 9);
}
}Referenced by:
PspApplyJobChainLimitsToProcess
PspSetJobLimitsProcessCallback