PopPolicySystemIdle
INT64 __fastcall PopPolicySystemIdle(){
bool v0;
bool v1;
int ConsoleDisplayRequestCount;
bool v3;
CHAR S0LowPowerIdleAction;
char v5;
UINT8 a5;
UINT64 a5a;
UINT64 DozeS4Timeout;
POWER_ACTION Action;
_SYSTEM_POWER_STATE MinState;
INT64 a1[2];
__int64 v13;
_SYSTEM_POWER_CAPABILITIES FilteredCapabilities;
memset((INT64)&FilteredCapabilities, 0i64);
v0 = 0;
*(_OWORD *)a1 = 0i64;
v13 = 0i64;
if( PopPlatformAoAc )
KeBugCheckEx(0xA0u, 0xAui64, 3ui64, 0i64, 0i64);
v1 = 0;
ConsoleDisplayRequestCount = PopGetConsoleDisplayRequestCount();
PopAcquirePolicyLock();
if( KUSER_SHARED_DATA.LastSystemRITEventTickCount != dword_140C231B0 )
{
dword_140C231B0 = KUSER_SHARED_DATA.LastSystemRITEventTickCount;
PopResetIdleTime(1i64);
}
PopFilterCapabilities((_SYSTEM_POWER_CAPABILITIES *)&PopCapabilities, &FilteredCapabilities);
v3 = 0;
if( !FilteredCapabilities.spare2[2] && dword_140C231E0 )
v3 = (unsigned int)(AccumulatedIdleTime - dword_140C231E0) < *(_DWORD *)dword_140C23D20;
if( *(_DWORD *)::a5 && (unsigned int)AccumulatedIdleTime >= *(_DWORD *)::a5 && !v3 && !PopUserShutdownInProgress )
{
if( FilteredCapabilities.spare2[2] )
{
if( !PopConsoleDisplayState || !ConsoleDisplayRequestCount )
v0 = 1;
}
else
{
v0 = dword_140C231C4 == 0;
}
}
byte_140C231F0 = v0;
if( FilteredCapabilities.spare2[2] && (_DWORD)Source1 == 2 )
v1 = (_DWORD)dword_140C231C0 == 1;
if( v0 )
{
if( !v1 )
PopResetIdleTime(5i64);
byte_140C231D5 = 0;
}
PopIsHibernateSupported(&FilteredCapabilities.PowerButtonPresent);
S0LowPowerIdleAction = PopIsDozeSupported(&FilteredCapabilities.PowerButtonPresent);
LOBYTE(MinState) = ::MinState;
LOBYTE(Action) = v1;
LOBYTE(DozeS4Timeout) = v5;
PopTraceSystemIdleUpdate(
(unsigned int)AccumulatedIdleTime,
v0,
dword_140C231C4 != 0,
v3,
a5,
DozeS4Timeout,
S0LowPowerIdleAction,
*((_DWORD *)PopPolicy + 22),
Action,
MinState);
if( v0 && !v1 )
{
a1[0] = 0x8000000007i64;
LODWORD(a5a) = 1;
PopExecutePowerAction((INT64)a1, 0i64, (INT64)&Source1, (unsigned int)dword_140C231C0, a5a);
}
PopReleasePolicyLock();
if( !v0 && PsWin32CalloutsEstablished )
PopScanIdleList();
if( *((_DWORD *)KeGetCurrentThread() + 121) )
__fastfail(0x20u);
return 0i64;
}Referenced by:
No references.