PpmParkSteerInterrupts

INT64 __fastcall PpmParkSteerInterrupts(){
  INT64 PoolWithTag; 
  unsigned int v1; 
  unsigned int v2; 
  unsigned int v3; 
  unsigned __int64 v4; 
  __int64 v5; 
  unsigned __int64 v6; 
  unsigned int v7; 
  unsigned int v8; 
  __int64 v9; 
  __int64 v10; 
  unsigned __int64 v11; 
  int v12; 
  unsigned int v13; 
  unsigned __int64 *Bitmap; 
  __int64 Count; 
  unsigned __int64 v16; 
  bool v17; 
  unsigned __int64 v18; 
  int MaximumProcessorCount; 
  int FirstSetRightAffinity; 
  unsigned __int64 v21; 
  unsigned int v22; 
  int v23; 
  __int128 v24; 
  __int64 v25; 
  __int64 v26; 
  _KAFFINITY_EX result; 
  _KAFFINITY_EX Affinity1; 
  _KAFFINITY_EX v29; 
  _KAFFINITY_EX v30; 
  _KAFFINITY_EX v31; 
  v26 = 0i64;
  v25 = 0i64;
  v24 = 0i64;
  memset((INT64)&result, 0i64);
  memset((INT64)Affinity1.Bitmap, 0i64);
  memset((INT64)&v29, 0i64);
  memset((INT64)&v30, 0i64);
  PoolWithTag = memset((INT64)&v31, 0i64);
  v23 = 0;
  v22 = 0;
  if( PpmIntSteerDisabled )
    goto LABEL_32;
  PoolWithTag = (unsigned int)KiIntTrackRootEnabled;
  if( !KiIntTrackRootEnabled )
    goto LABEL_32;
  if( !PpmIntSteerTrigger )
  {
    MaximumProcessorCount = HalQueryMaximumProcessorCount();
    PoolWithTag = (INT64)ExAllocatePoolWithTag(
                           NonPagedPoolNx,
                           (unsigned int)(8 * MaximumProcessorCount),
                           0x6B725449ui64);
    PpmIntSteerTrigger = PoolWithTag;
    if( !PoolWithTag )
      goto LABEL_32;
    memset(PoolWithTag, 0i64);
  }
  KeIntSteerSnapPerf(&v23, &v26);
  KeComplementAffinityEx((__int64)&v29, &PpmPerfCoreParkingMask);
  KeQuerySystemAllowedCpuSetAffinity(&PpmCachedSystemAllowedCpuSet, &PpmCachedSystemAllowedCpuSetVersion);
  KeAndAffinityEx(&v29, &PpmCachedSystemAllowedCpuSet, &v29);
  *(_DWORD *)&Affinity1.Count = 1310721;
  v1 = 0;
  v2 = 0;
  v3 = 0;
  memset((INT64)&Affinity1.Reserved, 0i64);
  v4 = KeActiveProcessors.Bitmap[0];
  v5 = v26;
  *(_QWORD *)&v24 = &KeActiveProcessors;
  while( v4 )
  {
LABEL_6:
    ++v1;
    _BitScanForward64(&v6, v4);
    v4 &= ~(1i64 << v6);
    v22 = KiProcessorNumberToIndexMappingTable[64 * (unsigned __int16)v25 + (unsigned __int8)v6];
    v7 = KiProcessorIndexToNumberMappingTable[v22];
    v8 = v7 & 0x3F;
    if( ((v29.Bitmap[(unsigned __int64)v7 >> 6] >> (KiProcessorIndexToNumberMappingTable[v22] & 0x3F)) & 1) != 0 )
    {
      ++v3;
      v9 = *(_QWORD *)(PpmIntSteerTrigger + 8i64 * v22);
      if( !v9 )
      {
        v9 = v5;
        *(_QWORD *)(PpmIntSteerTrigger + 8i64 * v22) = v5;
      }
      if( v5 - v9 >= (unsigned __int64)(10000 * PpmIntSteerTriggerMax) )
      {
        v10 = v7 >> 6;
        if( Affinity1.Count <= (unsigned int)v10 )
          Affinity1.Count = v10 + 1;
        v11 = Affinity1.Bitmap[v10];
        _bittestandset64((__int64 *)&v11, v8);
        Affinity1.Bitmap[v10] = v11;
        ++v2;
      }
    }
    else
    {
      *(_QWORD *)(8i64 * v22 + PpmIntSteerTrigger) = 0i64;
    }
  }
  while( 1 )
  {
    LOWORD(v25) = v25 + 1;
    if( (unsigned __int16)v25 >= (unsigned int)KeActiveProcessors.Count )
      break;
    *((_QWORD *)&v24 + 1) = KeActiveProcessors.Bitmap[(unsigned __int16)v25];
    v4 = *((_QWORD *)&v24 + 1);
    if( *((_QWORD *)&v24 + 1) )
    {
      v5 = v26;
      goto LABEL_6;
    }
  }
  if( !v2 )
  {
    if( v3 )
    {
      KeCopyAffinityEx((__int64)&Affinity1, &v29.Count);
      v2 = v3;
    }
    else
    {
      FirstSetRightAffinity = KeFindFirstSetRightAffinityEx(&PpmCachedSystemAllowedCpuSet);
      if( FirstSetRightAffinity == -1 )
        FirstSetRightAffinity = 0;
      v22 = FirstSetRightAffinity;
      KeAddProcessorAffinityEx(&Affinity1, FirstSetRightAffinity);
      v2 = 1;
    }
  }
  v12 = PpmIntSteerMode;
  if( PpmIntSteerMode < 1 )
    goto LABEL_16;
  switch( PpmIntSteerMode )
  {
    case 1:
      KeCopyAffinityEx((__int64)&result, &KeActiveProcessors.Count);
      v3 = v1;
      break;
    case 2:
      KeCopyAffinityEx((__int64)&result, &Affinity1.Count);
      v3 = v2;
      break;
    case 3:
      KeCopyAffinityEx((__int64)&result, &v29.Count);
      break;
    default:
      if( (unsigned int)(PpmIntSteerMode - 5) > 1 )
      {
LABEL_16:
        v3 = (PpmIntSteerLoadMax + v23) / (unsigned int)PpmIntSteerLoadMax;
        if( v3 >= v2 )
        {
          v3 = v2;
          KeCopyAffinityEx((__int64)&result, &Affinity1.Count);
        }
        else
        {
          *(_DWORD *)&result.Count = 1310721;
          memset((INT64)&result.Reserved, 0i64);
          *(_DWORD *)&v30.Count = 1310721;
          memset((INT64)&v30.Reserved, 0i64);
          if( PpmParkPreferenceHandler )
            PpmParkPreferenceHandler(1i64, PpmCheckTime, v3, &Affinity1, 0i64, 0i64, &v30, &result);
          v13 = 0;
          if( result.Count )
          {
            Bitmap = result.Bitmap;
            Count = result.Count;
            do
            {
              v16 = *Bitmap++;
              v13 += (unsigned int)((0x101010101010101i64
                                   * ((((v16 - ((v16 >> 1) & 0x5555555555555555i64)) & 0x3333333333333333i64)
                                     + (((v16 - ((v16 >> 1) & 0x5555555555555555i64)) >> 2) & 0x3333333333333333i64)
                                     + ((((v16 - ((v16 >> 1) & 0x5555555555555555i64)) & 0x3333333333333333i64)
                                       + (((v16 - ((v16 >> 1) & 0x5555555555555555i64)) >> 2) & 0x3333333333333333i64)) >> 4)) & 0xF0F0F0F0F0F0F0Fi64)) >> 32) >> 24;
              --Count;
            }
            while( Count );
          }
          v17 = v13 < v3;
          if( v13 > v3 )
          {
            *(_DWORD *)&result.Count = 1310721;
            memset((INT64)&result.Reserved, 0i64);
            v17 = v3 != 0;
            v13 = 0;
          }
          if( v17 )
          {
            KeSubtractAffinityEx(&Affinity1, &v30, &v31);
            *((_QWORD *)&v24 + 1) = v31.Bitmap[0];
            *(_QWORD *)&v24 = &v31;
            LOWORD(v25) = 0;
            while( !(unsigned int)KeEnumerateNextProcessor(&v22, (unsigned __int16 **)&v24) )
            {
              v18 = (unsigned int)KiProcessorIndexToNumberMappingTable[v22];
              if( ((result.Bitmap[v18 >> 6] >> (v18 & 0x3F)) & 1) == 0 )
              {
                KeAddProcessorAffinityEx(&result, v22);
                if( ++v13 >= v3 )
                  goto LABEL_29;
              }
            }
            if( v13 < v3 )
            {
              *((_QWORD *)&v24 + 1) = Affinity1.Bitmap[0];
              *(_QWORD *)&v24 = &Affinity1;
              LOWORD(v25) = 0;
              while( !(unsigned int)KeEnumerateNextProcessor(&v22, (unsigned __int16 **)&v24) )
              {
                v21 = (unsigned int)KiProcessorIndexToNumberMappingTable[v22];
                if( ((result.Bitmap[v21 >> 6] >> (v21 & 0x3F)) & 1) == 0 )
                {
                  KeAddProcessorAffinityEx(&result, v22);
                  if( ++v13 >= v3 )
                    break;
                }
              }
            }
          }
        }
        break;
      }
      *(_DWORD *)&result.Count = 1310721;
      memset((INT64)&result.Reserved, 0i64);
      KeAddProcessorAffinityEx(&result, v12 - 5);
      v3 = 1;
      break;
  }
LABEL_29:
  if( (unsigned int)KeIsEmptyAffinityEx(&result) )
    KeAddProcessorAffinityEx(&result, 0);
  LODWORD(PoolWithTag) = KeIntSteerPeriodic(&result, v3);
LABEL_32:
  LOBYTE(PoolWithTag) = 1;
  return PoolWithTag;
}

Referenced by:

No references.