PsGetNextProcess

_LIST_ENTRY *__fastcall PsGetNextProcess(_EPROCESS *Process){
  _ETHREAD *CurrentThread; 
  __int64 *v2; 
  int v3; 
  __int64 *Flink; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v2 = 0i64;
  v3 = 0;
  --CurrentThread->Tcb.SpecialApcDisable;
  ExAcquirePushLockSharedEx((_EX_PUSH_LOCK *)&PspActiveProcessLock, 0i64);
  Flink = (__int64 *)PsActiveProcessHead;
  if( Process )
    Flink = (__int64 *)Process->ActiveProcessLinks.Flink;
  while( Flink != &PsActiveProcessHead )
  {
    v2 = Flink - 137;
    if( ObReferenceObjectSafeWithTag((INT64)(Flink - 137), 1850045264i64) )
    {
      v3 = 1;
      break;
    }
    Flink = (__int64 *)*Flink;
  }
  PspUnlockProcessListShared(CurrentThread);
  if( Process )
    ObfDereferenceObjectWithTag(Process, 0x6E457350ui64);
  return(_LIST_ENTRY *)((unsigned __int64)v2 & -(__int64)(v3 != 0));
}

Referenced by:

DbgkpCloseObject
EtwQueryPerformanceTraceInformation
EtwpCoverageSamplerStop
EtwpLogMemInfoWs
ExGetNextProcess
ExpDebuggerWorker
IopQueryProcessIdsUsingFile
MiEmptyAccessLogs
MiHotPatchAllProcesses
MiLogHotPatchRundown
MiScrubProcesses
NtGetNextProcess
PfpRpControlRequestReset
PnpHandleEnumerateHandlesAgainstDeviceObject
PopEtInit
PsEnumProcesses
PsGetNextProcessEx
PsShutdownSystem
PsUpdateActiveProcessAffinity
PsWaitForAllProcesses
PspProcessRundownWorker