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