PpmUpdateProcessorPolicy

VOID __stdcall PpmUpdateProcessorPolicy(_PPM_POLICY_ACTION_MASK *ActionMask){
  __int64 v1; 
  __int64 v2; 
  __int64 v4; 
  unsigned __int64 v5; 
  unsigned __int64 v6; 
  INT64 *v7; 
  unsigned int i; 
  __int64 v9; 
  unsigned __int64 v10; 
  unsigned __int64 v11; 
  UINT64 v12[2]; 
  _KAFFINITY_EX Affinity2; 

  v2 = v1;
  LODWORD(v12[0]) = 0;
  memset(Affinity2.Bitmap, 0i64, sizeof(Affinity2.Bitmap));
  v4 = *(&stru_140C00F40 + 365) + 2736i64 * *(&stru_140C23628 + 441);
  LOWORD(v12[0]) = *(&stru_140C23628 + 1764) & ActionMask->Value;
  if( !v2 && (v12[0] & 0x400) != 0 && (KeGetCurrentPrcb()->FeatureBits & 0x8000000000i64) != 0 )
  {
    v10 = __readmsr(0xDB0u);
    v11 = v10 & 0xFFFFFFFFFFFFFFFEui64;
    if( *(_BYTE *)(v4 + 160) )
      v11 = v10 | 1;
    __writemsr(0xDB0u, v11);
  }
  LODWORD(v12[0]) &= ~0x400u;
  if( LOWORD(v12[0]) )
  {
    v5 = (unsigned int)(10000 * *(_DWORD *)(v4 + 60));
    if( v5 <= (unsigned int)KeMaximumIncrement )
      LODWORD(v6) = 0;
    else
      v6 = (v5 - (unsigned int)KeMaximumIncrement) / 0x2710;
    *(&stru_140C23628 + 954) = v6;
    if( !*(&stru_140C23628 + 483) || (int)(*(&stru_140C23628 + 483))() >= 0 )
    {
      if( v2 )
      {
        v7 = *(INT64 **)v2;
      }
      else
      {
        v2 = PpmPerfDomainHead;
        v7 = &PpmPerfDomainHead;
      }
      *(_DWORD *)&Affinity2.Count = 1310721;
      memset(&Affinity2.Reserved, 0i64, 0xA4u);
      while( (INT64 *)v2 != v7 )
      {
        KeOrAffinityEx((INT8 *)(v2 + 24), &Affinity2.Count, (INT8 *)&Affinity2);
        for( i = 0; i < *(_DWORD *)(v2 + 200); ++i )
        {
          v9 = *(_QWORD *)(v2 + 216) + 136i64 * i;
          if( !*(_DWORD *)(v9 + 16) )
            PpmUpdateTargetProcessorPolicy(v2, v9, v12, v4 + 40);
        }
        v2 = *(_QWORD *)v2;
      }
      PopExecuteOnTargetProcessors(
        &PpmPerfStatesRegistered,
        (INT64 *)PpmUpdateProcessorPolicyCallback,
        (_KPRCB *)v12,
        v4 + 40,
        v12[0],
        v12[1],
        *(UINT64 *)&Affinity2.Count);
      if( *(&stru_140C23628 + 482) )
        (*(&stru_140C23628 + 482))();
    }
  }
}

Referenced by:

PpmCheckInitProcessors
PpmPerfReApplyStates
PpmReapplyPerfPolicy
PpmRegisterPerfStates