PspProcessRundownWorker

VOID __stdcall PspProcessRundownWorker(VOID *StartContext){
  _EPROCESS *v1; 
  _EPROCESS *NextProcess; 
  _EPROCESS *v3; 
  _EPROCESS *v4; 

  do
  {
    v1 = 0i64;
    _InterlockedExchange(&PspRundownNeededCount, 1);
    while( 1 )
    {
      NextProcess = (_EPROCESS *)PsGetNextProcess(v1);
      v3 = NextProcess;
      if( !NextProcess )
        break;
      if( _interlockedbittestandreset((volatile signed __int32 *)&NextProcess->1120, 8u) )
      {
        PspRundownSingleProcess(NextProcess, 0);
        ObfDereferenceObjectWithTag(v3, 0x77537350ui64);
      }
      v1 = v3;
    }
    while( PspRundownProcessCache )
    {
      v4 = (_EPROCESS *)_InterlockedExchange64(&PspRundownProcessCache, 0i64);
      if( !v4 )
        break;
      PspRundownSingleProcess(v4, 0);
      ObfDereferenceObjectWithTag(v4, 0x77537350ui64);
    }
  }
  while( _InterlockedCompareExchange(&PspRundownNeededCount, 0, 1) != 1 );
}

Referenced by:

No references.