PpmCompareAndApplyPolicySettings

VOID __stdcall PpmCompareAndApplyPolicySettings(
        _PPM_POLICY_SETTINGS_MASK *UpdateMask,
        _PPM_ENGINE_SETTINGS *Settings1,
        _PPM_ENGINE_SETTINGS *Settings2){
  _PPM_POLICY_ACTION_MASK v3; 
  unsigned __int64 Value; 
  _PPM_POLICY_SETTINGS_MASK v5; 
  __int64 v6; 
  bool v7; 
  __int64 v8; 
  _PPM_ENGINE_SETTINGS *v9; 
  __int64 v10; 
  unsigned int v11; 
  _PPM_ENGINE_SETTINGS *v12; 
  __int64 v13; 
  unsigned int v14; 
  _SIZE_T *v15; 
  UINT64 v16; 
  __int64 v17; 
  _PPM_POLICY_ACTION_MASK ActionMask; 
  _PPM_ENGINE_SETTINGS *v19; 
  _PPM_ENGINE_SETTINGS *v20; 
  _PPM_POLICY_SETTINGS_MASK SettingMask; 

  v20 = Settings2;
  v19 = Settings1;
  v3 = 0;
  ActionMask = 0;
  SettingMask._bf_0 = 0;
  if( PopHeteroSystem && PpmPerfSchedulerDirectedPerfStatesSupported )
  {
    v3 = (_PPM_POLICY_ACTION_MASK)4098;
    ActionMask = (_PPM_POLICY_ACTION_MASK)4098;
  }
  Value = UpdateMask->Value;
  SettingMask.Value = 0i64;
  v5.Value = 0i64;
  v6 = Value & 0x1CFFFFD8030FC0i64;
  if( v6 )
  {
    v7 = !_BitScanForward64((unsigned __int64 *)&v8, v6);
    if( !v7 )
    {
      v9 = v20;
      do
      {
        v10 = 5 * v8;
        v17 = v6 & ~(1i64 << v8);
        v11 = 0;
        v12 = v19;
        v13 = 1i64 << *((_BYTE *)&PpmPolicyConfigTable + 40 * v8 + 36);
        v14 = ((*((_BYTE *)&PpmPolicyConfigTable + 40 * v8 + 37) & 4) != 0) + 1;
        do
        {
          v15 = (_SIZE_T *)*((unsigned int *)&PpmPolicyConfigTable + 2 * v10 + 8);
          v16 = *(&PpmPolicyConfigTable + v10 + 3) + v11 * *((_DWORD *)&PpmPolicyConfigTable + 2 * v10 + 8);
          if( RtlCompareMemory((char *)v12 + v16, (char *)v9 + v16, *((_DWORD *)&PpmPolicyConfigTable + 2 * v10 + 8)) != v15 )
            v5.Value |= v13;
          ++v11;
        }
        while( v11 < v14 );
        v6 = v17;
        v7 = !_BitScanForward64((unsigned __int64 *)&v8, v17);
        SettingMask.Value = v5.Value;
      }
      while( !v7 );
      v3 = ActionMask;
      if( v5.Value )
      {
        PpmGetPolicyAction(&SettingMask, &ActionMask);
        v3 = ActionMask;
      }
    }
  }
  if( (v3.Value & 1) != 0 )
  {
    PpmReapplyIdlePolicy();
    *(_DWORD *)&v3 &= ~1u;
    ActionMask = v3;
  }
  PopReleaseRwLock((_POP_RW_LOCK *)((char *)&stru_140C23628 + 984));
  if( v3.Value )
    PpmReapplyPerfPolicy(&ActionMask);
  else
    PpmReleaseLock((INT64 *)&stru_140C23628 + 131);
}

Referenced by:

PpmApplyProfile
PpmProfileAcDcUpdate