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