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