PopVerifySystemPowerPolicy
INT64 __fastcall PopVerifySystemPowerPolicy(_SYSTEM_POWER_POLICY *InputPolicy, _SYSTEM_POWER_POLICY *PowerPolicy){
__int128 v3;
POWER_ACTION_POLICY *p_PowerPolicy;
unsigned int v5;
_SYSTEM_POWER_STATE *p_MinSleep;
_SYSTEM_POWER_STATE MinSleep;
_SYSTEM_POWER_STATE *p_MaxSleep;
_SYSTEM_POWER_STATE MaxSleep;
unsigned int VideoTimeout;
unsigned int SpindownTimeout;
_SYSTEM_POWER_STATE *p_ReducedLatencySleep;
_SYSTEM_POWER_STATE *p_MinSystemState;
POWER_ACTION_POLICY *v14;
int Action;
unsigned int Flags;
unsigned int v17;
unsigned int DozeS4Timeout;
unsigned int IdleTimeout;
int v20;
unsigned __int8 IdleSensitivity;
_SYSTEM_POWER_STATE v22;
*(_OWORD *)&PowerPolicy->Revision = *(_OWORD *)&InputPolicy->Revision;
*(_OWORD *)&PowerPolicy->SleepButton.Action = *(_OWORD *)&InputPolicy->SleepButton.Action;
*(_OWORD *)&PowerPolicy->LidClose.Flags = *(_OWORD *)&InputPolicy->LidClose.Flags;
*(_OWORD *)&PowerPolicy->Idle.Action = *(_OWORD *)&InputPolicy->Idle.Action;
*(_OWORD *)&PowerPolicy->IdleSensitivity = *(_OWORD *)&InputPolicy->IdleSensitivity;
*(_OWORD *)&PowerPolicy->WinLogonFlags = *(_OWORD *)&InputPolicy->WinLogonFlags;
*(_OWORD *)&PowerPolicy->DischargePolicy[0].Enable = *(_OWORD *)&InputPolicy->DischargePolicy[0].Enable;
v3 = *(_OWORD *)&InputPolicy->DischargePolicy[0].PowerPolicy.EventCode;
p_PowerPolicy = &InputPolicy->DischargePolicy[1].PowerPolicy;
*(_OWORD *)&PowerPolicy->DischargePolicy[0].PowerPolicy.EventCode = v3;
*(_OWORD *)&PowerPolicy->DischargePolicy[1].PowerPolicy.Action = *(_OWORD *)&p_PowerPolicy->Action;
*(_OWORD *)&PowerPolicy->DischargePolicy[2].Enable = *(_OWORD *)&p_PowerPolicy[1].Flags;
*(_OWORD *)&PowerPolicy->DischargePolicy[2].PowerPolicy.EventCode = *(_OWORD *)&p_PowerPolicy[2].EventCode;
*(_OWORD *)&PowerPolicy->DischargePolicy[3].PowerPolicy.Action = *(_OWORD *)&p_PowerPolicy[4].Action;
*(_OWORD *)&PowerPolicy->VideoTimeout = *(_OWORD *)&p_PowerPolicy[5].Flags;
*(_OWORD *)&PowerPolicy->VideoReserved[2] = *(_OWORD *)&p_PowerPolicy[6].EventCode;
*(_QWORD *)&PowerPolicy->OverThrottled.Flags = *(_QWORD *)&p_PowerPolicy[8].Action;
if( PowerPolicy->Revision != 1 )
return 3221225485i64;
v5 = 0;
if( *(&PopCapabilities + 5) )
{
PowerPolicy->MaxSleep = PowerSystemSleeping3;
}
else if( *(&PopCapabilities + 4) )
{
PowerPolicy->MaxSleep = PowerSystemSleeping2;
}
else if( *(&PopCapabilities + 3) )
{
PowerPolicy->MaxSleep = PowerSystemSleeping1;
}
p_MinSleep = &PowerPolicy->MinSleep;
MinSleep = PowerPolicy->MinSleep;
if( MinSleep < PowerSystemSleeping1 )
{
*p_MinSleep = PowerSystemSleeping1;
MinSleep = PowerSystemSleeping1;
}
if( MinSleep > PowerSystemSleeping3 )
{
*p_MinSleep = PowerSystemSleeping3;
MinSleep = PowerSystemSleeping3;
}
p_MaxSleep = &PowerPolicy->MaxSleep;
MaxSleep = PowerPolicy->MaxSleep;
if( MaxSleep < PowerSystemSleeping1 )
{
*p_MaxSleep = PowerSystemSleeping1;
MaxSleep = PowerSystemSleeping1;
}
if( MaxSleep > PowerSystemSleeping3 )
{
*p_MaxSleep = PowerSystemSleeping3;
MaxSleep = PowerSystemSleeping3;
}
if( MaxSleep < MinSleep )
{
*p_MaxSleep = MinSleep;
MaxSleep = MinSleep;
}
if( MinSleep < (int)PopAdminPolicy )
*p_MinSleep = PopAdminPolicy;
if( MaxSleep > SDWORD1(PopAdminPolicy) )
*p_MaxSleep = SDWORD1(PopAdminPolicy);
VideoTimeout = PowerPolicy->VideoTimeout;
if( VideoTimeout < DWORD2(PopAdminPolicy) )
{
PowerPolicy->VideoTimeout = DWORD2(PopAdminPolicy);
VideoTimeout = DWORD2(PopAdminPolicy);
}
if( VideoTimeout > HIDWORD(PopAdminPolicy) )
PowerPolicy->VideoTimeout = HIDWORD(PopAdminPolicy);
SpindownTimeout = PowerPolicy->SpindownTimeout;
if( SpindownTimeout < (unsigned int)qword_140C23C10 )
{
PowerPolicy->SpindownTimeout = qword_140C23C10;
SpindownTimeout = qword_140C23C10;
}
if( SpindownTimeout > HIDWORD(qword_140C23C10) )
PowerPolicy->SpindownTimeout = HIDWORD(qword_140C23C10);
PopVerifyPowerActionPolicy();
PopVerifyPowerActionPolicy();
PopVerifyPowerActionPolicy();
PopVerifyPowerActionPolicy();
PopVerifySystemPowerState((INT64 *)&PowerPolicy->LidOpenWake, 1i64);
PopVerifySystemPowerState((INT64 *)&PowerPolicy->MinSleep, 1i64);
PopVerifySystemPowerState((INT64 *)&PowerPolicy->MaxSleep, 1i64);
p_ReducedLatencySleep = &PowerPolicy->ReducedLatencySleep;
PopVerifySystemPowerState((INT64 *)&PowerPolicy->ReducedLatencySleep, 1i64);
p_MinSystemState = &PowerPolicy->DischargePolicy[0].MinSystemState;
v14 = &PowerPolicy->DischargePolicy[0].PowerPolicy;
do
{
Action = v14->Action;
PopVerifyPowerActionPolicy();
if( Action == 3 && v14->Action < PowerActionHibernate )
{
v14->Action = PowerActionShutdownOff;
PopVerifyPowerActionPolicy();
}
PopVerifySystemPowerState((INT64 *)p_MinSystemState, 1i64);
if( v14->Action == PowerActionSleep && v14[1].Action > PowerActionShutdown )
{
v14[1].Action = PowerActionShutdown;
PopVerifySystemPowerState((INT64 *)p_MinSystemState, 1i64);
}
if( v5 )
{
Flags = v14->Flags;
if( v14->Action == PowerActionShutdownOff )
v17 = Flags | 0x10;
else
v17 = Flags & 0xFFFFFFEF;
v14->Flags = v17;
}
if( v14[-1].EventCode > 0x64 )
v14[-1].EventCode = 100;
++v5;
p_MinSystemState += 6;
v14 += 2;
}
while( v5 < 4 );
PopVerifyPowerActionPolicy();
if( !PowerPolicy->BroadcastCapacityResolution )
PowerPolicy->BroadcastCapacityResolution = 1;
DozeS4Timeout = PowerPolicy->DozeS4Timeout;
if( DozeS4Timeout && !*(&PopCapabilities + 7) )
{
PowerPolicy->DozeS4Timeout = 0;
DozeS4Timeout = 0;
}
IdleTimeout = PowerPolicy->IdleTimeout;
v20 = IdleTimeout;
if( IdleTimeout && IdleTimeout < 0x3C )
{
PowerPolicy->IdleTimeout = 60;
v20 = 60;
}
if( DozeS4Timeout - 1 <= 0x3A )
PowerPolicy->DozeS4Timeout = 60;
IdleSensitivity = PowerPolicy->IdleSensitivity;
if( IdleSensitivity > 0x5Au )
{
PowerPolicy->IdleSensitivity = 90;
IdleSensitivity = 90;
}
if( v20 && !IdleSensitivity )
PowerPolicy->IdleSensitivity = 90;
v22 = *p_MinSleep;
if( *p_MaxSleep < *p_MinSleep )
*p_MaxSleep = v22;
if( *p_ReducedLatencySleep > v22 )
*p_ReducedLatencySleep = v22;
return 0i64;
}Referenced by:
PopApplyPolicy