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