mirror of
https://github.com/reactos/reactos.git
synced 2024-10-15 13:45:58 +00:00
[win32k]
- Remove old win32k timer code. svn path=/trunk/; revision=47929
This commit is contained in:
parent
6027c26e60
commit
c11b4add2f
|
@ -42,16 +42,6 @@ typedef struct _USER_SENT_MESSAGE_NOTIFY
|
||||||
LIST_ENTRY ListEntry;
|
LIST_ENTRY ListEntry;
|
||||||
} USER_SENT_MESSAGE_NOTIFY, *PUSER_SENT_MESSAGE_NOTIFY;
|
} USER_SENT_MESSAGE_NOTIFY, *PUSER_SENT_MESSAGE_NOTIFY;
|
||||||
|
|
||||||
typedef struct _TIMER_ENTRY{
|
|
||||||
LIST_ENTRY ListEntry;
|
|
||||||
LARGE_INTEGER ExpiryTime;
|
|
||||||
HWND Wnd;
|
|
||||||
UINT_PTR IDEvent;
|
|
||||||
UINT Period;
|
|
||||||
TIMERPROC TimerFunc;
|
|
||||||
UINT Msg;
|
|
||||||
} TIMER_ENTRY, *PTIMER_ENTRY;
|
|
||||||
|
|
||||||
typedef struct _USER_MESSAGE_QUEUE
|
typedef struct _USER_MESSAGE_QUEUE
|
||||||
{
|
{
|
||||||
/* Reference counter, only access this variable with interlocked functions! */
|
/* Reference counter, only access this variable with interlocked functions! */
|
||||||
|
@ -67,8 +57,6 @@ typedef struct _USER_MESSAGE_QUEUE
|
||||||
LIST_ENTRY NotifyMessagesListHead;
|
LIST_ENTRY NotifyMessagesListHead;
|
||||||
/* Queue for hardware messages for the queue. */
|
/* Queue for hardware messages for the queue. */
|
||||||
LIST_ENTRY HardwareMessagesListHead;
|
LIST_ENTRY HardwareMessagesListHead;
|
||||||
/* List of timers, sorted on expiry time (earliest first) */
|
|
||||||
LIST_ENTRY TimerListHead;
|
|
||||||
/* Lock for the hardware message list. */
|
/* Lock for the hardware message list. */
|
||||||
KMUTEX HardwareLock;
|
KMUTEX HardwareLock;
|
||||||
/* Pointer to the current WM_MOUSEMOVE message */
|
/* Pointer to the current WM_MOUSEMOVE message */
|
||||||
|
@ -280,24 +268,6 @@ IntMsqSetWakeMask(DWORD WakeMask);
|
||||||
BOOL FASTCALL
|
BOOL FASTCALL
|
||||||
IntMsqClearWakeMask(VOID);
|
IntMsqClearWakeMask(VOID);
|
||||||
|
|
||||||
BOOLEAN FASTCALL
|
|
||||||
MsqSetTimer(PUSER_MESSAGE_QUEUE MessageQueue, HWND Wnd,
|
|
||||||
UINT_PTR IDEvent, UINT Period, TIMERPROC TimerFunc,
|
|
||||||
UINT Msg);
|
|
||||||
BOOLEAN FASTCALL
|
|
||||||
MsqKillTimer(PUSER_MESSAGE_QUEUE MessageQueue, HWND Wnd,
|
|
||||||
UINT_PTR IDEvent, UINT Msg);
|
|
||||||
BOOLEAN FASTCALL
|
|
||||||
MsqGetTimerMessage(PUSER_MESSAGE_QUEUE MessageQueue,
|
|
||||||
PWINDOW_OBJECT WindowFilter, UINT MsgFilterMin, UINT MsgFilterMax,
|
|
||||||
MSG *Msg, BOOLEAN Restart);
|
|
||||||
BOOLEAN FASTCALL
|
|
||||||
MsqGetFirstTimerExpiry(PUSER_MESSAGE_QUEUE MessageQueue,
|
|
||||||
PWINDOW_OBJECT WndFilter, UINT MsgFilterMin, UINT MsgFilterMax,
|
|
||||||
PLARGE_INTEGER FirstTimerExpiry);
|
|
||||||
VOID FASTCALL
|
|
||||||
MsqRemoveTimersWindow(PUSER_MESSAGE_QUEUE MessageQueue, HWND Wnd);
|
|
||||||
|
|
||||||
static __inline LONG
|
static __inline LONG
|
||||||
MsqCalculateMessageTime(IN PLARGE_INTEGER TickCount)
|
MsqCalculateMessageTime(IN PLARGE_INTEGER TickCount)
|
||||||
{
|
{
|
||||||
|
|
|
@ -50,7 +50,6 @@ static KMUTANT HardwareMessageQueueLock;
|
||||||
static KEVENT HardwareMessageEvent;
|
static KEVENT HardwareMessageEvent;
|
||||||
|
|
||||||
static PAGED_LOOKASIDE_LIST MessageLookasideList;
|
static PAGED_LOOKASIDE_LIST MessageLookasideList;
|
||||||
static PAGED_LOOKASIDE_LIST TimerLookasideList;
|
|
||||||
|
|
||||||
#define IntLockSystemMessageQueue(OldIrql) \
|
#define IntLockSystemMessageQueue(OldIrql) \
|
||||||
KeAcquireSpinLock(&SystemMessageQueueLock, &OldIrql)
|
KeAcquireSpinLock(&SystemMessageQueueLock, &OldIrql)
|
||||||
|
@ -157,13 +156,6 @@ MsqInitializeImpl(VOID)
|
||||||
sizeof(USER_MESSAGE),
|
sizeof(USER_MESSAGE),
|
||||||
TAG_USRMSG,
|
TAG_USRMSG,
|
||||||
256);
|
256);
|
||||||
ExInitializePagedLookasideList(&TimerLookasideList,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
0,
|
|
||||||
sizeof(TIMER_ENTRY),
|
|
||||||
TAG_TIMER,
|
|
||||||
64);
|
|
||||||
|
|
||||||
return(STATUS_SUCCESS);
|
return(STATUS_SUCCESS);
|
||||||
}
|
}
|
||||||
|
@ -1427,7 +1419,6 @@ MsqInitializeMessageQueue(struct _ETHREAD *Thread, PUSER_MESSAGE_QUEUE MessageQu
|
||||||
InitializeListHead(&MessageQueue->PostedMessagesListHead);
|
InitializeListHead(&MessageQueue->PostedMessagesListHead);
|
||||||
InitializeListHead(&MessageQueue->SentMessagesListHead);
|
InitializeListHead(&MessageQueue->SentMessagesListHead);
|
||||||
InitializeListHead(&MessageQueue->HardwareMessagesListHead);
|
InitializeListHead(&MessageQueue->HardwareMessagesListHead);
|
||||||
InitializeListHead(&MessageQueue->TimerListHead);
|
|
||||||
InitializeListHead(&MessageQueue->DispatchingMessagesHead);
|
InitializeListHead(&MessageQueue->DispatchingMessagesHead);
|
||||||
InitializeListHead(&MessageQueue->LocalDispatchingMessagesHead);
|
InitializeListHead(&MessageQueue->LocalDispatchingMessagesHead);
|
||||||
KeInitializeMutex(&MessageQueue->HardwareLock, 0);
|
KeInitializeMutex(&MessageQueue->HardwareLock, 0);
|
||||||
|
@ -1466,7 +1457,6 @@ MsqCleanupMessageQueue(PUSER_MESSAGE_QUEUE MessageQueue)
|
||||||
{
|
{
|
||||||
PLIST_ENTRY CurrentEntry;
|
PLIST_ENTRY CurrentEntry;
|
||||||
PUSER_MESSAGE CurrentMessage;
|
PUSER_MESSAGE CurrentMessage;
|
||||||
PTIMER_ENTRY CurrentTimer;
|
|
||||||
PUSER_SENT_MESSAGE CurrentSentMessage;
|
PUSER_SENT_MESSAGE CurrentSentMessage;
|
||||||
|
|
||||||
/* cleanup posted messages */
|
/* cleanup posted messages */
|
||||||
|
@ -1518,14 +1508,6 @@ MsqCleanupMessageQueue(PUSER_MESSAGE_QUEUE MessageQueue)
|
||||||
ExFreePool(CurrentSentMessage);
|
ExFreePool(CurrentSentMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* cleanup timers */
|
|
||||||
while (! IsListEmpty(&MessageQueue->TimerListHead))
|
|
||||||
{
|
|
||||||
CurrentEntry = RemoveHeadList(&MessageQueue->TimerListHead);
|
|
||||||
CurrentTimer = CONTAINING_RECORD(CurrentEntry, TIMER_ENTRY, ListEntry);
|
|
||||||
ExFreeToPagedLookasideList(&TimerLookasideList, CurrentTimer);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* notify senders of dispatching messages. This needs to be cleaned up if e.g.
|
/* notify senders of dispatching messages. This needs to be cleaned up if e.g.
|
||||||
ExitThread() was called in a SendMessage() umode callback */
|
ExitThread() was called in a SendMessage() umode callback */
|
||||||
while (!IsListEmpty(&MessageQueue->LocalDispatchingMessagesHead))
|
while (!IsListEmpty(&MessageQueue->LocalDispatchingMessagesHead))
|
||||||
|
@ -1712,290 +1694,4 @@ MsqSetStateWindow(PUSER_MESSAGE_QUEUE MessageQueue, ULONG Type, HWND hWnd)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef NDEBUG
|
|
||||||
static VOID FASTCALL
|
|
||||||
DumpTimerList(PUSER_MESSAGE_QUEUE MessageQueue)
|
|
||||||
{
|
|
||||||
PLIST_ENTRY Current;
|
|
||||||
PTIMER_ENTRY Timer;
|
|
||||||
|
|
||||||
Current = MessageQueue->TimerListHead.Flink;
|
|
||||||
if (Current == &MessageQueue->TimerListHead)
|
|
||||||
{
|
|
||||||
DPRINT("timer list is empty for queue %p\n", MessageQueue);
|
|
||||||
}
|
|
||||||
while (Current != &MessageQueue->TimerListHead)
|
|
||||||
{
|
|
||||||
Timer = CONTAINING_RECORD(Current, TIMER_ENTRY, ListEntry);
|
|
||||||
DPRINT("queue %p timer %p expiry %I64d wnd %x id %p period %u timerproc %p msg %u\n",
|
|
||||||
MessageQueue, Timer, Timer->ExpiryTime.QuadPart, Timer->Wnd, Timer->IDEvent,
|
|
||||||
Timer->Period, Timer->TimerFunc, Timer->Msg);
|
|
||||||
Current = Current->Flink;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif /* ! defined(NDEBUG) */
|
|
||||||
|
|
||||||
/* Must have the message queue locked while calling this */
|
|
||||||
static VOID FASTCALL
|
|
||||||
InsertTimer(PUSER_MESSAGE_QUEUE MessageQueue, PTIMER_ENTRY NewTimer)
|
|
||||||
{
|
|
||||||
PLIST_ENTRY Current;
|
|
||||||
|
|
||||||
Current = MessageQueue->TimerListHead.Flink;
|
|
||||||
while (Current != &MessageQueue->TimerListHead)
|
|
||||||
{
|
|
||||||
if (NewTimer->ExpiryTime.QuadPart <
|
|
||||||
CONTAINING_RECORD(Current, TIMER_ENTRY, ListEntry)->ExpiryTime.QuadPart)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
Current = Current->Flink;
|
|
||||||
}
|
|
||||||
|
|
||||||
InsertTailList(Current, &NewTimer->ListEntry);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Must have the message queue locked while calling this */
|
|
||||||
static PTIMER_ENTRY FASTCALL
|
|
||||||
RemoveTimer(PUSER_MESSAGE_QUEUE MessageQueue, HWND Wnd, UINT_PTR IDEvent, UINT Msg)
|
|
||||||
{
|
|
||||||
PTIMER_ENTRY Timer;
|
|
||||||
PLIST_ENTRY EnumEntry;
|
|
||||||
|
|
||||||
/* Remove timer if already in the queue */
|
|
||||||
EnumEntry = MessageQueue->TimerListHead.Flink;
|
|
||||||
while (EnumEntry != &MessageQueue->TimerListHead)
|
|
||||||
{
|
|
||||||
Timer = CONTAINING_RECORD(EnumEntry, TIMER_ENTRY, ListEntry);
|
|
||||||
EnumEntry = EnumEntry->Flink;
|
|
||||||
|
|
||||||
if (Timer->Wnd == Wnd &&
|
|
||||||
Timer->IDEvent == IDEvent &&
|
|
||||||
Timer->Msg == Msg)
|
|
||||||
{
|
|
||||||
RemoveEntryList(&Timer->ListEntry);
|
|
||||||
return Timer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOLEAN FASTCALL
|
|
||||||
MsqSetTimer(PUSER_MESSAGE_QUEUE MessageQueue, HWND Wnd,
|
|
||||||
UINT_PTR IDEvent, UINT Period, TIMERPROC TimerFunc,
|
|
||||||
UINT Msg)
|
|
||||||
{
|
|
||||||
PTIMER_ENTRY Timer;
|
|
||||||
LARGE_INTEGER CurrentTime;
|
|
||||||
|
|
||||||
DPRINT("MsqSetTimer queue %p wnd %x id %p period %u timerproc %p msg %d\n",
|
|
||||||
MessageQueue, Wnd, IDEvent, Period, TimerFunc, Msg);
|
|
||||||
|
|
||||||
Timer = RemoveTimer(MessageQueue, Wnd, IDEvent, Msg);
|
|
||||||
if (NULL == Timer)
|
|
||||||
{
|
|
||||||
Timer = ExAllocateFromPagedLookasideList(&TimerLookasideList);
|
|
||||||
if (NULL == Timer)
|
|
||||||
{
|
|
||||||
DPRINT1("Failed to allocate timer entry\n");
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
DPRINT("Allocated new timer entry %p\n", Timer);
|
|
||||||
Timer->Wnd = Wnd;
|
|
||||||
Timer->IDEvent = IDEvent;
|
|
||||||
Timer->Msg = Msg;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DPRINT("Updating existing timer entry %p\n", Timer);
|
|
||||||
}
|
|
||||||
|
|
||||||
KeQuerySystemTime(&CurrentTime);
|
|
||||||
Timer->ExpiryTime.QuadPart = CurrentTime.QuadPart +
|
|
||||||
(ULONGLONG) Period * (ULONGLONG) 10000;
|
|
||||||
Timer->Period = Period;
|
|
||||||
Timer->TimerFunc = TimerFunc;
|
|
||||||
DPRINT("Insert timer now %I64d expiry %I64d\n", CurrentTime.QuadPart,
|
|
||||||
Timer->ExpiryTime.QuadPart);
|
|
||||||
|
|
||||||
InsertTimer(MessageQueue, Timer);
|
|
||||||
|
|
||||||
#ifndef NDEBUG
|
|
||||||
|
|
||||||
DumpTimerList(MessageQueue);
|
|
||||||
#endif /* ! defined(NDEBUG) */
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOLEAN FASTCALL
|
|
||||||
MsqKillTimer(PUSER_MESSAGE_QUEUE MessageQueue, HWND Wnd,
|
|
||||||
UINT_PTR IDEvent, UINT Msg)
|
|
||||||
{
|
|
||||||
PTIMER_ENTRY Timer;
|
|
||||||
|
|
||||||
DPRINT("MsqKillTimer queue %p wnd %x id %p msg %d\n",
|
|
||||||
MessageQueue, Wnd, IDEvent, Msg);
|
|
||||||
|
|
||||||
Timer = RemoveTimer(MessageQueue, Wnd, IDEvent, Msg);
|
|
||||||
|
|
||||||
if (NULL == Timer)
|
|
||||||
{
|
|
||||||
DPRINT("Failed to remove timer from list, not found\n");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ExFreeToPagedLookasideList(&TimerLookasideList, Timer);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef NDEBUG
|
|
||||||
DumpTimerList(MessageQueue);
|
|
||||||
#endif /* ! defined(NDEBUG) */
|
|
||||||
|
|
||||||
return NULL != Timer;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOLEAN FASTCALL
|
|
||||||
MsqGetTimerMessage(PUSER_MESSAGE_QUEUE MessageQueue,
|
|
||||||
PWINDOW_OBJECT WindowFilter, UINT MsgFilterMin, UINT MsgFilterMax,
|
|
||||||
MSG *Msg, BOOLEAN Restart)
|
|
||||||
{
|
|
||||||
PTIMER_ENTRY Timer;
|
|
||||||
LARGE_INTEGER CurrentTime;
|
|
||||||
LARGE_INTEGER LargeTickCount;
|
|
||||||
PLIST_ENTRY EnumEntry;
|
|
||||||
BOOLEAN GotMessage;
|
|
||||||
|
|
||||||
DPRINT("MsqGetTimerMessage queue %p msg %p restart %s\n",
|
|
||||||
MessageQueue, Msg, Restart ? "TRUE" : "FALSE");
|
|
||||||
|
|
||||||
KeQuerySystemTime(&CurrentTime);
|
|
||||||
DPRINT("Current time %I64d\n", CurrentTime.QuadPart);
|
|
||||||
EnumEntry = MessageQueue->TimerListHead.Flink;
|
|
||||||
GotMessage = FALSE;
|
|
||||||
while (EnumEntry != &MessageQueue->TimerListHead)
|
|
||||||
{
|
|
||||||
Timer = CONTAINING_RECORD(MessageQueue->TimerListHead.Flink,
|
|
||||||
TIMER_ENTRY, ListEntry);
|
|
||||||
DPRINT("Checking timer %p wnd %x expiry %I64d\n", Timer, Timer->Wnd,
|
|
||||||
Timer->ExpiryTime.QuadPart);
|
|
||||||
EnumEntry = EnumEntry->Flink;
|
|
||||||
if ((NULL == WindowFilter || Timer->Wnd == WindowFilter->hSelf) &&
|
|
||||||
((MsgFilterMin == 0 && MsgFilterMax == 0) ||
|
|
||||||
(MsgFilterMin <= Timer->Msg &&
|
|
||||||
Timer->Msg <= MsgFilterMax)))
|
|
||||||
{
|
|
||||||
if (Timer->ExpiryTime.QuadPart <= CurrentTime.QuadPart)
|
|
||||||
{
|
|
||||||
DPRINT("Timer is expired\n");
|
|
||||||
GotMessage = TRUE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DPRINT("No need to check later timers\n");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DPRINT("timer %p (wnd %x msg %d) failed filter wnd %x msgmin %d msgmax %d\n",
|
|
||||||
Timer, Timer->Wnd, Timer->Msg, WindowFilter->hSelf, MsgFilterMin, MsgFilterMax);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! GotMessage)
|
|
||||||
{
|
|
||||||
DPRINT("No timer pending\n");
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
Msg->hwnd = Timer->Wnd;
|
|
||||||
Msg->message = Timer->Msg;
|
|
||||||
Msg->wParam = (WPARAM) Timer->IDEvent;
|
|
||||||
Msg->lParam = (LPARAM) Timer->TimerFunc;
|
|
||||||
KeQueryTickCount(&LargeTickCount);
|
|
||||||
Msg->time = MsqCalculateMessageTime(&LargeTickCount);
|
|
||||||
Msg->pt = gpsi->ptCursor;
|
|
||||||
|
|
||||||
if (Restart)
|
|
||||||
{
|
|
||||||
RemoveEntryList(&Timer->ListEntry);
|
|
||||||
Timer->ExpiryTime.QuadPart = CurrentTime.QuadPart +
|
|
||||||
(ULONGLONG) Timer->Period * (ULONGLONG) 10000;
|
|
||||||
DPRINT("Restarting timer %p expires %I64d\n", Timer, Timer->ExpiryTime.QuadPart);
|
|
||||||
InsertTimer(MessageQueue, Timer);
|
|
||||||
|
|
||||||
#ifndef NDEBUG
|
|
||||||
|
|
||||||
DumpTimerList(MessageQueue);
|
|
||||||
#endif /* ! defined(NDEBUG) */
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
DPRINT("Created message wnd %x msg %d wParam %u lParam %u\n", Msg->hwnd, Msg->message,
|
|
||||||
Msg->wParam, Msg->lParam);
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
VOID FASTCALL
|
|
||||||
MsqRemoveTimersWindow(PUSER_MESSAGE_QUEUE MessageQueue, HWND Wnd)
|
|
||||||
{
|
|
||||||
PTIMER_ENTRY Timer;
|
|
||||||
PLIST_ENTRY EnumEntry;
|
|
||||||
|
|
||||||
DPRINT("MsqRemoveTimersWindow queue %p wnd %x\n", MessageQueue, Wnd);
|
|
||||||
|
|
||||||
EnumEntry = MessageQueue->TimerListHead.Flink;
|
|
||||||
while (EnumEntry != &MessageQueue->TimerListHead)
|
|
||||||
{
|
|
||||||
Timer = CONTAINING_RECORD(EnumEntry, TIMER_ENTRY, ListEntry);
|
|
||||||
EnumEntry = EnumEntry->Flink;
|
|
||||||
if (Timer->Wnd == Wnd)
|
|
||||||
{
|
|
||||||
DPRINT("Removing timer %p because its window is going away\n", Timer);
|
|
||||||
RemoveEntryList(&Timer->ListEntry);
|
|
||||||
ExFreeToPagedLookasideList(&TimerLookasideList, Timer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef NDEBUG
|
|
||||||
DumpTimerList(MessageQueue);
|
|
||||||
#endif /* ! defined(NDEBUG) */
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOLEAN FASTCALL
|
|
||||||
MsqGetFirstTimerExpiry(PUSER_MESSAGE_QUEUE MessageQueue,
|
|
||||||
PWINDOW_OBJECT WndFilter, UINT MsgFilterMin, UINT MsgFilterMax,
|
|
||||||
PLARGE_INTEGER FirstTimerExpiry)
|
|
||||||
{
|
|
||||||
PTIMER_ENTRY Timer;
|
|
||||||
PLIST_ENTRY EnumEntry;
|
|
||||||
|
|
||||||
DPRINT("MsqGetFirstTimerExpiry queue %p wndfilter %x msgfiltermin %d msgfiltermax %d expiry %p\n",
|
|
||||||
MessageQueue, WndFilter, MsgFilterMin, MsgFilterMax, FirstTimerExpiry);
|
|
||||||
|
|
||||||
EnumEntry = MessageQueue->TimerListHead.Flink;
|
|
||||||
while (EnumEntry != &MessageQueue->TimerListHead)
|
|
||||||
{
|
|
||||||
Timer = CONTAINING_RECORD(MessageQueue->TimerListHead.Flink,
|
|
||||||
TIMER_ENTRY, ListEntry);
|
|
||||||
EnumEntry = EnumEntry->Flink;
|
|
||||||
if ((NULL == WndFilter || PtrToInt(WndFilter) == 1 || Timer->Wnd == WndFilter->hSelf) &&
|
|
||||||
((MsgFilterMin == 0 && MsgFilterMax == 0) ||
|
|
||||||
(MsgFilterMin <= Timer->Msg &&
|
|
||||||
Timer->Msg <= MsgFilterMax)))
|
|
||||||
{
|
|
||||||
*FirstTimerExpiry = Timer->ExpiryTime;
|
|
||||||
DPRINT("First timer expires %I64d\n", Timer->ExpiryTime);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
Loading…
Reference in a new issue