PpmSetProfilePolicySetting

NTSTATUS __stdcall PpmSetProfilePolicySetting(
        _GUID *ProfileGuid,
        _GUID *SettingGuid,
        _SYSTEM_POWER_CONDITION PowerCondition,
        UINT8 *NewValue,
        UINT64 ValueLength){
  NTSTATUS v5; 
  _PPM_POLICY_SETTINGS_MASK v6; 
  __int64 v9; 
  unsigned int v10; 
  GUID **v11; 
  INT64 v12; 
  unsigned int v13; 
  unsigned int v14; 
  unsigned __int8 v15; 
  __int64 v16; 
  __int64 v17; 
  unsigned int v18; 
  __int64 v19; 
  _PPM_ENGINE_SETTINGS *v20; 
  UINT8 *v21; 
  UINT8 v22; 
  char v23; 
  char v25; 
  __int64 v26; 
  _PPM_ENGINE_SETTINGS *v27; 
  __int64 v28; 
  unsigned int v29; 
  __int64 v30; 
  __int64 v31; 
  unsigned __int64 v32; 
  bool v33; 
  UINT8 v34; 
  char v35; 
  UINT64 SettingValueSize; 
  UINT64 SettingValueSizea; 
  UINT64 SettingValueSizeb; 
  UINT64 SettingValueSizec; 
  _SYSTEM_POWER_CONDITION v40; 
  char v41; 
  char v42; 
  INT64 v43; 
  _PPM_POLICY_ACTION_MASK ActionMask[2]; 
  UINT64 v45; 
  _PPM_POLICY_SETTINGS_MASK SettingMask; 
  __int64 v47; 
  UINT8 *v48; 
  GUID v49; 

  v5 = 0;
  v6.Value = PowerCondition;
  v48 = NewValue;
  LOBYTE(v40) = 0;
  v42 = 0;
  LOBYTE(v43) = 0;
  if( !(_DWORD)ValueLength || !NewValue )
    return -1073741811;
  if( PowerCondition )
    goto LABEL_7;
  v9 = *(_QWORD *)&ProfileGuid->Data1 - *(_QWORD *)&GUID_POWER_POLICY_PROFILE_LOW_POWER.Data1;
  if( *(_QWORD *)&ProfileGuid->Data1 == *(_QWORD *)&GUID_POWER_POLICY_PROFILE_LOW_POWER.Data1 )
    v9 = *(_QWORD *)ProfileGuid->Data4 - *(_QWORD *)GUID_POWER_POLICY_PROFILE_LOW_POWER.Data4;
  if( v9 )
  {
LABEL_7:
    v10 = 0;
    v11 = &off_140CFAB48;
LABEL_8:
    v12 = (INT64)(v11 - 1);
    v13 = 0;
    v14 = ((*((_BYTE *)v11 + 29) & 4) != 0) + 1;
    v49 = **v11;
    v15 = v49.Data4[7];
    while( 1 )
    {
      v16 = *(_QWORD *)&v49.Data1 - *(_QWORD *)&SettingGuid->Data1;
      if( *(_QWORD *)&v49.Data1 == *(_QWORD *)&SettingGuid->Data1 )
        v16 = *(_QWORD *)v49.Data4 - *(_QWORD *)SettingGuid->Data4;
      if( !v16 )
        break;
      ++v15;
      ++v13;
      v49.Data4[7] = v15;
      if( v13 >= v14 )
      {
        ++v10;
        v11 += 5;
        if( v10 < 0x35 )
          goto LABEL_8;
        return -1073741275;
      }
    }
    v17 = 1i64 << *(_BYTE *)(v12 + 36);
    v18 = v13;
    if( (*(_BYTE *)(v12 + 37) & 1) != 0 )
      PpmAcquireLock((_PPM_LOCK *)((char *)&stru_140C23628 + 1048));
    else
      PopAcquireRwLockExclusive((_POP_RW_LOCK *)((char *)&stru_140C23628 + 984));
    *(_QWORD *)&v49.Data1 = *(&stru_140C00F40 + 365);
    ActionMask[0] = (_PPM_POLICY_ACTION_MASK)*(&stru_140C23628 + 441);
    v19 = *(_QWORD *)&ProfileGuid->Data1 - *(_QWORD *)&NullGuid.Data1;
    if( *(_QWORD *)&ProfileGuid->Data1 == *(_QWORD *)&NullGuid.Data1 )
      v19 = *(_QWORD *)ProfileGuid->Data4 - *(_QWORD *)NullGuid.Data4;
    if( v19 )
    {
      v29 = 0;
      if( !PpmProfileCount )
      {
LABEL_60:
        PpmInfoReleaseLocks(v12);
        return -1073741275;
      }
      while( 1 )
      {
        v30 = PpmProfiles + 5552i64 * v29;
        v31 = *(_QWORD *)(v30 + 12) - *(_QWORD *)&ProfileGuid->Data1;
        if( !v31 )
          v31 = *(_QWORD *)(v30 + 20) - *(_QWORD *)ProfileGuid->Data4;
        if( !v31 )
          break;
        if( ++v29 >= (unsigned __int8)PpmProfileCount )
          goto LABEL_60;
      }
      LODWORD(v45) = *(_DWORD *)(v12 + 32);
      v32 = v30 + 2736 * v6.Value + 40;
      v33 = (*(_BYTE *)(v12 + 37) & 4) == 0;
      SettingMask.Value = v32 + *(_QWORD *)(v12 + 24) + v13 * (unsigned int)v45;
      if( !v33 && !v13 && (v17 & *(_QWORD *)(v32 + 8)) == 0 )
        v18 = 1;
      LODWORD(SettingValueSize) = ValueLength;
      v34 = PpmInfoAdjustSetting(
              (_PPM_POLICY_CONFIG_ENTRY *)v12,
              (_PPM_ENGINE_SETTINGS *)(v30 + 2736 * v6.Value + 40),
              v13,
              v18,
              v48,
              SettingValueSize);
      *(_QWORD *)(v32 + 8i64 * v13) |= v17;
      if( v34 )
      {
        LODWORD(SettingValueSizec) = v45;
        PpmEventTraceProfileSetting(
          *(_BYTE *)(v30 + 8),
          *(INT8 **)v12,
          *(_GUID **)(v12 + 8),
          v13,
          (UINT8 *)SettingMask.Value,
          SettingValueSizec,
          v6._bf_0,
          0,
          v40,
          v43);
        if( *(_QWORD *)&v49.Data1 == v30 )
        {
          v35 = v42;
          if( *(_DWORD *)ActionMask == v6._bf_0 )
            v35 = 1;
          v42 = v35;
        }
        if( PpmBackgroundProfile == v30 || PpmMultimediaQosProfile == v30 || PpmEntryLevelPerfProfile == v30 )
        {
          v23 = v43;
          if( *(_DWORD *)ActionMask == v6._bf_0 )
            v23 = 1;
          goto LABEL_23;
        }
      }
    }
    else
    {
      SettingMask.Value = v6.Value;
      v47 = 2736 * v6.Value;
      v20 = &PpmDefaultProfile.Settings[v6.Value];
      LODWORD(v45) = *(_DWORD *)(v12 + 32);
      v21 = (UINT8 *)v20 + *(_QWORD *)(v12 + 24) + v13 * (unsigned int)v45;
      if( (*(_BYTE *)(v12 + 37) & 4) != 0 && !v13 && (v17 & v20->ExplicitSetting[1].Value) == 0 )
      {
        LOBYTE(v40) = 1;
        v18 = 1;
      }
      LODWORD(SettingValueSize) = ValueLength;
      v22 = PpmInfoAdjustSetting(
              (_PPM_POLICY_CONFIG_ENTRY *)v12,
              &PpmDefaultProfile.Settings[v6.Value],
              v13,
              v18,
              v48,
              SettingValueSize);
      v20->ExplicitSetting[v13].Value |= v17;
      if( v22 )
      {
        LODWORD(SettingValueSizea) = v45;
        PpmEventTraceProfileSetting(
          PpmDefaultProfile.Id,
          *(INT8 **)v12,
          *(_GUID **)(v12 + 8),
          v13,
          v21,
          SettingValueSizea,
          v6._bf_0,
          0,
          v40,
          v43);
        v25 = v42;
        if( *(_POP_PPM_PROFILE **)&v49.Data1 == &PpmDefaultProfile )
        {
          v25 = v42;
          if( *(_DWORD *)ActionMask == v6._bf_0 )
            v25 = 1;
          v42 = v25;
        }
        if( PpmProfileCount )
        {
          v26 = (unsigned __int8)PpmProfileCount;
          *(_QWORD *)&ActionMask[0].Value = (int)ActionMask[0];
          v27 = (_PPM_ENGINE_SETTINGS *)(v47 + 40 + PpmProfiles);
          v45 = v47 + 40;
          v28 = -40i64;
          v47 = -40i64;
          do
          {
            if( (*(_QWORD *)&v27->PerfIncreaseThreshold[8 * v13 + v28] & v17) == 0
              && (!v13 || (v17 & v27->ExplicitSetting[0].Value) == 0) )
            {
              if( (*(_BYTE *)(v12 + 37) & 4) != 0 && !v13 )
              {
                if( v41 )
                {
                  if( (v17 & *(_QWORD *)((_BYTE *)&v27->PerfFrequencyCap[1] + v28)) == 0 )
                    v18 = 1;
                }
                else
                {
                  v18 = 0;
                }
              }
              LODWORD(SettingValueSizeb) = ValueLength;
              PpmInfoAdjustSetting((_PPM_POLICY_CONFIG_ENTRY *)v12, v27, v13, v18, v48, SettingValueSizeb);
              v28 = v47;
              if( *(_PPM_ENGINE_SETTINGS **)&v49.Data1 == (_PPM_ENGINE_SETTINGS *)((char *)v27 - v45)
                && *(_QWORD *)&ActionMask[0].Value == SettingMask.Value )
              {
                v25 = 1;
              }
            }
            v27 = (_PPM_ENGINE_SETTINGS *)((char *)v27 + 5552);
            --v26;
          }
          while( v26 );
          v42 = v25;
        }
      }
    }
    v23 = v43;
LABEL_23:
    ActionMask[0] = 0;
    if( v42 || PopHeteroSystem && PpmPerfSchedulerDirectedPerfStatesSupported && v23 )
    {
      SettingMask.Value = 1i64 << *(_BYTE *)(v12 + 36);
      PpmGetPolicyAction(&SettingMask, ActionMask);
      if( (*(_BYTE *)(v12 + 37) & 1) != 0 )
      {
        PpmReapplyPerfPolicy(ActionMask);
      }
      else
      {
        PpmReapplyIdlePolicy();
        PopReleaseRwLock((_POP_RW_LOCK *)((char *)&stru_140C23628 + 984));
      }
    }
    else
    {
      PpmInfoReleaseLocks(v12);
    }
  }
  return v5;
}

Referenced by:

PopSetNewPolicyValue
PpmProcessSettingsFromQueryTable