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