KiAbApplyWakeupBoost

void __fastcall KiAbApplyWakeupBoost(char a1, __int64 a2, int a3){
  __int64 v5; 
  __int64 v6; 
  unsigned __int8 CurrentIrql; 
  char v8; 
  char v9; 
  struct _KPRCB *CurrentPrcb; 
  UINT64 SpinCount; 
  _SINGLE_LIST_ENTRY ReadyList; 
  if( (*(_BYTE *)(a2 + 27) & 1) == 0 || *(_QWORD *)(a2 + 64) )
  {
    v5 = *(unsigned __int8 *)(a2 + 24);
    ReadyList.Next = 0i64;
    v6 = a2 - 16 * v5;
    CurrentIrql = KeGetCurrentIrql();
    __writecr8(2ui64);
    v8 = a1;
    if( a1 > 15 )
      v8 = 15;
    if( *(char *)(v6 + 563) < v8 && ((1 << (v8 - 1)) & 0x7FFF & *(_WORD *)(a2 + 88)) == 0 )
    {
      LODWORD(SpinCount) = 0;
      while( _interlockedbittestandset64((volatile signed __int32 *)(v6 + 64), 0i64) )
      {
        do
          KeYieldProcessorEx(&SpinCount);
        while( *(_QWORD *)(v6 + 64) );
      }
      v9 = *(_BYTE *)(v8 + v6 + 824);
      if( v9 == -1 )
        KeBugCheckEx(0x157u, v6, v8, 1ui64, 0i64);
      *(_BYTE *)(v8 + v6 + 824) = v9 + 1;
      *(_DWORD *)(v6 + 856) |= 1 << v8;
      if( *(char *)(v6 + 195) < v8 )
        KiSetPriorityThread((_KTHREAD *)v6, &ReadyList, (unsigned int)v8);
      KiReleaseThreadLockSafe(v6);
      *(_WORD *)(a2 + 88) ^= (*(_WORD *)(a2 + 88) ^ (*(_WORD *)(a2 + 88) & 0x7FFF | (1 << (v8 - 1)))) & 0x7FFF;
    }
    CurrentPrcb = KeGetCurrentPrcb();
    if( a3 )
      KiReadyDeferredReadyList(CurrentPrcb, &ReadyList);
    else
      KiProcessDeferredReadyList((__int64)CurrentPrcb, &ReadyList, CurrentIrql);
  }
}

Referenced by:

ExpWakePushLock
KeAbPreWakeupThread