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