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