PspUnlockJobChain

void __fastcall PspUnlockJobChain(__int64 a1, __int64 a2, char a3){
  unsigned __int64 v3; 
  unsigned __int64 v7; 
  v3 = *(_QWORD *)(a1 + 1104);
  if( v3 > 1 )
  {
    ExReleaseResourceLite((PERESOURCE)(*(_QWORD *)(a1 + 1080) + 56i64));
    v3 = *(_QWORD *)(a1 + 1104);
  }
  if( v3 > 2 )
  {
    v7 = v3 - 2;
    do
      ExReleaseResourceLite((PERESOURCE)(*(_QWORD *)(*(_QWORD *)(a1 + 1112) + 8 * v7-- - 8) + 56i64));
    while( v7 );
    v3 = *(_QWORD *)(a1 + 1104);
  }
  if( v3 )
    ExReleaseResourceLite((PERESOURCE)(*(_QWORD *)(a1 + 1072) + 56i64));
  if( (a3 & 1) == 0 )
  {
    ExReleaseResourceLite((PERESOURCE)(a1 + 56));
    if( a2 )
      KiLeaveGuardedRegionUnsafe(a2);
  }
}

Referenced by:

NtSetInformationJobObject
PspGetMemoryPartitionImplicit
PspImplicitAssignProcessToJob
PspUnlockJobsAndProcessExclusive