exSetTimer 函数 (wdm.h)
ExSetTimer 例程启动计时器操作,并将计时器设置为在指定的到期时间过期。
语法
BOOLEAN ExSetTimer(
[in] PEX_TIMER Timer,
[in] LONGLONG DueTime,
[in] LONGLONG Period,
[in, optional] PEXT_SET_PARAMETERS Parameters
);
参数
[in] Timer
指向 EX_TIMER 结构的指针。 此结构是以前由 ExAllocateTimer 例程分配的计时器对象。
[in] DueTime
计时器到期的绝对时间或相对时间。 如果 DueTime 参数的值为负,则过期时间相对于当前系统时间。 否则,过期时间为绝对时间。 过期时间以系统时间单位表示,) (100 纳秒间隔。 绝对过期时间跟踪系统时间中的任何更改;相对过期时间不受系统时间更改的影响。 绝对时间表示为自 1601 年初以来经过的时间量(以系统时间单位为单位)。
高分辨率计时器的 DueTime 参数必须是相对时间 (负值) 或例程 bug 检查。
[in] Period
计时器的可选时间段(以系统时间单位表示) (100 纳秒间隔) 。 必须小于或等于 MAXLONG。 对于一次拍摄而不是定期的计时器,请将 “周期 ”设置为零。
[in, optional] Parameters
指向 EXT_SET_PARAMETERS 结构的指针。 调用驱动程序之前调用 ExInitializeSetTimerParameters 例程来初始化此结构。
返回值
如果此例程取消调用例程时挂起的计时器,则此例程返回 TRUE 。 否则,例程返回 FALSE。 有关详细信息,请参阅“备注”。
注解
驱动程序可以调用此例程,将计时器设置为在将来过期。 然后,驱动程序可以等待计时器过期。 或者,驱动程序可以实现计时器过期时调用的回调例程。
驱动程序调用 ExSetTimer 后,驱动程序可以调用 KeWaitForSingleObject 或 KeWaitForMultipleObjects 等例程来等待计时器过期。 当计时器过期时,操作系统会向计时器对象发出信号。
作为选项,驱动程序可以实现 ExTimerCallback 回调例程,并将指向此例程的指针作为 ExAllocateTimer 例程的输入参数提供。 计时器过期时,操作系统将调用 ExTimerCallback 例程。
ExSetTimer 调用会隐式取消以前对 Timer 指定的计时器对象启动的任何 set-timer 操作。 如果驱动程序以前调用 ExSetTimer 来设置使用 Timer 的计时器,并且此计时器在第二次调用 ExSetTimer 时尚未过期,则第二次调用将从第一次调用中取消计时器,然后启动新的计时器。 在这种情况下,第二个调用返回 TRUE。 但是,如果第一次调用启动的计时器在第二次调用可以取消此计时器之前过期,则第二次调用将启动新的计时器并返回 FALSE。
如果 Period 参数为非零值,则计时器是定期的。 对于定期计时器, DueTime 参数指定初始计时器过期的时间, 而 Period 指定后续过期之间的间隔。
用于系统时钟的硬件计时器以统一的间隔发出中断请求的信号,但这些中断的处理可能会因其他设备的中断处理而延迟。 因此,对于定期计时器,从定期过期时间到计时器对象发出信号的时间或 ExTimerCallback 例程运行的延迟可能因一个周期而异。 有关详细信息,请参阅 计时器准确性。
每个系统时钟周期,定期计时器的过期时间不能超过一次。 将计时器的周期设置为小于系统时钟周期间隔的值不会导致计时器在每个系统时钟周期中过期多次,但如果系统时钟速率发生更改,则可能会导致连续过期之间的间隔发生变化。 例如,操作系统可能会暂时提高系统时钟速率,以满足高分辨率计时器的计时要求。 有关详细信息,请参阅 高分辨率计时器。
对于不是高分辨率计时器的定期计时器,驱动程序可以通过将 Period 设置为系统时钟周期之间的默认间隔的整数倍来实现相对统一的定期过期。
为了避免过度消耗电量,驱动程序不应将长时间运行的高分辨率计时器的时间段设置为小于系统时钟周期之间的默认间隔的值。 否则,系统时钟计时器将以允许的最大系统时钟速率持续生成中断。
有关详细信息,请参阅 ExXxxTimer 例程和EX_TIMER对象。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 从Windows 8.1开始可用。 |
目标平台 | 通用 |
标头 | wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h) |
Library | Ntoskrnl.lib |
IRQL | <= DISPATCH_LEVEL |