PspTerminateThreadByPointer

NTSTATUS __stdcall PspTerminateThreadByPointer(PVOID Thread, UINT64 ExitStatus, UINT8 DirectTerminate){
  INT64 v4; 
  unsigned int v5; 
  _EJOB *v8; 
  INT64 ExitStatusa; 

  v4 = *((_QWORD *)Thread + 68);
  v5 = ExitStatus;
  if( (*((_DWORD *)Thread + 324) & 0x20) != 0 && (*(_DWORD *)(v4 + 1124) & 0x40000008) == 0 )
  {
    LODWORD(v8) = PsGetProcessServerSilo(v4);
    LODWORD(ExitStatusa) = v5;
    PspCatchCriticalBreak(
      (INT8 *)"Terminating critical thread 0x%p(in %s)\n",
      Thread,
      (UINT8 *)(v4 + 1448),
      v8,
      ExitStatusa);
  }
  if( DirectTerminate && Thread == KeGetCurrentThread() )
  {
    _InterlockedOr((volatile signed __int32 *)Thread + 324, 1u);
    PspExitThread(v5);
    __debugbreak();
  }
  if( (*((_DWORD *)Thread + 29) & 0x400) != 0 )
    return -1073741790;
  if( (*(_DWORD *)(v4 + 2172) & 1) != 0 )
    return -1073741637;
  if( !_interlockedbittestandset((volatile signed __int32 *)Thread + 324, 0) )
    *((_DWORD *)Thread + 338) = v5;
  KeRequestTerminationThread((_KTHREAD *)Thread);
  return 0;
}

Referenced by:

NtTerminateProcess
NtTerminateThread
PsDispatchIumService
PsTerminateSystemThread
PspSystemThreadStartup
PspTerminateAllThreads
PspUserThreadStartup