KiSearchForNewThreadOnNode

_KTHREAD *__fastcall KiSearchForNewThreadOnNode(unsigned __int64 a1, _QWORD *a2){
  char v2; 
  int v5; 
  __int64 v6; 
  __int64 v7; 
  __int64 v8; 
  __int64 v9; 
  _KTHREAD *result; 
  unsigned __int64 v11; 
  int v12; 
  unsigned __int64 v13; 
  __int64 v14; 
  __int64 v15; 
  unsigned __int64 v16; 
  int v17; 
  unsigned __int64 v18; 
  int v19; 
  v2 = *(_BYTE *)(a1 + 209);
  v5 = *(unsigned __int8 *)(a1 + 208);
  v19 = v5;
  v6 = a2[17];
  v7 = v6;
  v8 = a2[19];
  if( a2 == *(_QWORD **)(a1 + 192) )
  {
    v6 ^= *(_QWORD *)(a1 + 200);
    v8 ^= *(_QWORD *)(a1 + 33856);
    if( (KiCacheAwareScheduling & 2) != 0 )
      v7 &= *(_QWORD *)(a1 + 33896);
  }
  v9 = ~a2[3] & v6;
  while( 1 )
  {
    if( !v9 && !v8 )
      return 0i64;
    if( (v8 & v7) != 0 )
      break;
LABEL_14:
    if( (v9 & v7) != 0 )
    {
      v16 = __ROR8__(v9 & v7, v2);
      v17 = v5 << 6;
      do
      {
        _BitScanForward64(&v18, v16);
        v16 ^= 1i64 << v18;
        result = (_ETHREAD *)KiSearchForNewThreadOnProcessor(
                               (_KPRCB *)a1,
                               *(&KiProcessorBlock
                               + (unsigned int)KiProcessorNumberToIndexMappingTable[v17 + (((_BYTE)v18 + v2) & 0x3F)]),
                               0i64);
        if( result )
          return(_KTHREAD *)result;
      }
      while( v16 );
    }
    v5 = v19;
    v9 &= ~v7;
    v7 = a2[17];
  }
  v11 = __ROR8__(v8 & v7, v2);
  v12 = v5 << 6;
  while( 1 )
  {
    _BitScanForward64(&v13, v11);
    v14 = (__int64)*(&KiProcessorBlock
                   + (unsigned int)KiProcessorNumberToIndexMappingTable[v12 + ((v2 + (_BYTE)v13) & 0x3F)]);
    v15 = *(_QWORD *)(v14 + 33856);
    v8 &= ~v15;
    v11 &= __ROR8__(~v15, v2);
    result = (_ETHREAD *)KiSearchForNewThreadOnProcessor((_KPRCB *)a1, 0i64, *(_KSHARED_READY_QUEUE **)(v14 + 33864));
    if( result )
      return(_KTHREAD *)result;
    if( !v11 )
    {
      v5 = v19;
      goto LABEL_14;
    }
  }
}

Referenced by:

KiSearchForNewThread