KeForceResumeThread

VOID __fastcall KeForceResumeThread(_ETHREAD *Thread){
  UINT8 OldIrql; 
  _KPRCB *CurrentPrcb; 
  volatile signed __int32 *v4; 

  OldIrql = KeGetCurrentIrql();
  __writecr8(2ui64);
  CurrentPrcb = KeGetCurrentPrcb();
  v4 = (volatile signed __int32 *)Thread->Tcb.gap2E0;
  KiAcquireKobjectLockSafe(Thread->Tcb.gap2E0);
  if( Thread->Tcb.SuspendCount + (((unsigned int)*(&Thread->Tcb.MiscFlags + 1) >> 14) & 1) )
  {
    _interlockedbittestandreset((volatile signed __int32 *)&Thread->Tcb.116 + 1, 0xEu);
    Thread->Tcb.SuspendCount = 0;
  }
  KiResumeThread(&Thread->Tcb, CurrentPrcb, 1u);
  _InterlockedAnd(v4, 0xFFFFFF7F);
  KiExitDispatcher(CurrentPrcb, 0i64, AdjustUnwait, 0i64, OldIrql);
}

Referenced by:

KeRequestTerminationThread
KeRundownApcQueues
NtTerminateProcess
PspInsertThread