PopApplyPolicy

NTSTATUS __stdcall PopApplyPolicy(
        UINT8 UpdateRegistry,
        UINT8 TriggerBattery,
        _SYSTEM_POWER_POLICY *NewPolicy,
        UINT64 PolicyLength){
  unsigned int v7; 
  __int128 v8; 
  __int128 v9; 
  __int128 v10; 
  __int128 v11; 
  __int128 v12; 
  __int128 v13; 
  __int128 v14; 
  POWER_ACTION_POLICY *p_PowerPolicy; 
  __int64 v16; 
  __int128 v17; 
  __int128 v18; 
  __int128 v19; 
  __int128 v20; 
  __int128 v21; 
  NTSTATUS result; 
  int v23; 
  __int64 v24; 
  char v25; 
  __int64 v26; 
  __int64 v27; 
  _OWORD *v28; 
  __int128 v29; 
  __int128 v30; 
  __int128 v31; 
  __int128 v32; 
  __int128 v33; 
  __int128 v34; 
  __int128 v35; 
  __int128 v36; 
  __int128 v37; 
  __int128 v38; 
  __int128 v39; 
  __int128 v40; 
  __int128 v41; 
  __int64 v42; 
  UINT64 DataSize; 
  VOID *Handle; 
  _UNICODE_STRING Handle_8; 
  _SYSTEM_POWER_POLICY PowerPolicy; 
  _SYSTEM_POWER_POLICY InputPolicy; 

  v7 = PolicyLength;
  memset(&PowerPolicy, 0i64, sizeof(PowerPolicy));
  Handle = 0i64;
  Handle_8 = 0i64;
  if( v7 < 0xE8 )
    return -1073741789;
  if( v7 > 0xE8 )
    return -2147483643;
  v8 = *(_OWORD *)&NewPolicy->SleepButton.Action;
  *(_OWORD *)&InputPolicy.Revision = *(_OWORD *)&NewPolicy->Revision;
  v9 = *(_OWORD *)&NewPolicy->LidClose.Flags;
  *(_OWORD *)&InputPolicy.SleepButton.Action = v8;
  v10 = *(_OWORD *)&NewPolicy->Idle.Action;
  *(_OWORD *)&InputPolicy.LidClose.Flags = v9;
  v11 = *(_OWORD *)&NewPolicy->IdleSensitivity;
  *(_OWORD *)&InputPolicy.Idle.Action = v10;
  v12 = *(_OWORD *)&NewPolicy->WinLogonFlags;
  *(_OWORD *)&InputPolicy.IdleSensitivity = v11;
  v13 = *(_OWORD *)&NewPolicy->DischargePolicy[0].Enable;
  *(_OWORD *)&InputPolicy.WinLogonFlags = v12;
  *(_OWORD *)&InputPolicy.DischargePolicy[0].Enable = v13;
  v14 = *(_OWORD *)&NewPolicy->DischargePolicy[0].PowerPolicy.EventCode;
  p_PowerPolicy = &NewPolicy->DischargePolicy[1].PowerPolicy;
  *(_OWORD *)&InputPolicy.DischargePolicy[0].PowerPolicy.EventCode = v14;
  v16 = *(_QWORD *)&p_PowerPolicy[8].Action;
  v17 = *(_OWORD *)&p_PowerPolicy[1].Flags;
  *(_OWORD *)&InputPolicy.DischargePolicy[1].PowerPolicy.Action = *(_OWORD *)&p_PowerPolicy->Action;
  v18 = *(_OWORD *)&p_PowerPolicy[2].EventCode;
  *(_OWORD *)&InputPolicy.DischargePolicy[2].Enable = v17;
  v19 = *(_OWORD *)&p_PowerPolicy[4].Action;
  *(_OWORD *)&InputPolicy.DischargePolicy[2].PowerPolicy.EventCode = v18;
  v20 = *(_OWORD *)&p_PowerPolicy[5].Flags;
  *(_OWORD *)&InputPolicy.DischargePolicy[3].PowerPolicy.Action = v19;
  v21 = *(_OWORD *)&p_PowerPolicy[6].EventCode;
  *(_OWORD *)&InputPolicy.VideoTimeout = v20;
  *(_OWORD *)&InputPolicy.VideoReserved[2] = v21;
  *(_QWORD *)&InputPolicy.OverThrottled.Flags = v16;
  result = PopVerifySystemPowerPolicy(&InputPolicy, &PowerPolicy);
  v23 = result;
  if( result >= 0 )
  {
    v24 = *(&stru_140C23628 + 232);
    if( !memcmp(&PowerPolicy, *(&stru_140C23628 + 232), 0xE8ui64) && !UpdateRegistry )
    {
      return 0;
    }
    else
    {
      v25 = 0;
      v26 = 0i64;
      while( 1 )
      {
        v27 = *(_QWORD *)&PowerPolicy.DischargePolicy[v26].Enable - *(_QWORD *)(v24 + 24 * v26 + 96);
        if( !v27 )
        {
          v27 = *(_QWORD *)&PowerPolicy.DischargePolicy[v26].PowerPolicy.Action - *(_QWORD *)(v24 + 24 * v26 + 104);
          if( !v27 )
            v27 = *(_QWORD *)&PowerPolicy.DischargePolicy[v26].PowerPolicy.EventCode - *(_QWORD *)(v24 + 24 * v26 + 112);
        }
        if( v27 )
          break;
        v26 = (unsigned int)(v26 + 1);
        if( (unsigned int)v26 >= 4 )
          goto LABEL_12;
      }
      v25 = 1;
LABEL_12:
      v28 = (_OWORD *)*(&stru_140C23628 + 232);
      v29 = *(_OWORD *)&PowerPolicy.SleepButton.Action;
      **(&stru_140C23628 + 232) = *(_OWORD *)&PowerPolicy.Revision;
      v30 = *(_OWORD *)&PowerPolicy.LidClose.Flags;
      v28[1] = v29;
      v31 = *(_OWORD *)&PowerPolicy.Idle.Action;
      v28[2] = v30;
      v32 = *(_OWORD *)&PowerPolicy.IdleSensitivity;
      v28[3] = v31;
      v33 = *(_OWORD *)&PowerPolicy.WinLogonFlags;
      v28[4] = v32;
      v34 = *(_OWORD *)&PowerPolicy.DischargePolicy[0].Enable;
      v28[5] = v33;
      v35 = *(_OWORD *)&PowerPolicy.DischargePolicy[0].PowerPolicy.EventCode;
      v28[6] = v34;
      v28 += 8;
      v36 = *(_OWORD *)&PowerPolicy.DischargePolicy[1].PowerPolicy.Action;
      *(v28 - 1) = v35;
      v37 = *(_OWORD *)&PowerPolicy.DischargePolicy[2].Enable;
      *v28 = v36;
      v38 = *(_OWORD *)&PowerPolicy.DischargePolicy[2].PowerPolicy.EventCode;
      v28[1] = v37;
      v39 = *(_OWORD *)&PowerPolicy.DischargePolicy[3].PowerPolicy.Action;
      v28[2] = v38;
      v40 = *(_OWORD *)&PowerPolicy.VideoTimeout;
      v28[3] = v39;
      v41 = *(_OWORD *)&PowerPolicy.VideoReserved[2];
      v42 = *(_QWORD *)&PowerPolicy.OverThrottled.Flags;
      v28[4] = v40;
      v28[5] = v41;
      *((_QWORD *)v28 + 12) = v42;
      PopSetNotificationWork(2ui64);
      if( v25 && !TriggerBattery )
        PopResetCBTriggers(0x83u);
      PopInitSIdle();
      if( UpdateRegistry )
      {
        v23 = PopOpenPowerKey(&Handle);
        if( v23 >= 0 )
        {
          RtlInitUnicodeString(&Handle_8, L"SystemPowerPolicy");
          LODWORD(DataSize) = 232;
          v23 = ZwSetValueKey(Handle, &Handle_8, 0i64, 3ui64, &InputPolicy, DataSize);
          ZwClose((_HANDLE)Handle);
        }
      }
      return v23;
    }
  }
  return result;
}

Referenced by:

PopBatteryUpdateAlarms
PopConsoleLockPowerSettingCallback
PopHardDiskPowerSettingCallback
PopPowerButtonSettingCallback
PopResetCurrentPolicies
PopSleepPowerSettingCallback
PopVideoPowerSettingCallback