KeAlertThread

char __fastcall KeAlertThread(__int64 a1, char a2){
  __int64 v2; 
  UINT8 OldIrql; 
  _KPRCB *CurrentPrcb; 
  char v6; 
  char v8; 
  UINT64 SpinCount; 
  v2 = a2;
  OldIrql = KeGetCurrentIrql();
  __writecr8(2ui64);
  CurrentPrcb = KeGetCurrentPrcb();
  LODWORD(SpinCount) = 0;
  while( _interlockedbittestandset64((volatile signed __int32 *)(a1 + 64), 0i64) )
  {
    do
      KeYieldProcessorEx(&SpinCount);
    while( *(_QWORD *)(a1 + 64) );
  }
  v6 = *(_BYTE *)(v2 + a1 + 114);
  if( !v6 )
  {
    if( *(_BYTE *)(a1 + 388) != 5
      || (unsigned __int8)((*(_BYTE *)(a1 + 112) & 7) - 3) <= 1u
      || (*(_DWORD *)(a1 + 116) & 0x10) == 0
      || (char)v2 > *(char *)(a1 + 391)
      || (KiSignalThread(CurrentPrcb, (_ETHREAD *)a1, 257i64, 0i64), *(_BYTE *)(a1 + 112) |= 0x80u, !v8) )
    {
      *(_BYTE *)(v2 + a1 + 114) = 1;
    }
  }
  KiReleaseThreadLockSafe(a1);
  KiExitDispatcher(CurrentPrcb, 0i64, AdjustUnwait, 2i64, OldIrql);
  return v6;
}

Referenced by:

IoDecrementKeepAliveCount
IopCancelIrpsInCurrentThreadListSpecialApc
KeAlertResumeThread
KeRequestTerminationThread
NtAlertThread