PspLockJobChain

void __fastcall PspLockJobChain(__int64 a1, __int64 a2, char a3){
  char v5; 
  unsigned __int64 v6; 
  unsigned __int64 v7; 
  unsigned __int64 i; 
  if( a2 )
    --*(_WORD *)(a2 + 486);
  v5 = a3 & 1;
  if( (a3 & 1) == 0 )
    PspLockJobAssignment(a2);
  v6 = *(_QWORD *)(a1 + 1104);
  if( v6 )
  {
    if( v6 > 1 )
    {
      ExAcquireResourceExclusiveLite((ERESOURCE *)(*(_QWORD *)(a1 + 1080) + 56i64), 1u);
      v7 = *(_QWORD *)(a1 + 1104);
      if( v7 > 2 )
      {
        for( i = v7 - 2; i; --i )
          ExAcquireResourceExclusiveLite((ERESOURCE *)(*(_QWORD *)(*(_QWORD *)(a1 + 1112) + 8 * i - 8) + 56i64), 1u);
      }
    }
    ExAcquireResourceExclusiveLite((ERESOURCE *)(*(_QWORD *)(a1 + 1072) + 56i64), 1u);
  }
  ExAcquireResourceExclusiveLite((ERESOURCE *)(a1 + 56), 1u);
  if( !v5 )
    PspUnlockJobAssignment(a2);
}

Referenced by:

NtSetInformationJobObject
PspGetMemoryPartitionImplicit
PspImplicitAssignProcessToJob
PspLockJobsAndProcessExclusive