PopVerifySystemPowerPolicy
NTSTATUS __stdcall 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 -1073741811;
v5 = 0;
if( *(&stru_140C23628 + 2077) )
{
PowerPolicy->MaxSleep = PowerSystemSleeping3;
}
else if( *(&stru_140C23628 + 2076) )
{
PowerPolicy->MaxSleep = PowerSystemSleeping2;
}
else if( *(&stru_140C23628 + 2075) )
{
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 < *(&stru_140C23628 + 374) )
*p_MinSleep = *((_SYSTEM_POWER_STATE *)&stru_140C23628 + 374);
if( MaxSleep > *(&stru_140C23628 + 375) )
*p_MaxSleep = *((_SYSTEM_POWER_STATE *)&stru_140C23628 + 375);
VideoTimeout = PowerPolicy->VideoTimeout;
if( VideoTimeout < *(&stru_140C23628 + 376) )
{
PowerPolicy->VideoTimeout = *(&stru_140C23628 + 376);
VideoTimeout = *(&stru_140C23628 + 376);
}
if( VideoTimeout > *(&stru_140C23628 + 377) )
PowerPolicy->VideoTimeout = *(&stru_140C23628 + 377);
SpindownTimeout = PowerPolicy->SpindownTimeout;
if( SpindownTimeout < *(&stru_140C23628 + 378) )
{
PowerPolicy->SpindownTimeout = *(&stru_140C23628 + 378);
SpindownTimeout = *(&stru_140C23628 + 378);
}
if( SpindownTimeout > *(&stru_140C23628 + 379) )
PowerPolicy->SpindownTimeout = *(&stru_140C23628 + 379);
PopVerifyPowerActionPolicy();
PopVerifyPowerActionPolicy();
PopVerifyPowerActionPolicy();
PopVerifyPowerActionPolicy();
PopVerifySystemPowerState(&PowerPolicy->LidOpenWake, SubstituteLightestOverallDownwardBounded);
PopVerifySystemPowerState(&PowerPolicy->MinSleep, SubstituteLightestOverallDownwardBounded);
PopVerifySystemPowerState(&PowerPolicy->MaxSleep, SubstituteLightestOverallDownwardBounded);
p_ReducedLatencySleep = &PowerPolicy->ReducedLatencySleep;
PopVerifySystemPowerState(&PowerPolicy->ReducedLatencySleep, SubstituteLightestOverallDownwardBounded);
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(p_MinSystemState, SubstituteLightestOverallDownwardBounded);
if( v14->Action == PowerActionSleep && v14[1].Action > PowerActionShutdown )
{
v14[1].Action = PowerActionShutdown;
PopVerifySystemPowerState(p_MinSystemState, SubstituteLightestOverallDownwardBounded);
}
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 && !*(&stru_140C23628 + 2079) )
{
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 0;
}Referenced by:
PopApplyPolicy