PspCallJobHierarchyCallbacks
NTSTATUS __stdcall PspCallJobHierarchyCallbacks(
_EJOB *Job,
INT64 *JobPreCallback,
_EJOB *a3,
VOID *a4,
INT64 *JobPostCallback,
_EJOB *a6,
VOID *a7,
INT64 *ProcessCallback,
_EPROCESS *a9,
VOID *a10,
VOID *Context,
UINT64 Flags){
_ETHREAD *CurrentThread;
NTSTATUS v13;
_EJOB *v15;
NTSTATUS v18;
_EJOB *i;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v13 = 0;
v15 = a3;
v18 = 0;
if( !JobPreCallback && !a4 )
goto LABEL_14;
if( ((unsigned __int8)a6 & 1) == 0 )
{
if( ((unsigned __int8)a6 & 4) != 0 )
PspLockJobExclusive(Job, CurrentThread);
else
PspLockJobShared(Job, CurrentThread);
}
if( !JobPreCallback
|| (v18 = ((__int64(__fastcall *)(_EJOB *, INT64 *))JobPreCallback)(Job, JobPostCallback), v18 >= 0) )
{
if( a4 )
{
for( i = (_EJOB *)*((_QWORD *)Job + 5); i != (_EJOB *)((char *)Job + 40); i = *(_EJOB **)i )
{
v18 = ((__int64(__fastcall *)(char *, INT64 *))a4)((char *)i - 1480, JobPostCallback);
if( v18 < 0 )
break;
}
v15 = a3;
}
}
if( ((unsigned __int8)a6 & 1) == 0 )
PspUnlockJob(Job, CurrentThread);
if( v18 < 0 )
{
if( v18 != -1073741536 )
return v18;
return v13;
}
else
{
LABEL_14:
if( v15 )
return((__int64(__fastcall *)(_EJOB *, INT64 *))v15)(Job, JobPostCallback);
}
return v18;
}Referenced by:
PspEnumJobsAndProcessesInJobHierarchy