KeBoostPriorityThread

VOID __stdcall KeBoostPriorityThread(_ETHREAD *Thread, INT64 Increment){
  int v2; 
  unsigned __int8 CurrentIrql; 
  struct _KPRCB *CurrentPrcb; 
  _ETHREAD *CurrentThread; 
  int Priority; 
  int v8; 
  unsigned int v9; 
  unsigned __int64 CycleTime; 
  unsigned __int64 v11; 
  _ETHREAD *v12; 
  INT64 v13; 
  _ETHREAD *NextThread; 
  char v15; 
  _BYTE *DynamicPriority; 
  INT64 v17; 
  _SINGLE_LIST_ENTRY ReadyList; 
  UINT64 SpinCount; 
  UINT64 v20; 
  int v21; 

  v2 = Increment;
  if( Thread->Tcb.Process != (_EPROCESS *)&KiInitialProcess )
  {
    ReadyList.Next = 0i64;
    CurrentIrql = KeGetCurrentIrql();
    __writecr8(2ui64);
    CurrentPrcb = KeGetCurrentPrcb();
    LODWORD(SpinCount) = 0;
    CurrentThread = CurrentPrcb->CurrentThread;
    while( _interlockedbittestandset64((volatile signed __int32 *)&Thread->Tcb.ThreadLock, 0i64) )
    {
      do
        KeYieldProcessorEx(&SpinCount);
      while( Thread->Tcb.ThreadLock );
    }
    Priority = Thread->Tcb.Priority;
    v21 = Priority;
    if( Priority < 16 && !Thread->Tcb.PriorityDecrement )
    {
      v8 = v2 + Thread->Tcb.BasePriority;
      if( v8 > Priority )
      {
        v9 = v2 + Thread->Tcb.BasePriority;
        if( v8 >= 16 )
          v9 = 15;
        if( Thread != CurrentThread || CurrentPrcb->NestingLevel )
        {
          CycleTime = Thread->Tcb.CycleTime;
        }
        else
        {
          _disable();
          CycleTime = KiUpdateTotalCyclesCurrentThread(CurrentPrcb, &Thread->Tcb, 0i64);
          _enable();
        }
        v11 = CycleTime + KiCyclesPerClockQuantum * (unsigned int)Thread->Tcb.SchedulerApc.SpareByte1;
        if( (*(&Thread->Tcb.MiscFlags + 1) & 0x20) != 0 )
          _interlockedbittestandreset((volatile signed __int32 *)&Thread->Tcb.116 + 1, 5u);
        Thread->Tcb.QuantumTarget = v11;
        KiSetPriorityThread(&Thread->Tcb, &ReadyList, v9);
      }
    }
    KiReleaseThreadLockSafe((INT64)Thread);
    KiReadyDeferredReadyList(CurrentPrcb, &ReadyList);
    if( CurrentIrql < 2u )
    {
      v12 = 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)v12,
          0i64,
          v13,
          (INT64)DynamicPriority,
          v17,
          (INT64)ReadyList.Next);
        _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;
        v12->Tcb.WaitReason = 32;
        v12->Tcb.WaitIrql = CurrentIrql;
        KiQueueReadyThread(CurrentPrcb, &v12->Tcb);
        KiSwapContext();
        if( !v15 )
          goto LABEL_17;
      }
      else if( (v12->Tcb._bf_0 & 0x40) == 0 )
      {
LABEL_17:
        __writecr8(CurrentIrql);
        return;
      }
      __writecr8(1ui64);
      v12->Tcb._bf_0 &= ~0x40u;
      KiDeliverApc(0, 0i64, 0i64);
      goto LABEL_17;
    }
    if( CurrentPrcb->NextThread && !CurrentPrcb->DpcRoutineActive )
      KiRequestSoftwareInterrupt(CurrentPrcb, 2);
  }
}

Referenced by:

ExpCreateWorkerThread
NtSetInformationProcess