PpmCompareAndApplyPolicySettings
VOID __fastcall PpmCompareAndApplyPolicySettings(INT64 *a1, INT64 a2, INT64 a3){
int v3;
INT64 v4;
INT64 v5;
__int64 v6;
bool v7;
__int64 v8;
INT64 v9;
__int64 v10;
unsigned int v11;
INT64 v12;
__int64 v13;
unsigned int v14;
__int64 v15;
__int64 v16;
__int64 v17;
INT64 v18;
INT64 v19;
INT64 v20;
INT64 v21;
v20 = a3;
v19 = a2;
v3 = 0;
LODWORD(v18) = 0;
LODWORD(v21) = 0;
if( PopHeteroSystem && PpmPerfSchedulerDirectedPerfStatesSupported )
{
v3 = 4098;
LODWORD(v18) = 4098;
}
v4 = *a1;
v21 = 0i64;
v5 = 0i64;
v6 = v4 & 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 = *((unsigned int *)&PpmPolicyConfigTable + 2 * v10 + 8);
v16 = *((_QWORD *)&PpmPolicyConfigTable + v10 + 3) + v11 * *((_DWORD *)&PpmPolicyConfigTable + 2 * v10 + 8);
if( RtlCompareMemory((VOID *)(v16 + v12), (VOID *)(v16 + v9), (unsigned int)v15) != v15 )
v5 |= v13;
++v11;
}
while( v11 < v14 );
v6 = v17;
v7 = !_BitScanForward64((unsigned __int64 *)&v8, v17);
v21 = v5;
}
while( !v7 );
v3 = v18;
if( v5 )
{
PpmGetPolicyAction(&v21, &v18);
v3 = v18;
}
}
}
if( (v3 & 1) != 0 )
{
PpmReapplyIdlePolicy();
v3 &= ~1u;
LODWORD(v18) = v3;
}
PopReleaseRwLock((UINT64)&PpmIdlePolicyLock);
if( (_WORD)v3 )
PpmReapplyPerfPolicy(&v18);
else
PpmReleaseLock(&PpmPerfPolicyLock);
}Referenced by:
PpmApplyProfile
PpmProfileAcDcUpdate