PopPolicySystemIdle
UINT64 __stdcall PopPolicySystemIdle(){
bool v0;
bool v1;
int ConsoleDisplayRequestCount;
bool v3;
CHAR S0LowPowerIdleAction;
char v5;
UINT8 SubstitutionPolicy;
UINT64 DozeS4Timeout;
POWER_ACTION Action;
_SYSTEM_POWER_STATE MinState;
_POP_ACTION_TRIGGER Trigger;
_SYSTEM_POWER_CAPABILITIES FilteredCapabilities[20];
memset(FilteredCapabilities, 0i64, 0x4Cu);
v0 = 0;
memset(&Trigger, 0, sizeof(Trigger));
if( PopPlatformAoAc )
KeBugCheckEx(0xA0u, (PVOID)0xA, (PVOID)3, 0i64, 0i64);
v1 = 0;
ConsoleDisplayRequestCount = PopGetConsoleDisplayRequestCount();
PopAcquirePolicyLock();
if( KUSER_SHARED_DATA.LastSystemRITEventTickCount != dword_140C231B0 )
{
dword_140C231B0 = KUSER_SHARED_DATA.LastSystemRITEventTickCount;
PopResetIdleTime(PopSystemIdleTimeResetReasonUserInput);
}
PopFilterCapabilities((_SYSTEM_POWER_CAPABILITIES *)&stru_140C23628 + 518, FilteredCapabilities);
v3 = 0;
if( !LOBYTE(FilteredCapabilities[5]) && dword_140C231E0 )
v3 = (unsigned int)(AccumulatedIdleTime - dword_140C231E0) < *(&stru_140C23628 + 446);
if( (_DWORD)Timeout
&& (unsigned int)AccumulatedIdleTime >= (unsigned int)Timeout
&& !v3
&& !*(&stru_140C23628 + 2352) )
{
if( LOBYTE(FilteredCapabilities[5]) )
{
if( !dword_140C50478 || !ConsoleDisplayRequestCount )
v0 = 1;
}
else
{
v0 = dword_140C231C4 == 0;
}
}
byte_140C231F0 = v0;
if( LOBYTE(FilteredCapabilities[5]) && ::Action.Action == PowerActionSleep )
v1 = LightestState == PowerSystemWorking;
if( v0 )
{
if( !v1 )
PopResetIdleTime(PopSystemIdleTimeResetReasonIdleActionInitiated);
byte_140C231D5 = 0;
}
PopIsHibernateSupported(FilteredCapabilities);
S0LowPowerIdleAction = PopIsDozeSupported(FilteredCapabilities);
LOBYTE(MinState) = ::MinState;
LOBYTE(Action) = v1;
LOBYTE(DozeS4Timeout) = v5;
PopTraceSystemIdleUpdate(
(unsigned int)AccumulatedIdleTime,
v0,
dword_140C231C4 != 0,
v3,
SubstitutionPolicy,
DozeS4Timeout,
S0LowPowerIdleAction,
*(_DWORD *)(*(&stru_140C23628 + 232) + 88i64),
Action,
MinState);
if( v0 && !v1 )
{
Trigger.Type = PolicySystemIdle;
Trigger.Flags = 128;
PopExecutePowerAction(&Trigger, 0i64, &::Action, LightestState, SubstituteLightestOverallDownwardBounded);
}
PopReleasePolicyLock();
if( !v0 && PsWin32CalloutsEstablished )
PopScanIdleList();
if( KeGetCurrentThread()->WaitBlock[3].SpareLong )
__fastfail(0x20u);
return 0i64;
}Referenced by:
No references.