KiSelectThreadFromScbQueue

_ETHREAD *__fastcall KiSelectThreadFromScbQueue(__int64 a1, _KPRCB *a2, int a3, _KSCB *a4, _BYTE *a5){
  __int64 v5; 
  _QWORD *i; 
  unsigned int v10; 
  _KSCB *v11; 
  __int64 p_ChildScbQueue; 
  unsigned __int64 Root; 
  _ETHREAD *result; 
  _QWORD **v15; 
  _QWORD *v16; 
  _QWORD *v17; 

  v5 = *(_QWORD *)(a1 + 8);
  if( (v5 & 1) != 0 )
  {
    if( v5 == 1 )
      return 0i64;
    i = (_QWORD *)(v5 ^ (a1 | 1));
  }
  else
  {
    i = *(_QWORD **)(a1 + 8);
  }
  if( i )
  {
    v10 = 1 << a3;
    while( 1 )
    {
      v11 = (_KSCB *)(i - 11);
      if( *((unsigned __int16 *)i + 13) >= v10 )
        return KiSelectThreadFromSchedulingGroup(a2, v11, (unsigned int)a3);
      if( v11 == a4 )
      {
        *a5 = 1;
        return 0i64;
      }
      p_ChildScbQueue = (__int64)&v11->ChildScbQueue;
      Root = (unsigned __int64)v11->ChildScbQueue.Root;
      if( (v11->ChildScbQueue._bf_0 & 1) == 0 )
        goto LABEL_12;
      if( Root )
        break;
LABEL_14:
      if( !*a5 )
      {
        v15 = (_QWORD **)i[1];
        v16 = i;
        if( v15 )
        {
          v17 = *v15;
          for( i = (_QWORD *)i[1]; v17; v17 = (_QWORD *)*v17 )
            i = v17;
        }
        else
        {
          while( 1 )
          {
            i = (_QWORD *)(i[2] & 0xFFFFFFFFFFFFFFFCui64);
            if( !i || (_QWORD *)*i == v16 )
              break;
            v16 = i;
          }
        }
        if( i )
          continue;
      }
      return 0i64;
    }
    Root ^= p_ChildScbQueue;
LABEL_12:
    if( Root )
    {
      result = KiSelectThreadFromScbQueue(p_ChildScbQueue, a2, a3, a4, a5);
      if( result )
        return result;
    }
    goto LABEL_14;
  }
  return 0i64;
}

Referenced by:

KiChooseLowestRankedThread
KiSelectThreadFromScbQueue