KeSetTimer 函式 (wdm.h)
KeSetTimer 例程會設定定時器物件設定為訊號狀態的絕對或相對間隔,並選擇性地提供當該間隔到期時要執行的 CustomTimerDpc 例程。
語法
BOOLEAN KeSetTimer(
[in, out] PKTIMER Timer,
[in] LARGE_INTEGER DueTime,
[in, optional] PKDPC Dpc
);
參數
[in, out] Timer
以 KeInitializeTimer 或 KeInitializeTimerEx 初始化之定時器物件的指標。
[in] DueTime
指定定時器到期的絕對或相對時間。 如果 DueTime 參數的值是負數,則到期時間會相對於目前的系統時間。 否則,到期時間是絕對的。 到期時間是以系統時間單位表示, (100 奈秒間隔) 。 絕對到期時間會追蹤系統時間中的任何變更;相對到期時間不會受到系統時間變更的影響。
[in, optional] Dpc
KeInitializeDpc 初始化之 DPC 物件的指標。 這是選擇性參數。
傳回值
如果定時器對象已經在系統定時器佇列中, KeSetTimer 會傳回 TRUE。
備註
KeSetTimer 例程會執行下列動作:
計算到期時間。
將定時器設定為未發出訊號的狀態。
在系統定時器佇列中插入定時器物件。
如果定時器對象已經在定時器佇列中,則會在設定為新的到期時間之前隱含取消。 在先前指定的 DueTime 之前呼叫 KeSetTimer 已過期,會同時取消定時器和 Dpc 的呼叫,如果有的話,與前一個呼叫相關聯。
如果指定 Dpc 參數,DPC 物件會與定時器對象相關聯。 當定時器到期時,定時器物件會從系統定時器佇列中移除,而且其狀態會設定為已發出訊號。 如果 DPC 物件在設定時與定時器相關聯,DPC 物件就會插入系統 DPC 佇列中,以在定時器間隔到期后立即執行。
到期時間會相對於系統時鐘進行測量,而且操作系統可以偵測到定時器到期的精確度受限於系統時鐘的數據粒度。 如需詳細資訊,請參閱 定時器精確度。
在任何指定的時間,只能將指定 DPC 物件的一個具現化排入佇列。 為了避免潛在的競爭狀況,傳遞至 KeSetTimer 的 DPC 不應該傳遞至 KeInsertQueueDpc。
驅動程式必須在其 Unload 例程中取消任何作用中的定時器。 使用 KeCancelTimer 取消任何定時器。
KeSetTimer 的呼叫端可以指定定時器的一個到期時間。 若要設定週期性定時器,請使用 KeSetTimerEx。
如需定時器對象的詳細資訊,請參閱 定時器物件和 DPC。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 從 Windows 2000 開始提供。 |
目標平台 | Universal |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
DDI 合規性規則 | HwStorPortProhibitedDIS (storport) 、 IrqlKeDispatchLte (wdm) |