PsWaitForAllProcesses
UINT8 __stdcall PsWaitForAllProcesses(){
unsigned int v0;
_LARGE_INTEGER v1;
_EPROCESS *i;
VOID *v3;
_EPROCESS *NextProcess;
_ETHREAD *v5;
NTSTATUS v7;
_LARGE_INTEGER v8;
v8.QuadPart = -100000i64;
v0 = 0;
v1.QuadPart = -100000i64;
while( 1 )
{
for( i = 0i64; ; i = (_EPROCESS *)v5 )
{
NextProcess = (_EPROCESS *)PsGetNextProcess(i);
v5 = (_ETHREAD *)NextProcess;
if( !NextProcess )
return 1;
if( (NextProcess->Flags3 & 0x1000) == 0
&& NextProcess != *(_EPROCESS **)&PsIdleProcess
&& (NextProcess->Flags & 4) != 0
&& !(unsigned int)SmIsCompressionProcess(NextProcess)
&& v5->DeboostList.Flink )
{
break;
}
}
ObfReferenceObjectWithTag(v3, 0x65547350ui64);
PsQuitNextProcessThread(v5);
v7 = KeWaitForSingleObject((UINT64)v5, 0, 0, 0, (INT64)&v8);
ObfDereferenceObjectWithTag(v5, 0x65547350ui64);
if( v7 == 258 )
{
v1.QuadPart *= 2i64;
++v0;
v8 = v1;
if( v0 > 0xD )
break;
}
}
return 0;
}Referenced by:
PopGracefulShutdown