PspEnumJobsAndProcessesInJobHierarchy
__int64 __fastcall PspEnumJobsAndProcessesInJobHierarchy(
PVOID Object,
__int64 (__fastcall *a2)(__int64, __int64),
unsigned int (__fastcall *a3)(__int64, __int64),
__int64 (__fastcall *a4)(_QWORD *, __int64),
__int64 a5,
int a6){
char v6;
char v8;
int v9;
_EJOB *v10;
_EJOB *NextChildJob;
_LIST_ENTRY *i;
_EJOB *ParentJob;
_ETHREAD *CurrentThread;
__int64(__fastcall *v16)(__int64, __int64);
unsigned int(__fastcall *v17)(__int64, __int64);
__int64(__fastcall *v18)(_QWORD *, __int64);
v18 = a4;
v17 = a3;
v16 = a2;
v6 = a6;
if( (a6 & 8) != 0 )
v8 = a6 | 1;
else
v8 = a6 & 0xFE;
v9 = 0;
v10 = (_EJOB *)Object;
if( (a6 & 8) != 0 )
v6 = a6 | 1;
while( 1 )
{
if( (v6 & 2) == 0 )
{
v9 = PspCallJobHierarchyCallbacks((__int64)v10, a2, a3, a4, a5, v6);
if( v9 < 0 )
goto LABEL_17;
v6 = v8;
}
NextChildJob = 0i64;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
PspLockJobShared((__int64)v10, (__int64)CurrentThread);
for( i = v10->ChildJobListHead.Flink; i != &v10->ChildJobListHead; i = i->Flink )
{
if( ObReferenceObjectSafeWithTag(&i[-65], 0x6E457350ui64) )
{
NextChildJob = (_EJOB *)&i[-65];
break;
}
}
PspUnlockJob((__int64)v10, (__int64)CurrentThread);
if( !NextChildJob )
{
ParentJob = v10->ParentJob;
if( v10 != Object )
{
while( 1 )
{
if( (v6 & 2) != 0 )
{
v9 = PspCallJobHierarchyCallbacks((__int64)v10, v16, v17, v18, a5, v8);
if( v9 < 0 )
goto LABEL_17;
}
NextChildJob = PspGetNextChildJob(ParentJob, v10);
if( !NextChildJob )
{
v10 = ParentJob;
ParentJob = ParentJob->ParentJob;
if( v10 != Object )
continue;
}
break;
}
}
}
v10 = NextChildJob;
if( !NextChildJob )
break;
a4 = v18;
a3 = v17;
a2 = v16;
}
if( (v6 & 2) == 0 )
return(unsigned int)v9;
v9 = PspCallJobHierarchyCallbacks((__int64)Object, v16, v17, v18, a5, v6);
LABEL_17:
if( v10 )
{
while( v10 != Object )
{
ObfDereferenceObjectWithTag(v10, 0x6E457350ui64);
v10 = v10->ParentJob;
}
}
return(unsigned int)v9;
}Referenced by:
NtSetInformationJobObject
PspAddSchedulingGroupToJobChain
PspAllocateAndQueryNotificationChannel
PspDoesJobHierarchyPermitUILimits
PspEnforceLimits
PspEnumProcessesInJobHierarchy
PspEstablishJobHierarchy
PspFreezeJobTree
PspIsSetJobIoAttribution
PspQueryJobHierarchyAccountingInformation
PspQueryJobHierarchyInterferenceCount
PspQueryJobHierarchyProcessIdList
PspRemoveIoAttribution
PspSendNoWakeChargeLimitNotification
PspSetBackgroundJobTree
PspSetEnergyTrackingStateJobTree
PspSetJobIoAttribution
PspSetJobRateControl
PspTerminateAllProcessesInJobHierarchy
PspTerminateSiloSubsystemProcesses