PsWaitForAllProcesses
INT64 __fastcall PsWaitForAllProcesses(){
unsigned int v0;
union _LARGE_INTEGER v1;
void *i;
void *v3;
_DWORD *NextProcess;
_QWORD *v5;
INT64 result;
NTSTATUS v7;
union _LARGE_INTEGER Timeout;
Timeout.QuadPart = -100000i64;
v0 = 0;
v1.QuadPart = -100000i64;
while( 1 )
{
for( i = 0i64; ; i = v5 )
{
NextProcess = (_DWORD *)PsGetNextProcess(i);
v5 = NextProcess;
if( !NextProcess )
return 1i64;
if( (NextProcess[543] & 0x1000) == 0
&& NextProcess != PsIdleProcess
&& (NextProcess[281] & 4) != 0
&& !SmIsCompressionProcess(NextProcess)
&& v5[174] )
{
break;
}
}
ObfReferenceObjectWithTag(v3, 0x65547350u);
PsQuitNextProcessThread(v5);
v7 = KeWaitForSingleObject(v5, Executive, 0, 0, &Timeout);
LODWORD(result) = ObfDereferenceObjectWithTag(v5, 0x65547350ui64);
if( v7 == 258 )
{
v1.QuadPart *= 2i64;
++v0;
Timeout = v1;
if( v0 > 0xD )
break;
}
}
LOBYTE(result) = 0;
return result;
}Referenced by:
PopGracefulShutdown