KiIntSteerCalculateDistribution

NTSTATUS __stdcall KiIntSteerCalculateDistribution(_KAFFINITY_EX *IntSteerMask, UINT64 ProcessorCount){
  unsigned __int64 v3; 
  unsigned int v4; 
  __int64 v5; 
  void *v6; 
  unsigned __int64 v7; 
  void *v8; 
  unsigned int v9; 
  unsigned int v10; 
  signed __int64 v11; 
  unsigned int v12; 
  unsigned __int64 v13; 
  __int64 v14; 
  unsigned __int64 v15; 
  __int64 v16; 
  signed __int64 v17; 
  void *v18; 
  INT64 *v19; 
  void *v20; 
  unsigned int v21; 
  __int64 i; 
  unsigned __int64 v23; 
  int v24; 
  int v25; 
  INT64 *v26; 
  __int64 v27; 
  INT64 v28; 
  __int64 v30; 
  unsigned int v31; 
  unsigned int v32; 
  INT64 *Base; 
  INT64 **p_Base; 
  UINT64 v35; 

  v3 = 4i64 * (unsigned int)ProcessorCount;
  v4 = ProcessorCount;
  v5 = v3 + 15;
  if( v3 + 15 <= v3 )
    v5 = 0xFFFFFFFFFFFFFF0i64;
  v11 = v5 & 0xFFFFFFFFFFFFFFF0ui64;
  v6 = alloca(v11);
  v7 = IntSteerMask->Bitmap[0];
  v8 = alloca(v11);
  v9 = 0;
  v10 = 0;
  LOWORD(v11) = 0;
  p_Base = &Base;
  while( 1 )
  {
    v12 = IntSteerMask ? IntSteerMask->Count : (unsigned __int16)v11 + 1;
    if( !v7 )
      break;
LABEL_7:
    _BitScanForward64(&v13, v7);
    v7 &= ~(1i64 << v13);
    v14 = v10++;
    *((_DWORD *)&Base + v14) = KiProcessorNumberToIndexMappingTable[64 * (unsigned __int16)v11 + (unsigned __int8)v13];
  }
  while( 1 )
  {
    v11 = (unsigned __int16)(v11 + 1);
    if( (unsigned int)v11 >= v12 )
      break;
    v7 = IntSteerMask->Bitmap[v11];
    if( v7 )
      goto LABEL_7;
  }
  v15 = 8i64 * (unsigned int)KiIntTrackRootCount;
  v16 = v15 + 15;
  if( v15 + 15 <= v15 )
    v16 = 0xFFFFFFFFFFFFFF0i64;
  v17 = v16 & 0xFFFFFFFFFFFFFFF0ui64;
  v18 = alloca(v17);
  v19 = *(INT64 **)&KiIntTrackRootList;
  v20 = alloca(v17);
  v21 = 0;
  for( i = (unsigned int)(KiIntTrackRootCount - 1); v19 != (INT64 *)&KiIntTrackRootList; v19 = (INT64 *)*v19 )
  {
    if( v19[24] )
    {
      v30 = v21++;
      (&Base)[v30] = v19;
    }
    else
    {
      (&Base)[i] = v19;
      i = (unsigned int)(i - 1);
    }
  }
  qsort((UINT64)&Base, v21, 8ui64, (INT64)KiIntSteerLoadCompare, Base, (UINT64)p_Base, v35);
  v24 = 0;
  v25 = 1;
  if( KiIntTrackRootCount )
  {
    do
    {
      v26 = (&Base)[v9];
      if( *((_BYTE *)v26 + 132)
        && (!v26[17] || KiIntSteerComputeCpuSet((_INTERRUPT_TRACKING_ROOT *)(&Base)[v9], v23) < 0) )
      {
        if( v26[24]
          || ((v27 = *((unsigned __int16 *)v26 + 84), v28 = v26[20], IntSteerMask->Count <= (unsigned __int16)v27) ? (v23 = 0i64) : (v23 = v28 & IntSteerMask->Bitmap[v27]),
              v23 != v28) )
        {
          LODWORD(v23) = KiProcessorIndexToNumberMappingTable[*((unsigned int *)p_Base + (unsigned int)v24)];
          *(_DWORD *)((char *)v26 + 186) = 0;
          *((_WORD *)v26 + 95) = 0;
          v31 = (unsigned int)v23 >> 6;
          LOBYTE(v23) = v23 & 0x3F;
          *((_WORD *)v26 + 92) = v31;
          v26[22] = 1i64 << v23;
          v32 = v24 + v25;
          if( v24 + v25 >= v4 )
            v25 = -1;
          v24 = v4 - 1;
          if( v32 < v4 )
            v24 = v32;
          if( v24 < 0 )
          {
            v25 = 1;
            v24 = 0;
          }
        }
        else
        {
          v26[22] = v28;
        }
      }
      ++v9;
    }
    while( v9 < KiIntTrackRootCount );
  }
  return 0;
}

Referenced by:

KeIntSteerPeriodic