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