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.