KiRemoveBoostThread

VOID __fastcall KiRemoveBoostThread(_KPRCB *Prcb, _ETHREAD *Thread){
  struct _KPRCB *CurrentPrcb; 
  unsigned __int8 PriorityDecrement; 
  _SINGLE_LIST_ENTRY *Priority; 
  char v7; 
  char v8; 
  unsigned int PriorityFloorSummary; 
  char v10; 
  char v11; 
  struct _KPRCB *v12; 
  _KSCHEDULING_GROUP *volatile SchedulingGroup; 
  int v14; 
  _ETHREAD *v15; 
  _ETHREAD *v16; 
  _KPRCB *v17; 
  INT32 *v18; 
  bool v19; 
  char v20; 
  _KSCB *v21; 
  UINT8 v22; 
  int v23; 
  _DWORD *SchedulerAssist; 
  int v25; 
  _DWORD *v26; 
  char v27; 
  _BYTE *v28; 
  UINT8 IsThreadRankNonZero; 
  INT64 v30; 
  _SINGLE_LIST_ENTRY *p_PropagateBoostsEntry; 
  INT64 v32; 
  UINT64 SpinCount; 
  int v34; 
  UINT64 v35; 

  if( Thread->Tcb.PriorityDecrement )
  {
    CurrentPrcb = KeGetCurrentPrcb();
    LODWORD(SpinCount) = 0;
    while( _interlockedbittestandset64((volatile signed __int32 *)&Thread->Tcb.ThreadLock, 0i64) )
    {
      do
        KeYieldProcessorEx(&SpinCount);
      while( Thread->Tcb.ThreadLock );
      SchedulerAssist = CurrentPrcb->SchedulerAssist;
      if( SchedulerAssist && CurrentPrcb->NestingLevel <= 1u )
        ++SchedulerAssist[6];
    }
    PriorityDecrement = Thread->Tcb.PriorityDecrement;
    Priority = (_SINGLE_LIST_ENTRY *)(unsigned __int8)Thread->Tcb.Priority;
    v7 = PriorityDecrement & 0xF;
    v8 = PriorityDecrement >> 4;
    if( v8 )
    {
      PriorityFloorSummary = Thread->Tcb.PriorityFloorSummary;
      v10 = (_BYTE)Priority - v8;
      Thread->Tcb.PriorityDecrement = v7;
      v34 = 0;
      if( PriorityFloorSummary )
      {
        _BitScanReverse((unsigned int *)&v25, PriorityFloorSummary);
        if( v10 < v25 )
          v10 = v25;
        v34 = v25;
      }
      if( v10 != (_BYTE)Priority )
      {
        v11 = 0;
        v12 = KeGetCurrentPrcb();
        LODWORD(v35) = 0;
        while( _interlockedbittestandset64((volatile signed __int32 *)&Prcb->PrcbLock, 0i64) )
        {
          do
            KeYieldProcessorEx(&v35);
          while( Prcb->PrcbLock );
          v26 = v12->SchedulerAssist;
          if( v26 && v12->NestingLevel <= 1u )
            ++v26[6];
        }
        if( !Prcb->NextThread )
        {
          if( Thread->Tcb.Priority != 31
            && ((SchedulingGroup = Thread->Tcb.SchedulingGroup, v14 = Thread->Tcb.Priority, !SchedulingGroup)
             || (v21 = (_KSCB *)((char *)SchedulingGroup + Prcb->ScbOffset)) == 0i64
             || (Prcb == KeGetCurrentPrcb() || Thread != Prcb->CurrentThread ? (v22 = 1) : (v22 = 0),
                 KiGetThreadEffectiveRankNonZero(Thread, v21, (_KPRCB *)Priority, v22, 0i64),
                 !v23) ? (v15 = (_ETHREAD *)KiSelectReadyThread((unsigned int)(v14 + 1), Prcb)) : (v15 = (_ETHREAD *)KiChooseLowestRankedThread(Prcb, &Thread->Tcb, (unsigned int)(v14 + 1))),
                (v16 = v15) != 0i64) )
          {
            if( (v15->Tcb.gap0[2] & 4) == 0
              || (IsThreadRankNonZero = KiIsThreadRankNonZero(&v15->Tcb, Prcb, (_KPRCB *)Priority),
                  v27 = 1,
                  !IsThreadRankNonZero) )
            {
              v27 = v16->Tcb.Priority;
            }
            *Prcb->PriorityState = v27;
            v28 = Prcb->SchedulerAssist;
            if( v28 )
            {
              v30 = (unsigned int)KiVpThreadSystemWorkPriority;
              if( v16 != Prcb->IdleThread )
                v30 = (unsigned int)v27;
              KiSetSchedulerAssistPriority((INT32 *)Prcb->SchedulerAssist, v30, 0);
              v28 = Prcb->SchedulerAssist;
            }
            Prcb->NextThread = v16;
            if( v28 )
              v28[16] = v16 == Prcb->IdleThread;
            if( v16->Tcb.WaitBlockFill6[68] == 1 )
              v16->Tcb.ReadyTime = v16->Tcb.ReadyTime
                                 - v16->Tcb.WaitBlock[2].SpareLong
                                 + KUSER_SHARED_DATA.TickCount.LowPart;
            v16->Tcb.WaitBlockFill6[68] = 3;
          }
          else
          {
            v11 = 1;
          }
        }
        v17 = KeGetCurrentPrcb();
        if( v10 > Thread->Tcb.Priority )
        {
          if( Thread->Tcb.AbWaitEntryCount )
          {
            p_PropagateBoostsEntry = &Thread->Tcb.PropagateBoostsEntry;
            if( Thread->Tcb.PropagateBoostsEntry.Next == (_SINGLE_LIST_ENTRY *)1 )
            {
              Priority = &v17->AbPropagateBoostsList;
              if( v17 != (_KPRCB *)-34680i64 )
              {
                p_PropagateBoostsEntry->Next = Priority->Next;
                Priority->Next = p_PropagateBoostsEntry;
                _InterlockedIncrement16(&Thread->Tcb.KeReferenceCount);
                KiAbQueueAutoBoostDpc(v17);
              }
            }
          }
        }
        Thread->Tcb.Priority = v10;
        if( v11 )
        {
          if( (Thread->Tcb.gap0[2] & 4) != 0 )
          {
            v19 = KiIsThreadRankNonZero(&Thread->Tcb, Prcb, (_KPRCB *)Priority) == 0;
            v20 = 1;
            if( v19 )
              v20 = Thread->Tcb.Priority;
            v10 = v20;
          }
          *Prcb->PriorityState = v10;
          v18 = (INT32 *)Prcb->SchedulerAssist;
          if( v18 )
          {
            v32 = (unsigned int)KiVpThreadSystemWorkPriority;
            if( Thread != Prcb->IdleThread )
              v32 = (unsigned int)v10;
            KiSetSchedulerAssistPriority(v18, v32, 0);
          }
        }
        if( (*(&Thread->Tcb.MiscFlags + 1) & 0x400000) != 0 )
          KiSetSchedulerAssistPriority((INT32 *)Thread->Tcb.SchedulerAssist, (unsigned int)Thread->Tcb.Priority, 1);
        _InterlockedAnd64((volatile signed __int64 *)&Prcb->PrcbLock, 0i64);
      }
    }
    Thread->Tcb.ThreadLock = 0i64;
  }
}

Referenced by:

CcUnpinFileDataEx
ExpReleaseResourceExclusiveForThreadLite
ExpReleaseResourceSharedForThreadLite
KeGenericProcessorCallback
KeSetEventBoostPriorityEx
KeWakeWaitChain
KiCompleteDirectSwitchThread