KiAbThreadUnboostCpuPriority

VOID __stdcall KiAbThreadUnboostCpuPriority(_ETHREAD *Thread, _KLOCK_ENTRY *Entry){
  unsigned int v2; 
  unsigned __int8 CurrentIrql; 
  int v5; 
  char v6; 
  unsigned __int8 v7; 
  unsigned __int8 v8; 
  unsigned int v9; 
  char Priority; 
  char v11; 
  struct _KPRCB *CurrentPrcb; 
  _ETHREAD *CurrentThread; 
  bool i; 
  INT64 v15; 
  _ETHREAD *NextThread; 
  char v17; 
  INT64 v18; 
  INT64 v19; 
  UINT64 v20; 
  _SINGLE_LIST_ENTRY ReadyList; 
  UINT64 SpinCount; 

  v2 = (unsigned int)Entry;
  ReadyList.Next = 0i64;
  CurrentIrql = KeGetCurrentIrql();
  __writecr8(2ui64);
  for( i = !_BitScanForward((unsigned int *)&v5, (unsigned int)Entry); !i; i = !_BitScanForward(
                                                                                   (unsigned int *)&v5,
                                                                                   v2) )
  {
    v6 = v5 + 1;
    LODWORD(SpinCount) = 0;
    while( _interlockedbittestandset64((volatile signed __int32 *)&Thread->Tcb.ThreadLock, 0i64) )
    {
      do
        KeYieldProcessorEx(&SpinCount);
      while( Thread->Tcb.ThreadLock );
    }
    v7 = Thread->Tcb.PriorityFloorCounts[v6];
    if( !v7 )
      KeBugCheckEx(0x157u, Thread, (PVOID)v6, (PVOID)2, 0i64);
    v8 = v7 - 1;
    Thread->Tcb.PriorityFloorCounts[v6] = v8;
    if( !v8 )
    {
      v9 = Thread->Tcb.PriorityFloorSummary ^ (1 << v6);
      Thread->Tcb.PriorityFloorSummary = v9;
      if( v9 < 1 << v6 )
      {
        Priority = Thread->Tcb.Priority;
        if( Priority < 16 )
        {
          v11 = Thread->Tcb.BasePriority
              + (Thread->Tcb.PriorityDecrement & 0xF)
              + ((unsigned __int8)Thread->Tcb.PriorityDecrement >> 4);
          if( v11 < Priority )
            KiSetPriorityThread(&Thread->Tcb, &ReadyList, (unsigned int)v11);
        }
      }
    }
    KiReleaseThreadLockSafe((INT64)Thread);
    v2 &= v2 - 1;
  }
  CurrentPrcb = KeGetCurrentPrcb();
  KiReadyDeferredReadyList(CurrentPrcb, &ReadyList);
  if( CurrentIrql >= 2u )
  {
    if( CurrentPrcb->NextThread && !CurrentPrcb->DpcRoutineActive )
      KiRequestSoftwareInterrupt(CurrentPrcb, 2);
  }
  else
  {
    CurrentThread = CurrentPrcb->CurrentThread;
    if( CurrentPrcb->NextThread )
    {
      KiAbProcessContextSwitch(&CurrentPrcb->CurrentThread->Tcb, 0i64);
      LODWORD(v20) = 0;
      while( _interlockedbittestandset64((volatile signed __int32 *)&CurrentPrcb->PrcbLock, 0i64) )
      {
        do
          KeYieldProcessorEx(&v20);
        while( CurrentPrcb->PrcbLock );
      }
      NextThread = CurrentPrcb->NextThread;
      CurrentPrcb->NextThread = 0i64;
      _disable();
      KiEndThreadCycleAccumulation((INT64)CurrentPrcb, (INT64)CurrentThread, 0i64, v15, v18, v19, v20);
      _enable();
      CurrentPrcb->CurrentThread = NextThread;
      if( NextThread->Tcb.WaitBlockFill6[68] == 1 )
        NextThread->Tcb.ReadyTime = NextThread->Tcb.ReadyTime
                                  - NextThread->Tcb.WaitBlock[2].SpareLong
                                  + KUSER_SHARED_DATA.TickCount.LowPart;
      NextThread->Tcb.WaitBlockFill6[68] = 2;
      CurrentThread->Tcb.WaitReason = 32;
      CurrentThread->Tcb.WaitIrql = CurrentIrql;
      KiQueueReadyThread(CurrentPrcb, &CurrentThread->Tcb);
      KiSwapContext();
      i = v17 == 0;
    }
    else
    {
      i = (CurrentThread->Tcb._bf_0 & 0x40) == 0;
    }
    if( !i )
    {
      __writecr8(1ui64);
      CurrentThread->Tcb._bf_0 &= ~0x40u;
      KiDeliverApc(0, 0i64, 0i64);
    }
    __writecr8(CurrentIrql);
  }
}

Referenced by:

ExReleasePushLockEx
ExpWorkerInitialization
KeAbPostRelease
KiAbThreadRemoveBoosts