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.