PopDeferDoze
UINT8 __stdcall PopDeferDoze(INT64 a1, INT64 a2, _BYTE *a3){
int v3;
UINT8 v4;
unsigned int v6;
unsigned int v7;
CHAR IsDozeSupported;
int v9;
int v10;
int v11;
int v12;
int v13;
INT64 v14;
unsigned int v15;
INT64 v16;
void *v17;
__int64 a5[2];
int v20;
int v21;
UINT64 a4;
a5[0] = 0i64;
v3 = 0;
v20 = 0;
v21 = 0;
v4 = 0;
a4 = 0i64;
v6 = a2;
v7 = a1;
IsDozeSupported = PopIsDozeSupported((_BYTE *)&stru_140C23628 + 2072);
v10 = v9 | 0x10;
if( IsDozeSupported )
v10 = v9;
v11 = v10 | 0x20;
if( *(_DWORD *)(*(&stru_140C23628 + 232) + 88i64) )
v11 = v10;
if( PopQueryPowerSettingUlong(&GUID_LEGACY_RTC_MITIGATION, &v20, &v21) )
{
v3 = v20;
if( !*a3 )
v3 = v21;
}
v12 = v11 | 0x40;
if( v3 )
v12 = v11;
v13 = v12;
if( a3[3] && *a3 && v20 == 1 && !v21 )
v13 = v12 | 0x100;
v14 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
if( !PopIsWakeTimerImmanent(*(UINT64 *)&KUSER_SHARED_DATA.InterruptTime.LowPart, v7, v6, &a4, (INT64)a5) )
v13 |= 0x80u;
v15 = ~PopDozeDeferralChecksToIgnore & v13;
if( !v15 )
{
v4 = 1;
PopPrintEx(3ui64, (INT8 *)"Deferring doze to S4\n");
}
v16 = v14;
v17 = (void *)a5[0];
PopDiagTraceDozeDeferralDecision(v4, v15, a5[0], v16, a4, v7, v6);
if( v17 )
ExFreePoolWithTag(v17, 0x53577254u);
return v4;
}Referenced by:
PopTransitionSystemPowerStateEx