KiSelectLowestRankedThread

_KTHREAD *__stdcall KiSelectLowestRankedThread(_KPRCB *Prcb){
  _ETHREAD *v2; 
  _RTL_RB_TREE *i; 
  _RTL_BALANCED_NODE *Min; 
  __int64 v5; 
  __int64 v7; 
  unsigned __int64 v8; 
  unsigned __int64 GroupSetMember; 
  unsigned __int64 CoreProcessorSet; 
  unsigned __int64 v11; 
  unsigned __int64 v12; 

  if( KiPerfIsoEnabled )
  {
    v8 = Prcb->ParentNode->IdleNonParkedCpuSet - ((Prcb->ParentNode->IdleNonParkedCpuSet >> 1) & 0x5555555555555555i64);
    if( (unsigned int)((0x101010101010101i64
                       * (((v8 & 0x3333333333333333i64)
                         + ((v8 >> 2) & 0x3333333333333333i64)
                         + (((v8 & 0x3333333333333333i64) + ((v8 >> 2) & 0x3333333333333333i64)) >> 4)) & 0xF0F0F0F0F0F0F0Fi64)) >> 32) >> 24 < KiPerfIsoEnabled )
      return 0i64;
    GroupSetMember = Prcb->GroupSetMember;
    CoreProcessorSet = Prcb->CoreProcessorSet;
    if( GroupSetMember != CoreProcessorSet )
    {
      v11 = CoreProcessorSet & ~GroupSetMember;
      if( (Prcb->ParentNode->IdleCpuSet & v11) == 0 )
      {
        _BitScanForward64(&v12, v11);
        if( ((*(&KiProcessorBlock + (unsigned int)KiProcessorNumberToIndexMappingTable[64 * Prcb->Group + (int)v12]))->PrcbFlags._bf_0 & 0x400) == 0 )
          return 0i64;
      }
    }
  }
  v2 = 0i64;
  for( i = &Prcb->ScbQueue; ; i = (_RTL_RB_TREE *)(v7 + 392) )
  {
    Min = i->Min;
    if( ((unsigned __int8)Min & 1) != 0 )
    {
      if( Min == (_RTL_BALANCED_NODE *)1 )
        return &v2->Tcb;
      v5 = (unsigned __int64)Min ^ ((unsigned __int64)i | 1);
    }
    else
    {
      v5 = (__int64)i->Min;
    }
    if( !v5 )
      break;
    v7 = v5 - 88;
    v2 = KiSelectThreadFromSchedulingGroup(Prcb, (_KSCB *)(v5 - 88), 0i64);
    if( v2 )
      break;
  }
  return &v2->Tcb;
}

Referenced by:

KiSelectNextThread
KiSelectReadyThreadEx