PopFxScheduleDeviceIdleTimer
char __fastcall PopFxScheduleDeviceIdleTimer(__int64 a1){
char v2;
ULONGLONG v3;
ULONGLONG v4;
ULONG v5;
ULONGLONG pullResult;
v2 = 0;
_m_prefetchw((const void *)(a1 + 32));
if( (_InterlockedOr((volatile signed __int32 *)(a1 + 32), 0) & 8) == 0 )
{
v3 = *(_QWORD *)(a1 + 504);
v4 = v3 + *(_QWORD *)(a1 + 496);
if( v4 >= v3 )
{
pullResult = v4;
if( *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart < v4
&& RtlULongLongSub(v4, *(UINT64 *)&KUSER_SHARED_DATA.InterruptTime.LowPart, &pullResult) >= 0 )
{
v5 = -1;
if( pullResult / 0x186A0 <= 0xFFFFFFFF )
v5 = pullResult / 0x186A0;
KeSetCoalescableTimer((PKTIMER)(a1 + 368), (LARGE_INTEGER)-(__int64)pullResult, 0, v5, (PKDPC)(a1 + 432));
_InterlockedOr((volatile signed __int32 *)(a1 + 32), 4u);
return 1;
}
}
}
return v2;
}Referenced by:
PopFxProcessWork
PopFxUpdateDeviceIdleTimer