PspWaitForUsermodeExit

INT64 __stdcall PspWaitForUsermodeExit(_EPROCESS *Process){
  _QWORD *i; 
  _QWORD *NextProcessThread; 
  void *v4; 
LABEL_1:
  for( i = 0i64; ; i = NextProcessThread )
  {
    NextProcessThread = PsGetNextProcessThread((__int64)Process, i);
    v4 = NextProcessThread;
    if( !NextProcessThread )
      break;
    if( (*((_DWORD *)NextProcessThread + 29) & 0x400) == 0 && !*((_BYTE *)NextProcessThread + 4) )
    {
      ObfReferenceObjectWithTag(NextProcessThread, 0x65547350u);
      PsQuitNextProcessThread(v4);
      KeWaitForSingleObject(v4, Executive, 0, 0, 0i64);
      ObfDereferenceObjectWithTag(v4, 0x65547350ui64);
      goto LABEL_1;
    }
  }
  return 0i64;
}

Referenced by:

PsShutdownSystem
PspShutdownCsrProcess
PspWaitOnAllProcessesJobCallback