NtTerminateThread

NTSTATUS __stdcall NtTerminateThread(VOID *ThreadHandle, NTSTATUS ExitStatus){
  NTSTATUS v2; 
  _ETHREAD *CurrentThread; 
  NTSTATUS result; 
  UINT64 Tag; 
  PVOID Thread; 

  Thread = 0i64;
  v2 = 0;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  if( ThreadHandle )
  {
    if( ThreadHandle == (VOID *)-2i64 )
      goto LABEL_3;
    LODWORD(Tag) = 1700033360;
    result = ObReferenceObjectByHandleWithTag(
               ThreadHandle,
               1ui64,
               (_OBJECT_TYPE *)PsThreadType,
               CurrentThread->Tcb.PreviousMode,
               Tag,
               &Thread,
               0i64);
    v2 = result;
    if( result >= 0 )
    {
      if( Thread != CurrentThread )
      {
        v2 = PspTerminateThreadByPointer(Thread, (unsigned int)ExitStatus, 0);
        ObfDereferenceObjectWithTag(Thread, 0x65547350ui64);
        return v2;
      }
      ObfDereferenceObjectWithTag(Thread, 0x65547350ui64);
LABEL_3:
      PspTerminateThreadByPointer(CurrentThread, (unsigned int)ExitStatus, 1u);
      return v2;
    }
  }
  else
  {
    if( CurrentThread->Tcb.ApcState.Process->ActiveThreads != 1 )
      goto LABEL_3;
    return -1073741605;
  }
  return result;
}

Referenced by:

No references.