KeDeleteThread
VOID __stdcall KeDeleteThread(_ETHREAD *Thread){
__int64 *v2;
_BYTE *v3;
unsigned __int8 v4;
__int64 v5;
unsigned __int64 v6;
__int64 **v7;
unsigned __int8 v8;
__int64 v9;
unsigned __int64 v10;
_QWORD *v11;
KiWaitForContextSwap(&Thread->Tcb);
KiDecrementProcessStackCount(&Thread->Tcb.ApcState.Process->Pcb);
v2 = (__int64 *)&Thread->Tcb.gap36C[4];
if( *(_QWORD *)&Thread->Tcb.gap36C[4] != 1i64 )
{
v4 = KeAcquireSpinLockRaiseToDpc(&qword_140C31C98);
v5 = *v2;
v6 = v4;
if( *v2 != 1 && *(_QWORD *)&Thread->Tcb.gap36C[12] )
{
v7 = *(__int64 ***)&Thread->Tcb.gap36C[12];
if( *(__int64 **)(v5 + 8) != v2 || *v7 != v2 )
goto LABEL_10;
*v7 = (__int64 *)v5;
*(_QWORD *)(v5 + 8) = v7;
}
KxReleaseSpinLock(&qword_140C31C98);
__writecr8(v6);
}
v3 = Thread->Tcb.gap3F0;
if( *(_QWORD *)Thread->Tcb.gap3F0 != 1i64 )
{
v8 = KeAcquireSpinLockRaiseToDpc(&KiUpdateVpThreadPriorityLock);
v9 = *(_QWORD *)v3;
v10 = v8;
if( *(_QWORD *)v3 == 1i64 || !*(_QWORD *)&Thread->Tcb.gap3F0[8] )
goto LABEL_16;
v11 = *(_QWORD **)&Thread->Tcb.gap3F0[8];
if( *(_BYTE **)(v9 + 8) == v3 && (_BYTE *)*v11 == v3 )
{
*v11 = v9;
*(_QWORD *)(v9 + 8) = v11;
LABEL_16:
KxReleaseSpinLock(&KiUpdateVpThreadPriorityLock);
__writecr8(v10);
return;
}
LABEL_10:
__fastfail(3u);
}
}Referenced by:
No references.