PspTerminateThreadByPointer

__int64 __fastcall PspTerminateThreadByPointer(ULONG_PTR a1, int a2, char a3){
  __int64 v4; 
  _EJOB *ProcessServerSilo; 
  INT64 ExitStatus; 
  v4 = *(_QWORD *)(a1 + 544);
  if( (*(_DWORD *)(a1 + 1296) & 0x20) != 0 && (*(_DWORD *)(v4 + 1124) & 0x40000008) == 0 )
  {
    ProcessServerSilo = (_EJOB *)PsGetProcessServerSilo(v4);
    LODWORD(ExitStatus) = a2;
    PspCatchCriticalBreak(
      (INT8 *)"Terminating critical thread 0x%p(in %s)\n",
      (PVOID)a1,
      (UINT8 *)(v4 + 1448),
      ProcessServerSilo,
      ExitStatus);
  }
  if( a3 && (struct _KTHREAD *)a1 == KeGetCurrentThread() )
  {
    _InterlockedOr((volatile signed __int32 *)(a1 + 1296), 1u);
    PspExitThread((unsigned int)a2);
    __debugbreak();
  }
  if( (*(_DWORD *)(a1 + 116) & 0x400) != 0 )
    return 3221225506i64;
  if( (*(_DWORD *)(v4 + 2172) & 1) != 0 )
    return 3221225659i64;
  if( !_interlockedbittestandset((volatile signed __int32 *)(a1 + 1296), 0) )
    *(_DWORD *)(a1 + 1352) = a2;
  KeRequestTerminationThread((_ETHREAD *)a1);
  return 0i64;
}

Referenced by:

NtTerminateProcess
NtTerminateThread
PsDispatchIumService
PsTerminateSystemThread
PspSystemThreadStartup
PspTerminateAllThreads
PspUserThreadStartup