KiApplyForegroundBoostThread

UINT8 __stdcall KiApplyForegroundBoostThread(_ETHREAD *Thread, _SINGLE_LIST_ENTRY *ReadyList){
  UINT8 v3; 
  char v5; 
  UINT64 CurrentPrcb; 
  _KPRCB *v7; 
  char v9; 
  int v10; 
  __int64 v11; 
  int *v12; 
  int v13; 
  int v14; 
  __int64 v15; 
  __int64 v16; 
  unsigned int v17; 
  _KTHREAD *v18; 
  _ETHREAD *v19; 
  char v20; 
  __int64 v21; 
  INT64 v22; 
  bool v23; 
  char v24; 
  _QWORD *v25; 
  __int64 v26; 
  bool v27; 
  _KTHREAD *v28; 
  _ETHREAD *v29; 
  char v30; 
  __int64 v31; 
  INT64 v32; 
  bool v33; 
  char v34; 
  int v35; 
  int v36; 
  _KSHARED_READY_QUEUE *ControlReadyQueue; 
  char v38; 
  _KPRCB *ControlPrcb; 
  ControlPrcb = 0i64;
  ControlReadyQueue = 0i64;
  v3 = 0;
  KiAcquireThreadStateLock(Thread, &ControlPrcb, &ControlReadyQueue);
  if( ((unsigned __int8)(v5 - 1) <= 2u || v5 == 7) && *(_BYTE *)(*((_QWORD *)Thread + 68) + 1850i64) == 2 )
  {
    if( *((_BYTE *)Thread + 564) )
      goto LABEL_13;
    if( (*((_DWORD *)Thread + 30) & 8) != 0 )
      goto LABEL_13;
    CurrentPrcb = (unsigned int)*((char *)Thread + 195);
    if( *((char *)Thread + 195) <= 0 )
      goto LABEL_13;
    v9 = PsPrioritySeparation + *((_BYTE *)Thread + 563);
    if( v9 >= 16 )
      v9 = 15;
    if( v9 <= *((char *)Thread + 195) )
    {
LABEL_13:
      v7 = ControlPrcb;
      goto LABEL_14;
    }
    v10 = 0;
    v35 = v9;
    v36 = *((char *)Thread + 195);
    v38 = 0;
    *((_BYTE *)Thread + 564) = (v9 - *((_BYTE *)Thread + 195)) & 0xF;
    switch( v5 )
    {
      case 1:
        v7 = ControlPrcb;
        KiRemoveThreadFromAnyReadyQueue(ControlPrcb, ControlReadyQueue, (_KTHREAD *)Thread, (unsigned int)CurrentPrcb);
        KiUpdateThreadPriority(0i64, (_KTHREAD *)Thread, (unsigned int)v35, 0);
        KiPrepareReadyThreadForRescheduling((_KTHREAD *)Thread, (unsigned int)v35, ReadyList);
        goto LABEL_17;
      case 2:
        v7 = ControlPrcb;
        v25 = (_QWORD *)((char *)ControlPrcb + 16);
        v26 = *((_QWORD *)ControlPrcb + 2);
        KiUpdateThreadPriority(ControlPrcb, (_KTHREAD *)Thread, (unsigned int)v9, v26 == 0);
        v27 = v35 <= v36;
        if( v35 < v36 )
        {
          if( !v26 )
          {
            v7 = ControlPrcb;
            if( *((_BYTE *)Thread + 388) == 2 )
            {
              v28 = (_ETHREAD *)KiSelectReadyThreadEx(ControlPrcb, (_KTHREAD *)Thread, 0);
              v29 = v28;
              if( !v28 )
                goto LABEL_17;
              if( (*((_BYTE *)v28 + 2) & 4) != 0 )
              {
                KiIsThreadRankNonZero(v28, v7);
                v30 = 1;
                if( !v34 )
                  v30 = *((_BYTE *)v29 + 195);
              }
              else
              {
                v30 = *((_BYTE *)v28 + 195);
              }
              **((_BYTE **)v7 + 7) = v30;
              v31 = *((_QWORD *)v7 + 4247);
              if( v31 )
              {
                v32 = (unsigned int)KiVpThreadSystemWorkPriority;
                if( v29 != *((_ETHREAD **)v7 + 3) )
                  v32 = (unsigned int)v30;
                KiSetSchedulerAssistPriority(*((volatile INT32 **)v7 + 4247), v32, 0);
                v31 = *((_QWORD *)v7 + 4247);
              }
              v33 = v29 == *((_ETHREAD **)v7 + 3);
              *v25 = v29;
              if( v31 )
                *(_BYTE *)(v31 + 16) = v33;
              if( *((_BYTE *)v29 + 388) == 1 )
                *((_DWORD *)v29 + 33) = *((_DWORD *)v29 + 33)
                                      - *((_DWORD *)v29 + 109)
                                      + KUSER_SHARED_DATA.TickCount.LowPart;
              *((_BYTE *)v29 + 388) = 3;
              v38 = 1;
              goto LABEL_48;
            }
            if( *((_DWORD *)ControlPrcb + 7942) >> (v35 + 1) )
              *((_BYTE *)Thread + 112) |= 0x10u;
            goto LABEL_17;
          }
          v27 = v35 <= v36;
        }
        if( v27 )
          goto LABEL_17;
        if( v26 )
          goto LABEL_17;
        v7 = ControlPrcb;
        if( *((_BYTE *)Thread + 388) != 2 )
          goto LABEL_17;
        break;
      case 3:
        v7 = ControlPrcb;
        KiUpdateThreadPriority(ControlPrcb, (_KTHREAD *)Thread, (unsigned int)v9, 1u);
        if( v35 < v36 )
        {
          v18 = (_ETHREAD *)KiSelectReadyThreadEx(v7, (_KTHREAD *)Thread, 0);
          v19 = v18;
          if( v18 )
          {
            if( (*((_BYTE *)v18 + 2) & 4) != 0 )
            {
              KiIsThreadRankNonZero(v18, v7);
              v20 = 1;
              if( !v24 )
                v20 = *((_BYTE *)v19 + 195);
            }
            else
            {
              v20 = *((_BYTE *)v18 + 195);
            }
            **((_BYTE **)v7 + 7) = v20;
            v21 = *((_QWORD *)v7 + 4247);
            if( v21 )
            {
              v22 = (unsigned int)KiVpThreadSystemWorkPriority;
              if( v19 != *((_ETHREAD **)v7 + 3) )
                v22 = (unsigned int)v20;
              KiSetSchedulerAssistPriority(*((volatile INT32 **)v7 + 4247), v22, 0);
              v21 = *((_QWORD *)v7 + 4247);
            }
            v23 = v19 == *((_ETHREAD **)v7 + 3);
            *((_QWORD *)v7 + 2) = v19;
            if( v21 )
              *(_BYTE *)(v21 + 16) = v23;
            if( *((_BYTE *)v19 + 388) == 1 )
              *((_DWORD *)v19 + 33) = *((_DWORD *)v19 + 33)
                                    - *((_DWORD *)v19 + 109)
                                    + KUSER_SHARED_DATA.TickCount.LowPart;
            *((_BYTE *)v19 + 388) = 3;
            KiInsertDeferredReadyList((INT64)ReadyList, (INT64)Thread);
            goto LABEL_48;
          }
LABEL_17:
          KiUpdateSharedReadyQueueAffinityThread(0i64, (_KTHREAD *)Thread);
          KiReleaseThreadStateLock(v11, (__int64)v7, (volatile signed __int64 *)ControlReadyQueue);
          if( v38 )
          {
            v7 = ControlPrcb;
            CurrentPrcb = *((unsigned int *)ControlPrcb + 9);
            if( *((_DWORD *)KeGetPcr() + 105) != (_DWORD)CurrentPrcb )
              KiSendSoftwareInterrupt(CurrentPrcb, 2u);
          }
          if( v10 <= 0 )
            goto LABEL_21;
          CurrentPrcb = (UINT64)KeGetCurrentPrcb();
          if( (KiVelocityFlags & 2) != 0 )
          {
            v7 = ControlPrcb;
            v12 = (int *)*((_QWORD *)ControlPrcb + 4247);
            if( !v12 || !*(_QWORD *)(CurrentPrcb + 33976) || (_KPRCB *)CurrentPrcb == ControlPrcb || v10 < 8 )
              goto LABEL_21;
            v13 = *v12;
            v14 = *v12 & 0x40000;
            if( (v13 & 0x100000) != 0 || v14 && (unsigned __int8)v13 < v10 )
            {
              v23 = HvlpVirtualProcessorsIdentityMapped == 0;
              v15 = *(_QWORD *)(CurrentPrcb + 33976);
              v7 = ControlPrcb;
              *(_DWORD *)(v15 + 12) = 2;
              v16 = *((unsigned int *)v7 + 9);
              if( v23 )
                LODWORD(v16) = (unsigned __int8)HvlpVirtualProcessorMapping[2 * (unsigned int)v16 + 1] | ((unsigned __int8)HvlpVirtualProcessorMapping[2 * v16] << 6);
              *(_DWORD *)(v15 + 8) = v16;
              v17 = v16;
              CurrentPrcb = 1073742018i64;
              __writemsr(0x400000C2u, v17);
              goto LABEL_21;
            }
          }
          v7 = ControlPrcb;
LABEL_21:
          v3 = 1;
LABEL_14:
          if( v3 )
            return v3;
          goto LABEL_4;
        }
        break;
      default:
        KiUpdateThreadPriority(0i64, (_KTHREAD *)Thread, (unsigned int)v9, 0);
LABEL_48:
        v7 = ControlPrcb;
        goto LABEL_17;
    }
    v10 = v35;
    goto LABEL_17;
  }
  v7 = ControlPrcb;
LABEL_4:
  KiReleaseThreadStateLock(CurrentPrcb, (__int64)v7, (volatile signed __int64 *)ControlReadyQueue);
  return v3;
}

Referenced by:

KeSetPriorityAndQuantumProcess