PspProcessRundownWorker

VOID __stdcall PspProcessRundownWorker(PVOID StartContext){
  void *v1; 
  __int64 NextProcess; 
  void *v3; 
  void *v4; 
  do
  {
    v1 = 0i64;
    _InterlockedExchange(&PspRundownNeededCount, 1);
    while( 1 )
    {
      NextProcess = PsGetNextProcess(v1);
      v3 = (void *)NextProcess;
      if( !NextProcess )
        break;
      if( _interlockedbittestandreset((volatile signed __int32 *)(NextProcess + 1120), 8u) )
      {
        PspRundownSingleProcess(NextProcess, 0);
        ObfDereferenceObjectWithTag(v3, 0x77537350ui64);
      }
      v1 = v3;
    }
    while( PspRundownProcessCache )
    {
      v4 = (void *)_InterlockedExchange64(&PspRundownProcessCache, 0i64);
      if( !v4 )
        break;
      PspRundownSingleProcess((ULONG_PTR)v4, 0);
      ObfDereferenceObjectWithTag(v4, 0x77537350ui64);
    }
  }
  while( _InterlockedCompareExchange(&PspRundownNeededCount, 0, 1) != 1 );
}

Referenced by:

No references.