20 #define NUM_WINDOW_LESS_TIMERS 32768 29 #define IntLockWindowlessTimerBitmap() \ 30 ExEnterCriticalRegionAndAcquireFastMutexUnsafe(Mutex) 32 #define IntUnlockWindowlessTimerBitmap() \ 33 ExReleaseFastMutexUnsafeAndLeaveCriticalRegion(Mutex) 35 #define TimerEnterExclusive() \ 37 KeEnterCriticalRegion(); \ 38 ExAcquireResourceExclusiveLite(&TimerLock, TRUE); \ 41 #define TimerLeave() \ 43 ExReleaseResourceLite(&TimerLock); \ 44 KeLeaveCriticalRegion(); \ 89 if (!Ret)
ERR(
"Warning: Unable to delete timer\n");
109 if ( pTmr->
nID == nID &&
192 TRACE(
"Adjusting uElapse\n");
199 TRACE(
"Adjusting uElapse\n");
207 TRACE(
"Adjusting uElapse\n");
213 if ((
Window) && (IDEvent == 0))
227 ERR(
"Unable to find a free window-less timer id\n");
245 pTmr->
pti =
Window->head.pti->pEThread->Tcb.Win32Thread;
257 pTmr->
pfn = TimerFunc;
293 ERR(
"System Timer Proc has invalid window handle! %p Id: %u\n",
hwnd, idEvent);
299 TRACE(
"Windowless Timer Running!\n" );
339 TRACE(
"Generating WM_NCMOUSEHOVER\n");
360 ERR(
"System Timer Proc invalid id %u!\n", idEvent);
387 TRACE(
"SysemTimerSet: Access Denied!\n");
411 (pTmr->
pti == pti) &&
518 TRACE(
"TimerCount = %d\n", TimerCount);
545 return TimersRemoved;
561 if ((pTmr) && (pTmr->
pti == pti))
569 return TimersRemoved;
576 TRACE(
"IntKillTimer Window %p id %uI systemtimer %s\n",
577 Window, IDEvent, SystemTimer ?
"TRUE" :
"FALSE");
640 TRACE(
"Enter NtUserSetTimer\n");
647 TRACE(
"Leave NtUserSetTimer, ret=%u\n",
ret);
664 TRACE(
"Enter NtUserKillTimer\n");
672 TRACE(
"Leave NtUserKillTimer, ret=%i\n",
ret);
689 TRACE(
"Enter NtUserSetSystemTimer\n");
695 TRACE(
"Leave NtUserSetSystemTimer, ret=%u\n",
ret);
UINT_PTR FASTCALL IntSetTimer(PWND Window, UINT_PTR IDEvent, UINT Elapse, TIMERPROC TimerFunc, INT Type)
BOOL FASTCALL IntFlashWindowEx(PWND pWnd, PFLASHWINFO pfwi)
UINT_PTR APIENTRY NtUserSetTimer(HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc)
VOID FASTCALL UserEnterShared(VOID)
UINT_PTR APIENTRY NtUserSetSystemTimer(HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc)
BOOL FASTCALL UserPostMessage(HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam)
VOID FASTCALL MsqWakeQueue(PTHREADINFO pti, DWORD MessageBits, BOOL KeyEvent)
BOOL FASTCALL UserDeleteObject(HANDLE h, HANDLE_TYPE type)
BOOLEAN NTAPI KeSetTimer(IN OUT PKTIMER Timer, IN LARGE_INTEGER DueTime, IN PKDPC Dpc OPTIONAL)
#define STATUS_INSUFFICIENT_RESOURCES
#define ID_EVENT_SYSTIMER_MOUSEHOVER
#define USER_TIMER_MINIMUM
WPARAM FASTCALL MsqGetDownKeyState(PUSER_MESSAGE_QUEUE MessageQueue)
#define QS_ALLPOSTMESSAGE
VOID FASTCALL StartTheTimers(VOID)
struct _LIST_ENTRY * Blink
#define EngGetTickCount32()
#define IntUnlockWindowlessTimerBitmap()
TW_UINT32 TW_UINT16 TW_UINT16 MSG
NTSTATUS NTAPI InitTimerImpl(VOID)
PVOID NTAPI PsGetCurrentThreadWin32Thread(VOID)
BOOL FASTCALL IntKillTimer(PWND Window, UINT_PTR IDEvent, BOOL SystemTimer)
NTSYSAPI void WINAPI RtlInitializeBitMap(PRTL_BITMAP, PULONG, ULONG)
NTSTATUS ExInitializeResourceLite(PULONG res)
BOOL FASTCALL DestroyTimersForThread(PTHREADINFO pti)
BOOL FASTCALL UserDereferenceObject(PVOID Object)
UINT_PTR FASTCALL SystemTimerSet(PWND Window, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc)
#define InsertTailList(ListHead, Entry)
#define ERROR_NO_SYSTEM_RESOURCES
PTIMER FASTCALL FindTimer(PWND Window, UINT_PTR nID, UINT flags)
VOID(CALLBACK * TIMERPROC)(HWND, UINT, UINT_PTR, DWORD)
PVOID FASTCALL UserCreateObject(PUSER_HANDLE_TABLE ht, PDESKTOP pDesktop, PTHREADINFO pti, HANDLE *h, HANDLE_TYPE type, ULONG size)
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
#define NUM_WINDOW_LESS_TIMERS
BOOL FASTCALL DestroyTimersForWindow(PTHREADINFO pti, PWND Window)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
#define ERROR_ACCESS_DENIED
BOOL FASTCALL ValidateTimerCallback(PTHREADINFO pti, LPARAM lParam)
static LIST_ENTRY TimersListHead
#define PsGetCurrentProcess
VOID CALLBACK SystemTimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
NTSYSAPI ULONG WINAPI RtlFindClearBitsAndSet(PRTL_BITMAP, ULONG, ULONG)
PWND FASTCALL UserGetWindowObject(HWND hWnd)
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
static PVOID WindowLessTimersBitMapBuffer
VOID FASTCALL UserEnterExclusive(VOID)
#define UserHMGetHandle(obj)
struct _LIST_ENTRY * Flink
PTIMER FASTCALL FindSystemTimer(PMSG pMsg)
VOID FASTCALL ClearMsgBitsMask(PTHREADINFO pti, UINT MessageBits)
FORCEINLINE VOID ExInitializeFastMutex(_Out_ PFAST_MUTEX FastMutex)
PKEVENT pEventQueueServer
VOID NTAPI RtlClearBit(_In_ PRTL_BITMAP BitMapHeader, _In_ BITMAP_INDEX BitNumber)
VOID FASTCALL MsqPostMessage(PTHREADINFO pti, MSG *Msg, BOOLEAN HardwareMessage, DWORD MessageBits, DWORD dwQEvent, LONG_PTR ExtraInfo)
DBG_DEFAULT_CHANNEL(UserTimer)
unsigned __int3264 UINT_PTR
BOOL FASTCALL PostTimerMessages(PWND Window)
#define STATUS_UNSUCCESSFUL
#define ExAllocatePoolWithTag(hernya, size, tag)
#define ID_EVENT_SYSTIMER_FLASHWIN
FORCEINLINE BOOL RECTL_bPointInRect(_In_ const RECTL *prcl, _In_ INT x, _In_ INT y)
#define USER_TIMER_MAXIMUM
VOID FASTCALL UserLeave(VOID)
BOOL APIENTRY NtUserValidateTimerCallback(LPARAM lParam)
VOID FASTCALL ProcessTimers(VOID)
#define InitializeListHead(ListHead)
static BOOL FASTCALL RemoveTimer(PTIMER pTmr)
NTSYSAPI void WINAPI RtlClearAllBits(PRTL_BITMAP)
_In_ WDFTIMER _In_ LONGLONG DueTime
#define IntLockWindowlessTimerBitmap()
VOID CALLBACK HungAppSysTimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
#define TimerEnterExclusive()
#define ALIGN_UP_BY(size, align)
BOOL APIENTRY NtUserKillTimer(HWND hWnd, UINT_PTR uIDEvent)
PUSER_HANDLE_TABLE gHandleTable
static PTIMER FASTCALL CreateTimer(VOID)
static PLARGE_INTEGER Time
ENGAPI VOID APIENTRY EngSetLastError(_In_ ULONG iError)
static RTL_BITMAP WindowLessTimersBitMap