PpmSetProfilePolicySetting
INT64 __stdcall PpmSetProfilePolicySetting(
VOID *hKey,
WCHAR *SubKey,
UINT64 RegOptions,
UINT64 DesiredAccess,
VOID **phkResult,
VOID *hTransaction){
unsigned int v6;
INT64 v7;
__int64 v10;
unsigned int v11;
GUID **v12;
INT64 v13;
unsigned int v14;
unsigned int v15;
unsigned __int8 v16;
__int64 v17;
__int64 v18;
unsigned int v19;
__int64 v20;
__int64 *v21;
__int64 v22;
char v23;
bool v24;
bool v26;
__int64 v27;
_QWORD *v28;
__int64 v29;
unsigned int v30;
__int64 v31;
__int64 v32;
__int64 v33;
bool v34;
char v35;
char v36;
bool v37;
INT64 v38;
__int64 v39;
INT64 v40;
__int64 v41;
unsigned int *v42;
GUID v43;
v6 = 0;
v7 = (int)RegOptions;
v42 = (unsigned int *)DesiredAccess;
v36 = 0;
v37 = 0;
if( !(_DWORD)phkResult || !DesiredAccess )
return(unsigned int)-1073741811;
if( (_DWORD)RegOptions )
goto LABEL_7;
v10 = *(_QWORD *)hKey - *(_QWORD *)&GUID_POWER_POLICY_PROFILE_LOW_POWER.Data1;
if( *(_QWORD *)hKey == *(_QWORD *)&GUID_POWER_POLICY_PROFILE_LOW_POWER.Data1 )
v10 = *((_QWORD *)hKey + 1) - *(_QWORD *)GUID_POWER_POLICY_PROFILE_LOW_POWER.Data4;
if( v10 )
{
LABEL_7:
v11 = 0;
v12 = &off_140CFAB48;
LABEL_8:
v13 = (INT64)(v12 - 1);
v14 = 0;
v15 = ((*((_BYTE *)v12 + 29) & 4) != 0) + 1;
v43 = **v12;
v16 = v43.Data4[7];
while( 1 )
{
v17 = *(_QWORD *)&v43.Data1 - *(_QWORD *)SubKey;
if( *(_QWORD *)&v43.Data1 == *(_QWORD *)SubKey )
v17 = *(_QWORD *)v43.Data4 - *((_QWORD *)SubKey + 1);
if( !v17 )
break;
++v16;
++v14;
v43.Data4[7] = v16;
if( v14 >= v15 )
{
++v11;
v12 += 5;
if( v11 < 0x35 )
goto LABEL_8;
return(unsigned int)-1073741275;
}
}
v18 = 1i64 << *(_BYTE *)(v13 + 36);
v19 = v14;
if( (*(_BYTE *)(v13 + 37) & 1) != 0 )
PpmAcquireLock(&PpmPerfPolicyLock);
else
PopAcquireRwLockExclusive((_POP_RW_LOCK *)&PpmIdlePolicyLock);
*(_QWORD *)&v43.Data1 = PpmCurrentProfile;
LODWORD(v38) = dword_140C23D0C;
v20 = *(_QWORD *)hKey - *(_QWORD *)&NullGuid.Data1;
if( *(_QWORD *)hKey == *(_QWORD *)&NullGuid.Data1 )
v20 = *((_QWORD *)hKey + 1) - *(_QWORD *)NullGuid.Data4;
if( v20 )
{
v30 = 0;
if( !PpmProfileCount )
{
LABEL_58:
PpmInfoReleaseLocks(v13);
return(unsigned int)-1073741275;
}
while( 1 )
{
v31 = PpmProfiles + 5552i64 * v30;
v32 = *(_QWORD *)(v31 + 12) - *(_QWORD *)hKey;
if( !v32 )
v32 = *(_QWORD *)(v31 + 20) - *((_QWORD *)hKey + 1);
if( !v32 )
break;
if( ++v30 >= (unsigned __int8)PpmProfileCount )
goto LABEL_58;
}
LODWORD(v39) = *(_DWORD *)(v13 + 32);
v33 = v31 + 2736 * v7 + 40;
v34 = (*(_BYTE *)(v13 + 37) & 4) == 0;
v40 = v33 + *(_QWORD *)(v13 + 24) + v14 * (unsigned int)v39;
if( !v34 && !v14 && (v18 & *(_QWORD *)(v33 + 8)) == 0 )
v19 = 1;
v35 = PpmInfoAdjustSetting(v13, v31 + 2736 * v7 + 40, v14, v19, v42, (unsigned int)phkResult);
*(_QWORD *)(v33 + 8i64 * v14) |= v18;
if( v35 )
{
PpmEventTraceProfileSetting(*(_BYTE *)(v31 + 8), *(_QWORD *)v13, *(_QWORD *)(v13 + 8), v14, v40, v39, v7, 0);
if( *(_QWORD *)&v43.Data1 == v31 )
v37 = (_DWORD)v38 == (_DWORD)v7;
if( PpmBackgroundProfile == v31 || PpmMultimediaQosProfile == v31 || PpmEntryLevelPerfProfile == v31 )
{
v24 = (_DWORD)v38 == (_DWORD)v7;
goto LABEL_23;
}
}
}
else
{
v40 = v7;
v41 = 2736 * v7;
v21 = &PpmDefaultProfile[342 * v7 + 5];
LODWORD(v39) = *(_DWORD *)(v13 + 32);
v22 = (__int64)v21 + *(_QWORD *)(v13 + 24) + v14 * (unsigned int)v39;
if( (*(_BYTE *)(v13 + 37) & 4) != 0 && !v14 && (v18 & v21[1]) == 0 )
{
v36 = 1;
v19 = 1;
}
v23 = PpmInfoAdjustSetting(v13, (__int64)&PpmDefaultProfile[342 * v7 + 5], v14, v19, v42, (unsigned int)phkResult);
v21[v14] |= v18;
if( v23 )
{
PpmEventTraceProfileSetting(byte_140C1ECA8, *(_QWORD *)v13, *(_QWORD *)(v13 + 8), v14, v22, v39, v7, 0);
v26 = 0;
if( *(__int64 **)&v43.Data1 == PpmDefaultProfile )
{
v26 = (_DWORD)v38 == (_DWORD)v7;
v37 = (_DWORD)v38 == (_DWORD)v7;
}
if( PpmProfileCount )
{
v27 = (unsigned __int8)PpmProfileCount;
v38 = (int)v38;
v28 = (_QWORD *)(v41 + 40 + PpmProfiles);
v39 = v41 + 40;
v29 = -40i64;
v41 = -40i64;
do
{
if( (*(_QWORD *)((char *)&v28[v14 + 5] + v29) & v18) == 0 && (!v14 || (v18 & *v28) == 0) )
{
if( (*(_BYTE *)(v13 + 37) & 4) != 0 && !v14 )
{
if( v36 )
{
if( (v18 & *(_QWORD *)((char *)v28 + v29 + 48)) == 0 )
v19 = 1;
}
else
{
v19 = 0;
}
}
PpmInfoAdjustSetting(v13, (__int64)v28, v14, v19, v42, (unsigned int)phkResult);
v29 = v41;
if( *(_QWORD **)&v43.Data1 == (_QWORD *)((char *)v28 - v39) && v38 == v40 )
v26 = 1;
}
v28 += 694;
--v27;
}
while( v27 );
v37 = v26;
}
}
}
v24 = 0;
LABEL_23:
LODWORD(v38) = 0;
if( v37 || PopHeteroSystem && PpmPerfSchedulerDirectedPerfStatesSupported && v24 )
{
v40 = 1i64 << *(_BYTE *)(v13 + 36);
PpmGetPolicyAction(&v40, &v38);
if( (*(_BYTE *)(v13 + 37) & 1) != 0 )
{
PpmReapplyPerfPolicy(&v38);
}
else
{
PpmReapplyIdlePolicy();
PopReleaseRwLock((UINT64)&PpmIdlePolicyLock);
}
}
else
{
PpmInfoReleaseLocks(v13);
}
}
return v6;
}Referenced by:
PopSetNewPolicyValue
PpmProcessSettingsFromQueryTable