PopApplyPolicy
INT64 __fastcall PopApplyPolicy(
INT64 UpdateRegistry,
_SYSTEM_POWER_POLICY *TriggerBattery,
_SYSTEM_POWER_POLICY *NewPolicy,
UINT64 PolicyLength){
char v5;
char v6;
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;
INT64 result;
int v23;
_QWORD *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;
WCHAR v43;
UINT64 DataSize;
PVOID DestinationString;
struct _UNICODE_STRING DestinationString_8;
_SYSTEM_POWER_POLICY Buf1;
_SYSTEM_POWER_POLICY InputPolicy;
v5 = (char)TriggerBattery;
v6 = UpdateRegistry;
v7 = PolicyLength;
memset((INT64)&Buf1, 0i64);
DestinationString = 0i64;
DestinationString_8 = 0i64;
if( v7 < 0xE8 )
return 3221225507i64;
if( v7 > 0xE8 )
return 2147483653i64;
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, &Buf1);
v23 = result;
if( (int)result >= 0 )
{
v24 = PopPolicy;
if( !memcmp(&Buf1, PopPolicy, 0xE8ui64) && !v6 )
{
return 0i64;
}
else
{
v25 = 0;
v26 = 0i64;
while( 1 )
{
v27 = *(_QWORD *)&Buf1.DischargePolicy[v26].Enable - v24[3 * v26 + 12];
if( !v27 )
{
v27 = *(_QWORD *)&Buf1.DischargePolicy[v26].PowerPolicy.Action - v24[3 * v26 + 13];
if( !v27 )
v27 = *(_QWORD *)&Buf1.DischargePolicy[v26].PowerPolicy.EventCode - v24[3 * v26 + 14];
}
if( v27 )
break;
v26 = (unsigned int)(v26 + 1);
if( (unsigned int)v26 >= 4 )
goto LABEL_12;
}
v25 = 1;
LABEL_12:
v28 = PopPolicy;
v29 = *(_OWORD *)&Buf1.SleepButton.Action;
*(_OWORD *)PopPolicy = *(_OWORD *)&Buf1.Revision;
v30 = *(_OWORD *)&Buf1.LidClose.Flags;
v28[1] = v29;
v31 = *(_OWORD *)&Buf1.Idle.Action;
v28[2] = v30;
v32 = *(_OWORD *)&Buf1.IdleSensitivity;
v28[3] = v31;
v33 = *(_OWORD *)&Buf1.WinLogonFlags;
v28[4] = v32;
v34 = *(_OWORD *)&Buf1.DischargePolicy[0].Enable;
v28[5] = v33;
v35 = *(_OWORD *)&Buf1.DischargePolicy[0].PowerPolicy.EventCode;
v28[6] = v34;
v28 += 8;
v36 = *(_OWORD *)&Buf1.DischargePolicy[1].PowerPolicy.Action;
*(v28 - 1) = v35;
v37 = *(_OWORD *)&Buf1.DischargePolicy[2].Enable;
*v28 = v36;
v38 = *(_OWORD *)&Buf1.DischargePolicy[2].PowerPolicy.EventCode;
v28[1] = v37;
v39 = *(_OWORD *)&Buf1.DischargePolicy[3].PowerPolicy.Action;
v28[2] = v38;
v40 = *(_OWORD *)&Buf1.VideoTimeout;
v28[3] = v39;
v41 = *(_OWORD *)&Buf1.VideoReserved[2];
v42 = *(_QWORD *)&Buf1.OverThrottled.Flags;
v28[4] = v40;
v28[5] = v41;
*((_QWORD *)v28 + 12) = v42;
PopSetNotificationWork(2ui64);
if( v25 && !v5 )
PopResetCBTriggers(0x83u);
PopInitSIdle();
if( v6 )
{
v23 = PopOpenPowerKey(&DestinationString);
if( v23 >= 0 )
{
RtlInitUnicodeString(&DestinationString_8, L"SystemPowerPolicy", v43);
LODWORD(DataSize) = 232;
v23 = ZwSetValueKey(DestinationString, &DestinationString_8, 0i64, 3ui64, &InputPolicy, DataSize);
ZwClose(DestinationString);
}
}
return(unsigned int)v23;
}
}
return result;
}Referenced by:
PopBatteryUpdateAlarms
PopConsoleLockPowerSettingCallback
PopHardDiskPowerSettingCallback
PopPowerButtonSettingCallback
PopResetCurrentPolicies
PopSleepPowerSettingCallback
PopVideoPowerSettingCallback