static LIST_ENTRY TimersListHead;
static LONG TimeLast = 0;
-#define MAX_ELAPSE_TIME 0x7FFFFFFF
-
/* Windows 2000 has room for 32768 window-less timers */
#define NUM_WINDOW_LESS_TIMERS 32768
HANDLE Handle;
PTIMER Ret = NULL;
- Ret = UserCreateObject(gHandleTable, NULL, &Handle, otTimer, sizeof(TIMER));
+ Ret = UserCreateObject(gHandleTable, NULL, NULL, &Handle, TYPE_TIMER, sizeof(TIMER));
if (Ret)
{
Ret->head.h = Handle;
IntUnlockWindowlessTimerBitmap();
}
UserDereferenceObject(pTmr);
- Ret = UserDeleteObject( UserHMGetHandle(pTmr), otTimer);
+ Ret = UserDeleteObject( UserHMGetHandle(pTmr), TYPE_TIMER);
}
if (!Ret) ERR("Warning: Unable to delete timer\n");
#if 0
/* Windows NT/2k/XP behaviour */
- if (Elapse > MAX_ELAPSE_TIME)
+ if (Elapse > USER_TIMER_MAXIMUM)
{
TRACE("Adjusting uElapse\n");
Elapse = 1;
}
#else
/* Windows XP SP2 and Windows Server 2003 behaviour */
- if (Elapse > MAX_ELAPSE_TIME)
+ if (Elapse > USER_TIMER_MAXIMUM)
{
TRACE("Adjusting uElapse\n");
- Elapse = MAX_ELAPSE_TIME;
+ Elapse = USER_TIMER_MAXIMUM;
}
#endif
/* Windows 2k/XP and Windows Server 2003 SP1 behaviour */
- if (Elapse < 10)
+ if (Elapse < USER_TIMER_MINIMUM)
{
TRACE("Adjusting uElapse\n");
- Elapse = 10; // 1024hz .9765625 ms, set to 10.0 ms (+/-)1 ms
+ Elapse = USER_TIMER_MINIMUM; // 1024hz .9765625 ms, set to 10.0 ms (+/-)1 ms
}
/* Passing an IDEvent of 0 and the SetTimer returns 1.
CALLBACK
SystemTimerProc(HWND hwnd,
UINT uMsg,
- UINT_PTR idEvent,
- DWORD dwTime)
+ UINT_PTR idEvent,
+ DWORD dwTime)
{
PDESKTOP pDesk;
PWND pWnd = NULL;
pWnd = UserGetWindowObject(hwnd);
if (!pWnd)
{
- ERR( "System Timer Proc has invalid window handle! 0x%x Id: %d\n", hwnd, idEvent);
+ ERR("System Timer Proc has invalid window handle! %p Id: %u\n", hwnd, idEvent);
return;
}
}
if ( pDesk->dwDTFlags & DF_TME_HOVER &&
pWnd == pDesk->spwndTrack )
{
- Point = pWnd->head.pti->MessageQueue->MouseMoveMsg.pt;
+ Point = gpsi->ptCursor;
if ( RECTL_bPointInRect(&pDesk->rcMouseHover, Point.x, Point.y) )
{
if (pDesk->htEx == HTCLIENT) // In a client area.
{
- wParam = UserGetMouseButtonsState();
+ wParam = MsqGetDownKeyState(pWnd->head.pti->MessageQueue);
Msg = WM_MOUSEHOVER;
if (pWnd->ExStyle & WS_EX_LAYOUTRTL)
return; // Not this window so just return.
default:
- ERR( "System Timer Proc invalid id %d!\n", idEvent );
+ ERR("System Timer Proc invalid id %u!\n", idEvent);
break;
}
IntKillTimer(pWnd, idEvent, TRUE);
StartTheTimers(VOID)
{
// Need to start gdi syncro timers then start timer with Hang App proc
- // that calles Idle process so the screen savers will know to run......
+ // that calles Idle process so the screen savers will know to run......
IntSetTimer(NULL, 0, 1000, HungAppSysTimerProc, TMRF_RIT);
// Test Timers
// IntSetTimer(NULL, 0, 1000, SystemTimerProc, TMRF_RIT);
PostTimerMessages(PWND Window)
{
PLIST_ENTRY pLE;
- PUSER_MESSAGE_QUEUE ThreadQueue;
MSG Msg;
PTHREADINFO pti;
BOOL Hit = FALSE;
PTIMER pTmr;
pti = PsGetCurrentThreadWin32Thread();
- ThreadQueue = pti->MessageQueue;
TimerEnterExclusive();
pLE = TimersListHead.Flink;
Msg.wParam = (WPARAM) pTmr->nID;
Msg.lParam = (LPARAM) pTmr->pfn;
- MsqPostMessage(ThreadQueue, &Msg, FALSE, QS_TIMER);
+ MsqPostMessage(pti, &Msg, FALSE, (QS_POSTMESSAGE|QS_ALLPOSTMESSAGE), 0, 0);
pTmr->flags &= ~TMRF_READY;
- pti->cTimersReady++;
+ ClearMsgBitsMask(pti, QS_TIMER);
Hit = TRUE;
// Now move this entry to the end of the list so it will not be
// called again in the next msg loop.
{
pTmr->flags |= TMRF_READY; // Set timer ready to be ran.
// Set thread message queue for this timer.
- if (pTmr->pti->MessageQueue)
+ if (pTmr->pti)
{ // Wakeup thread
- ASSERT(pTmr->pti->MessageQueue->NewMessages != NULL);
- KeSetEvent(pTmr->pti->MessageQueue->NewMessages, IO_NO_INCREMENT, FALSE);
+ pTmr->pti->cTimersReady++;
+ ASSERT(pTmr->pti->pEventQueueServer != NULL);
+ MsqWakeQueue(pTmr->pti, QS_TIMER, TRUE);
}
}
}
PTIMER pTmr;
BOOL TimersRemoved = FALSE;
- if ((Window == NULL))
+ if (Window == NULL)
return FALSE;
TimerEnterExclusive();
IntKillTimer(PWND Window, UINT_PTR IDEvent, BOOL SystemTimer)
{
PTIMER pTmr = NULL;
- TRACE("IntKillTimer Window %x id %p systemtimer %s\n",
- Window, IDEvent, SystemTimer ? "TRUE" : "FALSE");
+ TRACE("IntKillTimer Window %p id %p systemtimer %s\n",
+ Window, IDEvent, SystemTimer ? "TRUE" : "FALSE");
TimerEnterExclusive();
pTmr = FindTimer(Window, IDEvent, SystemTimer ? TMRF_SYSTEM : 0);
InitTimerImpl(VOID)
{
ULONG BitmapBytes;
-
+
/* Allocate FAST_MUTEX from non paged pool */
Mutex = ExAllocatePoolWithTag(NonPagedPool, sizeof(FAST_MUTEX), TAG_INTERNAL_SYNC);
+ if (!Mutex)
+ {
+ return STATUS_INSUFFICIENT_RESOURCES;
+ }
+
ExInitializeFastMutex(Mutex);
BitmapBytes = ROUND_UP(NUM_WINDOW_LESS_TIMERS, sizeof(ULONG) * 8) / 8;
RETURN(IntSetTimer(Window, nIDEvent, uElapse, lpTimerFunc, TMRF_TIFROMWND));
CLEANUP:
- TRACE("Leave NtUserSetTimer, ret=%i\n", _ret_);
+ TRACE("Leave NtUserSetTimer, ret=%u\n", _ret_);
END_CLEANUP;
}
RETURN(IntSetTimer(UserGetWindowObject(hWnd), nIDEvent, uElapse, NULL, TMRF_SYSTEM));
CLEANUP:
- TRACE("Leave NtUserSetSystemTimer, ret=%i\n", _ret_);
+ TRACE("Leave NtUserSetSystemTimer, ret=%u\n", _ret_);
END_CLEANUP;
}