PopIsWakeTimerImmanent
BOOL __stdcall PopIsWakeTimerImmanent(UINT64 MinimumDueTime, INT64 a2, INT64 a3, UINT64 *a4, INT64 a5){
UINT64 v6;
_DIAGNOSTIC_BUFFER *v7;
_DIAGNOSTIC_BUFFER *v8;
UINT64 v9;
bool v10;
UINT64 v12;
UINT64 v13;
bool v14;
UINT8 NextWakeTime;
bool v16;
UINT8 v17;
UINT64 DueTime;
_DIAGNOSTIC_BUFFER *WakeTimerInfo;
UINT64 v21;
_DIAGNOSTIC_BUFFER *v22;
int v24;
INT64 a5a;
v24 = a3;
v6 = -1i64;
v7 = 0i64;
DueTime = -1i64;
v8 = 0i64;
v21 = -1i64;
v9 = MinimumDueTime;
WakeTimerInfo = 0i64;
*(_QWORD *)a5 = 0i64;
v10 = 0;
v22 = 0i64;
v12 = -1i64;
if( qword_140C23320 && PopDozeDeferralMaxSeconds )
{
v13 = qword_140C23320 + 10000000i64 * (unsigned int)PopDozeDeferralMaxSeconds;
a5a = v13;
if( (_DWORD)a2 )
{
v14 = (_DWORD)a2 == 2 && *(&stru_140C23628 + 582) >= 0;
NextWakeTime = ExGetNextWakeTime(MinimumDueTime, v13, v14, &DueTime, &WakeTimerInfo);
v6 = DueTime;
v8 = WakeTimerInfo;
LODWORD(a3) = v24;
v13 = a5a;
v9 = MinimumDueTime;
v10 = NextWakeTime != 0;
}
if( (_DWORD)a3 )
{
v16 = (_DWORD)a3 == 2 && *(&stru_140C23628 + 582) >= 0;
v17 = ExGetNextWakeTime(v9, v13, v16, &v21, &v22);
v12 = v21;
v7 = v22;
if( v17 )
v10 = 1;
}
if( v10 )
{
if( v6 > v12 )
{
if( v8 )
ExFreePoolWithTag(v8, 0x53577254u);
*a4 = v12;
*(_QWORD *)a5 = v7;
}
else
{
if( v7 )
ExFreePoolWithTag(v7, 0x53577254u);
*a4 = v6;
*(_QWORD *)a5 = v8;
}
}
}
return v10;
}Referenced by:
PopDeferDoze