PspGetNextChildJob

_EJOB *__stdcall PspGetNextChildJob(_EJOB *ParentJob, _EJOB *ChildJob){
  _ETHREAD *CurrentThread; 
  _EJOB *v5; 
  _EJOB *Flink; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v5 = 0i64;
  PspLockJobShared((__int64)ParentJob, (__int64)CurrentThread);
  if( ChildJob )
    Flink = (_EJOB *)ChildJob->SiblingJobLinks.Flink;
  else
    Flink = (_EJOB *)ParentJob->ChildJobListHead.Flink;
  while( Flink != (_EJOB *)&ParentJob->ChildJobListHead )
  {
    if( ObReferenceObjectSafeWithTag(&Flink[-1].DiskIoInfo.WriteOperationCount, 0x6E457350ui64) )
    {
      v5 = (_EJOB *)((char *)Flink - 1040);
      break;
    }
    Flink = *(_EJOB **)&Flink->Event.Header.Lock;
  }
  PspUnlockJob((__int64)ParentJob, (__int64)CurrentThread);
  if( ChildJob )
    ObfDereferenceObjectWithTag(ChildJob, 0x6E457350ui64);
  return v5;
}

Referenced by:

PspEnumJobsAndProcessesInJobHierarchy