PsTerminateMinimalProcess

NTSTATUS __stdcall PsTerminateMinimalProcess(ULONG_PTR BugCheckParameter1){
  int v1; 
  _ETHREAD *CurrentThread; 
  int v3; 
  _EPROCESS *v4; 
  unsigned int v5; 
  _EX_PUSH_LOCK *v6; 
  signed __int32 v7; 
  NTSTATUS result; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v3 = v1;
  v4 = *(_EPROCESS **)&BugCheckParameter1;
  v5 = 8;
  --CurrentThread->Tcb.KernelApcDisable;
  v6 = (_EX_PUSH_LOCK *)(*(_QWORD *)&BugCheckParameter1 + 1080i64);
  ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)(*(_QWORD *)&BugCheckParameter1 + 1080i64), 0i64);
  if( !v4->ActiveThreads )
  {
    v5 = 33554440;
    if( v4->ExitStatus == 259 )
      v4->ExitStatus = v3;
  }
  _m_prefetchw(&v4->1124);
  v7 = _InterlockedOr((volatile signed __int32 *)&v4->1124, v5);
  if( (_InterlockedExchangeAdd64(&v6->_bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock(v6);
  KeAbPostRelease(v6);
  KeLeaveCriticalRegionThread(&CurrentThread->Tcb);
  LOBYTE(result) = (v5 & 0x2000000) != 0;
  if( (((v7 & 0x2000000) == 0) & (unsigned __int8)result) != 0 )
    LOBYTE(result) = PspRundownSingleProcess(v4, 1u);
  return result;
}

Referenced by:

PspTeardownPartition
VmTerminateMemoryProcess