The new KeSetTimerEx routine accepts an optional Period parameter that specifies a recurring interval for the timer. Periodic timers are more efficient than resetting a timer manually because periodic timers do not incur an extra trip through the kernel. Periodic timers also do not drift.
Previously a timer was always a notification timer, but now a timer can be a notification timer or a synchronization timer.
When a notification timer is signaled, all waiting threads have their wait satisfied and the state of the timer remains Signaled until it is explicitly reset. When a synchronization timer expires, its state is set to Signaled until a single waiting thread is released and then the timer is reset to the Not-Signaled state.
KeInitializeTimer always creates notification timers. The new KeInitializeTimerEx routine accepts a Type parameter which can be NotificationTimer or SynchronizationTimer.
Both notification and synchronization timers can have an associated CustomTimerDpc routine.
This new routine creates or opens a named notification event. Notification events notify one or more threads of execution that an event has occurred. When a notification event is Signaled, it remains in that state until it is explicitly set to Not-Signaled.