NdisMSetPeriodicTimer

VOID
   NdisMSetPeriodicTimer(
       IN PNDIS_MINIPORT_TIMER
Timer,
       IN UINT MillisecondsPeriod
       );

NdisMSetPeriodicTimer sets a timer to fire periodically, thereby running an associated MiniportTimer function repeatedly at fixed intervals.

Parameters

Timer

Points to caller-supplied resident storage for a timer object previously initialized with NdisMInitializeTimer.

MillisecondsPeriod

Specifies the interval, in milliseconds, to time out before calling the MiniportTimer function unless the timer is cancelled or this interval is reset.

Comments

NdisMSetPeriodicTimer causes the driver-supplied MiniportTimer function, which was associated with the timer object when MiniportInitialize called NdisMInitializeTimer, to be run repeatedly whenever the given MillisecondsPeriod expires. At the initial call to NdisMSetPeriodicTimer, the timer object is queued until the MillisecondsPeriod expires, when the MiniportTimer function is run and the timer object is automatically requeued for the next interval.

By contrast, NdisMSetTimer causes the driver-supplied function associated with a particular timer object to run only once after the given MillisecondsToDelay expires. That is, execution of the function associated with the Timer passed to NdisMSetTimer is episodic, rather than periodic.

As a general rule, a miniport should allocate and initialize two timer objects if it calls both NdisMSetPeriodicTimer and NdisMSetTimer. Such a driver is likely to have two MiniportTimer functions with different functionality, each associated with a particular timer object when it is initialized with NdisMInitializeTimer. For example, a MiniportTimer function that runs periodically might poll device state at regular intervals, while another MiniportTimer function might retry a particular runtime operation only if it times out on the NIC.

If a miniport calls NdisMSetPeriodicTimer, NdisMCancelTimer, or NdisMSetTimer with the same Timer pointer originally passed to NdisMSetPeriodicTimer, the current call cancels its preceding call to NdisMSetPeriodicTimer, possibly resetting the MillisecondsPeriod specified originally. Any call to NdisMSet..Timer resets the given timer to expire at the interval specified in the most recent call and causes the associated MiniportTimer function to run when the most recently specified interval has expired.

Timer resolution on the host varies. Consequently, calling NdisMSetPeriodicTimer with very small periods does not necessarily cause the execution of the MiniportTimer function exactly when the specified interval expires. The minimum practicable interval to specify on Windows NT platforms is ten milliseconds.

Callers of NdisMSetPeriodicTimer run at IRQL <= DISPATCH_LEVEL.

See Also

MiniportInitialize, MiniportTimer, NdisMCancelTimer, NdisMInitializeTimer, NdisMSetTimer