KeSetTimerEx 函式 (wdm.h)
KeSetTimerEx 例程會設定定時器物件設定為訊號狀態的絕對或相對間隔,選擇性地提供 CustomTimerDpc 例程,以在該間隔到期時執行,並選擇性地為定時器提供週期性間隔。
語法
BOOLEAN KeSetTimerEx(
[in, out] PKTIMER Timer,
[in] LARGE_INTEGER DueTime,
[in] LONG Period,
[in, optional] PKDPC Dpc
);
參數
[in, out] Timer
以 keInitializeTimer 或 KeInitializeTimerEx初始化之定時器物件的指標。
[in] DueTime
指定定時器到期的絕對或相對時間。 如果 DueTime 參數的值是負數,則到期時間會相對於目前的系統時間。 否則,到期時間是絕對的。 到期時間以系統時間單位表示(100 奈秒間隔)。 絕對到期時間會追蹤系統時間中的任何變更;相對到期時間不會受到系統時間變更的影響。
[in] Period
指定定時器以毫秒為單位的選擇性週期性間隔。 必須是大於或等於零的值。 如果這個參數的值是零,定時器是非重複定時器,不會自動重新排入佇列本身。
[in, optional] Dpc
由 KeInitializeDpc初始化之 DPC 物件的指標。 這個參數是選擇性的。
傳回值
如果定時器物件已經在系統定時器佇列中,KeSetTimerEx 會傳回 TRUE 。
言論
KeSetTimerEx 例程會執行下列動作:
計算到期時間。
將定時器設定為未發出訊號的狀態。
如果已指定定時器,請設定定時器的週期性間隔。
在系統定時器佇列中插入定時器物件。
如果定時器對象已經在定時器佇列中,則會在設定為新的到期時間之前隱含取消它。 在先前指定的 DueTime 之前呼叫 KeSetTimerEx 已過期,會取消定時器和呼叫 Dpc,如果有的話,與上一個呼叫相關聯。
到期時間會相對於系統時鐘進行測量,以及作系統在定時器到期時可以偵測到的精確度受限於系統時鐘的粒度。 如需詳細資訊,請參閱 定時器精確度。
如果指定 Dpc 參數,DPC 物件就會與定時器對象相關聯。 當定時器到期時,定時器物件會從系統定時器佇列中移除,而且它設定為訊號狀態。 如果 DPC 物件在設定定時器時與定時器相關聯,則會在定時器間隔到期之後,將 DPC 物件插入系統 DPC 佇列中,以在定時器間隔到期后立即執行。
DPC 例程無法解除分配定期定時器。 DPC 例程可以解除分配非效能定時器。
請注意,定期定時器會在到期時自動重新啟動。 因此,在多處理器計算機上,定期定時器的 DPC 可以同時在兩個處理器上執行。
在任何指定的時刻,只能將指定 DPC 物件的具現化排入佇列。 為了避免潛在的競爭狀況,DPC 傳遞至 KeSetTimerEx 不應該傳遞至 keInsertQueueDpc 。
驅動程式必須取消其 卸除 例程中的任何作用中定時器。 使用 KeCancelTimer 取消任何定時器。
如需定時器物件的詳細資訊,請參閱 定時器物件和 DPC。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | 從 Windows 2000 開始提供。 |
目標平臺 | 普遍 |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
連結庫 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
DDI 合規性規則 | HwStorPortProhibitedDIs(storport),IrqlKeDispatchLte(wdm) |