KiGroupSchedulingMoveThread

VOID __stdcall KiGroupSchedulingMoveThread(_KPRCB *TargetPrcb, _KPRCB *SourcePrcb, _RTL_RB_TREE *ScbQueue){
  _RTL_BALANCED_NODE *Min; 
  unsigned __int64 j; 
  int i; 
  unsigned int v8; 
  _QWORD *v9; 
  _QWORD *v10; 
  _QWORD *v11; 
  int v12; 
  _QWORD *v13; 
  char v14; 
  _RTL_RB_TREE *v15; 
  __int64 v16; 
  __int64 v17; 
  _QWORD **v18; 
  unsigned __int64 v19; 
  _QWORD *v20; 
  Min = ScbQueue->Min;
  if( ((unsigned __int8)Min & 1) == 0 )
  {
    j = (unsigned __int64)ScbQueue->Min;
    goto LABEL_3;
  }
  if( Min != (_RTL_BALANCED_NODE *)1 )
  {
    j = (unsigned __int64)Min ^ ((unsigned __int64)ScbQueue | 1);
    while( 1 )
    {
LABEL_3:
      if( !j )
        return;
      for( i = *(unsigned __int16 *)(j + 26); i; i = v12 ^ (1 << v14) )
      {
        _BitScanReverse(&v8, i);
        v9 = (_QWORD *)(16i64 * v8 + j + 48);
        v10 = (_QWORD *)*v9;
        do
        {
          v11 = v10 - 27;
          if( KiPrcbInGroupAffinity((__int64)TargetPrcb, (__int64)(v10 + 45)) )
          {
            KiRemoveThreadFromScbQueue(SourcePrcb, j - 88, v11);
            *((_DWORD *)v11 + 134) = *((_DWORD *)TargetPrcb + 9);
            return;
          }
          v10 = (_QWORD *)*v13;
        }
        while( v10 != v9 );
      }
      v15 = (_RTL_RB_TREE *)(j + 304);
      v16 = *(_QWORD *)(j + 304);
      if( (*(_BYTE *)(j + 312) & 1) != 0 )
      {
        if( !v16 )
          goto LABEL_19;
        v16 ^= (unsigned __int64)v15;
      }
      if( v16 )
      {
        KiGroupSchedulingMoveThread(TargetPrcb, SourcePrcb, v15);
        if( v17 )
          return;
      }
LABEL_19:
      v18 = *(_QWORD ***)(j + 8);
      v19 = j;
      if( v18 )
      {
        v20 = *v18;
        for( j = *(_QWORD *)(j + 8); v20; v20 = (_QWORD *)*v20 )
          j = (unsigned __int64)v20;
      }
      else
      {
        while( 1 )
        {
          j = *(_QWORD *)(j + 16) & 0xFFFFFFFFFFFFFFFCui64;
          if( !j || *(_QWORD *)j == v19 )
            break;
          v19 = j;
        }
      }
    }
  }
}

Referenced by:

KiGroupSchedulingMoveThread
KiSearchForNewThreadOnProcessor