PspWaitForUsermodeExit
NTSTATUS __stdcall PspWaitForUsermodeExit(_EPROCESS *Process){
_ETHREAD *i;
_LIST_ENTRY **NextProcessThread;
_ETHREAD *v4;
LABEL_1:
for( i = 0i64; ; i = (_ETHREAD *)NextProcessThread )
{
NextProcessThread = PsGetNextProcessThread(Process, i);
v4 = (_ETHREAD *)NextProcessThread;
if( !NextProcessThread )
break;
if( (*((_DWORD *)NextProcessThread + 29) & 0x400) == 0 && !*((_BYTE *)NextProcessThread + 4) )
{
ObfReferenceObjectWithTag(NextProcessThread, 0x65547350ui64);
PsQuitNextProcessThread(v4);
KeWaitForSingleObject((UINT64)v4, 0, 0, 0, 0i64);
ObfDereferenceObjectWithTag(v4, 0x65547350ui64);
goto LABEL_1;
}
}
return 0;
}Referenced by:
PsShutdownSystem
PspShutdownCsrProcess
PspWaitOnAllProcessesJobCallback