PpmParkSteerInterrupts

UINT8 __stdcall PpmParkSteerInterrupts(){
  unsigned int v0; 
  unsigned int v1; 
  unsigned int v2; 
  unsigned __int64 CurrentMask; 
  __int64 v4; 
  unsigned __int64 v5; 
  unsigned int v6; 
  unsigned int v7; 
  __int64 v8; 
  __int64 v9; 
  unsigned __int64 v10; 
  unsigned int v11; 
  unsigned __int64 *Bitmap; 
  __int64 Count; 
  unsigned __int64 v14; 
  bool v15; 
  int v16; 
  unsigned __int64 v17; 
  UINT64 v19; 
  VOID **PoolWithTag; 
  unsigned int FirstSetRightAffinity; 
  int v22; 
  unsigned __int64 v23; 
  UINT64 ProcIndex; 
  _KAFFINITY_ENUMERATION_CONTEXT Context; 
  __int64 ReturnedCurrentTime[2]; 
  _KAFFINITY_EX Affinity; 
  _KAFFINITY_EX Affinity1; 
  _KAFFINITY_EX Result; 
  _KAFFINITY_EX Affinity2; 
  _KAFFINITY_EX v31; 

  ReturnedCurrentTime[0] = 0i64;
  memset(&Context, 0, sizeof(Context));
  memset(&Affinity, 0i64, sizeof(Affinity));
  memset(Affinity1.Bitmap, 0i64, sizeof(Affinity1.Bitmap));
  memset(&Result, 0i64, sizeof(Result));
  memset(&Affinity2, 0i64, sizeof(Affinity2));
  memset(&v31, 0i64, sizeof(v31));
  ProcIndex = 0i64;
  if( PpmIntSteerDisabled || !KiIntTrackRootEnabled )
    return 1;
  if( !PpmIntSteerTrigger )
  {
    v19 = (unsigned int)(8 * HalQueryMaximumProcessorCount());
    PoolWithTag = ExAllocatePoolWithTag(0x200ui64, v19, 1802654793i64);
    PpmIntSteerTrigger = (__int64)PoolWithTag;
    if( !PoolWithTag )
      return 1;
    memset(PoolWithTag, 0i64, v19);
  }
  KeIntSteerSnapPerf((UINT64 *)((char *)&ProcIndex + 4), (UINT64 *)ReturnedCurrentTime);
  KeComplementAffinityEx(&Result, &PpmPerfCoreParkingMask);
  KeQuerySystemAllowedCpuSetAffinity(&PpmCachedSystemAllowedCpuSet, &PpmCachedSystemAllowedCpuSetVersion);
  KeAndAffinityEx(&Result.Count, &PpmCachedSystemAllowedCpuSet.Count, (INT8 *)&Result);
  *(_DWORD *)&Affinity1.Count = 1310721;
  v0 = 0;
  v1 = 0;
  v2 = 0;
  memset(&Affinity1.Reserved, 0i64, 0xA4u);
  CurrentMask = KeActiveProcessors.Bitmap[0];
  v4 = ReturnedCurrentTime[0];
  Context.Affinity = &KeActiveProcessors;
  while( CurrentMask )
  {
LABEL_6:
    ++v0;
    _BitScanForward64(&v5, CurrentMask);
    CurrentMask &= ~(1i64 << v5);
    LODWORD(ProcIndex) = KiProcessorNumberToIndexMappingTable[64 * Context.CurrentIndex + (unsigned __int8)v5];
    v6 = KiProcessorIndexToNumberMappingTable[(unsigned int)ProcIndex];
    v7 = v6 & 0x3F;
    if( ((Result.Bitmap[(unsigned __int64)v6 >> 6] >> (KiProcessorIndexToNumberMappingTable[(unsigned int)ProcIndex] & 0x3F)) & 1) != 0 )
    {
      ++v2;
      v8 = *(_QWORD *)(PpmIntSteerTrigger + 8i64 * (unsigned int)ProcIndex);
      if( !v8 )
      {
        v8 = v4;
        *(_QWORD *)(PpmIntSteerTrigger + 8i64 * (unsigned int)ProcIndex) = v4;
      }
      if( v4 - v8 >= (unsigned __int64)(10000 * PpmIntSteerTriggerMax) )
      {
        v9 = v6 >> 6;
        if( Affinity1.Count <= (unsigned int)v9 )
          Affinity1.Count = v9 + 1;
        v10 = Affinity1.Bitmap[v9];
        _bittestandset64((__int64 *)&v10, v7);
        Affinity1.Bitmap[v9] = v10;
        ++v1;
      }
    }
    else
    {
      *(_QWORD *)(8i64 * (unsigned int)ProcIndex + PpmIntSteerTrigger) = 0i64;
    }
  }
  while( ++Context.CurrentIndex < (unsigned int)KeActiveProcessors.Count )
  {
    Context.CurrentMask = KeActiveProcessors.Bitmap[Context.CurrentIndex];
    CurrentMask = Context.CurrentMask;
    if( Context.CurrentMask )
    {
      v4 = ReturnedCurrentTime[0];
      goto LABEL_6;
    }
  }
  if( !v1 )
  {
    if( v2 )
    {
      KeCopyAffinityEx(&Affinity1, &Result);
      v1 = v2;
    }
    else
    {
      FirstSetRightAffinity = KeFindFirstSetRightAffinityEx(&PpmCachedSystemAllowedCpuSet.Count);
      if( FirstSetRightAffinity == -1 )
        FirstSetRightAffinity = 0;
      LODWORD(ProcIndex) = FirstSetRightAffinity;
      KeAddProcessorAffinityEx(&Affinity1.Count, FirstSetRightAffinity);
      v1 = 1;
    }
  }
  if( PpmIntSteerMode < 1 )
    goto LABEL_16;
  switch( PpmIntSteerMode )
  {
    case 1:
      KeCopyAffinityEx(&Affinity, &KeActiveProcessors);
      v2 = v0;
      break;
    case 2:
      KeCopyAffinityEx(&Affinity, &Affinity1);
      v2 = v1;
      break;
    case 3:
      KeCopyAffinityEx(&Affinity, &Result);
      break;
    default:
      if( (unsigned int)(PpmIntSteerMode - 5) > 1 )
      {
LABEL_16:
        v2 = (PpmIntSteerLoadMax + HIDWORD(ProcIndex)) / (unsigned int)PpmIntSteerLoadMax;
        if( v2 >= v1 )
        {
          v2 = v1;
          KeCopyAffinityEx(&Affinity, &Affinity1);
        }
        else
        {
          *(_DWORD *)&Affinity.Count = 1310721;
          memset(&Affinity.Reserved, 0i64, 0xA4u);
          *(_DWORD *)&Affinity2.Count = 1310721;
          memset(&Affinity2.Reserved, 0i64, 0xA4u);
          if( *(&stru_140C23628 + 479) )
            (*(&stru_140C23628 + 479))(
              1i64,
              *(&PopIrpWorkerControlEvent + 152),
              v2,
              &Affinity1,
              0i64,
              0i64,
              &Affinity2,
              &Affinity);
          v11 = 0;
          if( Affinity.Count )
          {
            Bitmap = Affinity.Bitmap;
            Count = Affinity.Count;
            do
            {
              v14 = *Bitmap++;
              v11 += (unsigned int)((0x101010101010101i64
                                   * ((((v14 - ((v14 >> 1) & 0x5555555555555555i64)) & 0x3333333333333333i64)
                                     + (((v14 - ((v14 >> 1) & 0x5555555555555555i64)) >> 2) & 0x3333333333333333i64)
                                     + ((((v14 - ((v14 >> 1) & 0x5555555555555555i64)) & 0x3333333333333333i64)
                                       + (((v14 - ((v14 >> 1) & 0x5555555555555555i64)) >> 2) & 0x3333333333333333i64)) >> 4)) & 0xF0F0F0F0F0F0F0Fi64)) >> 32) >> 24;
              --Count;
            }
            while( Count );
          }
          v15 = v11 < v2;
          if( v11 > v2 )
          {
            *(_DWORD *)&Affinity.Count = 1310721;
            memset(&Affinity.Reserved, 0i64, 0xA4u);
            v15 = v2 != 0;
            v11 = 0;
          }
          if( v15 )
          {
            KeSubtractAffinityEx(&Affinity1.Count, (INT8 *)&Affinity2, (INT8 *)&v31);
            Context.CurrentMask = v31.Bitmap[0];
            Context.Affinity = &v31;
            Context.CurrentIndex = 0;
            while( 1 )
            {
              KeEnumerateNextProcessor(&ProcIndex, &Context);
              if( v16 )
                break;
              v17 = (unsigned int)KiProcessorIndexToNumberMappingTable[(unsigned int)ProcIndex];
              if( ((Affinity.Bitmap[v17 >> 6] >> (v17 & 0x3F)) & 1) == 0 )
              {
                KeAddProcessorAffinityEx(&Affinity.Count, (unsigned int)ProcIndex);
                if( ++v11 >= v2 )
                  goto LABEL_29;
              }
            }
            if( v11 < v2 )
            {
              Context.CurrentMask = Affinity1.Bitmap[0];
              Context.Affinity = &Affinity1;
              Context.CurrentIndex = 0;
              while( 1 )
              {
                KeEnumerateNextProcessor(&ProcIndex, &Context);
                if( v22 )
                  break;
                v23 = (unsigned int)KiProcessorIndexToNumberMappingTable[(unsigned int)ProcIndex];
                if( ((Affinity.Bitmap[v23 >> 6] >> (v23 & 0x3F)) & 1) == 0 )
                {
                  KeAddProcessorAffinityEx(&Affinity.Count, (unsigned int)ProcIndex);
                  if( ++v11 >= v2 )
                    break;
                }
              }
            }
          }
        }
        break;
      }
      *(_DWORD *)&Affinity.Count = 1310721;
      memset(&Affinity.Reserved, 0i64, 0xA4u);
      KeAddProcessorAffinityEx(&Affinity.Count, (unsigned int)(PpmIntSteerMode - 5));
      v2 = 1;
      break;
  }
LABEL_29:
  if( KeIsEmptyAffinityEx(&Affinity.Count) )
    KeAddProcessorAffinityEx(&Affinity.Count, 0i64);
  KeIntSteerPeriodic(&Affinity, v2);
  return 1;
}

Referenced by:

No references.