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 參數必須是相對時間 (負值) 或例程錯誤檢查。
[in] Period
系統時間單位 (100 奈秒間隔) 定時器的選擇性期間。 必須小於或等於 MAXLONG。 若為一次性定時器而非定期定時器,請將 Period 設定為零。
[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 開始提供。 |
目標平台 | Universal |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
程式庫 | Ntoskrnl.lib |
IRQL | <= DISPATCH_LEVEL |