KiConfigureNodeSchedulingInformation

INT64 __fastcall KiConfigureNodeSchedulingInformation(INT64 a1){
  unsigned __int64 v1; 
  char v2; 
  __int64 v3; 
  int v4; 
  __int64 v6; 
  unsigned __int64 i; 
  __int64 v8; 
  __int64 v9; 
  unsigned __int64 v10; 
  INT64 result; 
  __int64 v12; 
  unsigned __int64 v13; 
  unsigned __int64 v14; 
  unsigned __int64 v15; 
  __int64 v16; 
  v1 = *(_QWORD *)(a1 + 136);
  v2 = HalpInterruptHyperThreading;
  v3 = 0i64;
  v4 = *(unsigned __int16 *)(a1 + 144);
  v6 = 0i64;
  for( i = v1; i; i &= ~v10 )
  {
    _BitScanForward64((unsigned __int64 *)&v8, i);
    v9 = (__int64)*(&KiProcessorBlock
                  + (unsigned int)KiProcessorNumberToIndexMappingTable[(unsigned int)((v4 << 6) + v8)]);
    if( v2 )
    {
      v10 = *(_QWORD *)(v9 + 33880);
      if( v10 != *(_QWORD *)(v9 + 200) )
        *(_BYTE *)(a1 + 181) |= 0x20u;
    }
    else
    {
      v10 = v1 & *(_QWORD *)(v9 + 8i64 * *(unsigned __int8 *)(v9 + 208) + 33688);
    }
    result = (unsigned int)v8;
    v6 |= 1i64 << v8;
  }
  v12 = 0i64;
  v13 = v1;
  if( v1 )
  {
    do
    {
      _BitScanForward64(&v14, v13);
      v12 |= 1i64 << v14;
      v13 &= ~*((_QWORD *)*(&KiProcessorBlock
                          + (unsigned int)KiProcessorNumberToIndexMappingTable[(unsigned int)((v4 << 6) + v14)])
              + 4237);
    }
    while( v13 );
    do
    {
      _BitScanForward64(&v15, v1);
      v16 = *((_QWORD *)*(&KiProcessorBlock
                        + (unsigned int)KiProcessorNumberToIndexMappingTable[(unsigned int)((v4 << 6) + v15)])
            + 4232);
      v3 |= v16;
      result = (unsigned int)v15;
      v1 &= ~v16 & ~(1i64 << v15);
    }
    while( v1 );
  }
  *(_QWORD *)(a1 + 160) = v6;
  *(_QWORD *)(a1 + 376) = v12;
  *(_QWORD *)(a1 + 152) = v3;
  return result;
}

Referenced by:

KiConfigureAllSchedulingInformation