KiSelectLowestRankedThread

_KTHREAD *__fastcall KiSelectLowestRankedThread(__int64 a1){
  _KTHREAD *v2; 
  __int64 i; 
  __int64 v4; 
  __int64 v5; 
  __int64 v7; 
  unsigned __int64 v8; 
  __int64 v9; 
  __int64 v10; 
  unsigned __int64 v11; 
  unsigned __int64 v12; 
  if( KiPerfIsoEnabled )
  {
    v8 = **(_QWORD **)(a1 + 192) - ((**(_QWORD **)(a1 + 192) >> 1) & 0x5555555555555555i64);
    if( (unsigned int)((0x101010101010101i64
                       * (((v8 & 0x3333333333333333i64)
                         + ((v8 >> 2) & 0x3333333333333333i64)
                         + (((v8 & 0x3333333333333333i64) + ((v8 >> 2) & 0x3333333333333333i64)) >> 4)) & 0xF0F0F0F0F0F0F0Fi64)) >> 32) >> 24 < KiPerfIsoEnabled )
      return 0i64;
    v9 = *(_QWORD *)(a1 + 200);
    v10 = *(_QWORD *)(a1 + 33880);
    if( v9 != v10 )
    {
      v11 = v10 & ~v9;
      if( (*(_QWORD *)(*(_QWORD *)(a1 + 192) + 24i64) & v11) == 0 )
      {
        _BitScanForward64(&v12, v11);
        if( (*((_DWORD *)*(&KiProcessorBlock
                          + (unsigned int)KiProcessorNumberToIndexMappingTable[64 * *(unsigned __int8 *)(a1 + 208)
                                                                             + (int)v12])
              + 59) & 0x400) == 0 )
          return 0i64;
      }
    }
  }
  v2 = 0i64;
  for( i = a1 + 31856; ; i = v7 + 392 )
  {
    v4 = *(_QWORD *)(i + 8);
    if( (v4 & 1) != 0 )
    {
      if( v4 == 1 )
        return(_KTHREAD *)v2;
      v5 = v4 ^ (i | 1);
    }
    else
    {
      v5 = *(_QWORD *)(i + 8);
    }
    if( !v5 )
      break;
    v7 = v5 - 88;
    v2 = (_ETHREAD *)KiSelectThreadFromSchedulingGroup((_KPRCB *)a1, (_KSCB *)(v5 - 88), 0i64);
    if( v2 )
      break;
  }
  return(_KTHREAD *)v2;
}

Referenced by:

KiSelectNextThread
KiSelectReadyThreadEx