PspLockJobChain

VOID __stdcall PspLockJobChain(_EJOB *BaseJob, _ETHREAD *CurrentThread){
  INT64 v2; 
  char v5; 
  unsigned __int64 v6; 
  unsigned __int64 v7; 
  unsigned __int64 i; 

  if( CurrentThread )
    --CurrentThread->Tcb.SpecialApcDisable;
  v5 = v2 & 1;
  if( (v2 & 1) == 0 )
    PspLockJobAssignment((INT64)CurrentThread);
  v6 = *((_QWORD *)BaseJob + 138);
  if( v6 )
  {
    if( v6 > 1 )
    {
      ExAcquireResourceExclusiveLite(*((_QWORD *)BaseJob + 135) + 56i64, 1, v2);
      v7 = *((_QWORD *)BaseJob + 138);
      if( v7 > 2 )
      {
        for( i = v7 - 2; i; --i )
          ExAcquireResourceExclusiveLite(*(_QWORD *)(*((_QWORD *)BaseJob + 139) + 8 * i - 8) + 56i64, 1, v2);
      }
    }
    ExAcquireResourceExclusiveLite(*((_QWORD *)BaseJob + 134) + 56i64, 1, v2);
  }
  ExAcquireResourceExclusiveLite((UINT64)BaseJob + 56, 1, v2);
  if( !v5 )
    PspUnlockJobAssignment(CurrentThread);
}

Referenced by:

NtSetInformationJobObject
PspGetMemoryPartitionImplicit
PspImplicitAssignProcessToJob
PspLockJobsAndProcessExclusive