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