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