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

使用 KeInitializeTimerKeInitializeTimerEx 初始化的定時器物件的指標。

[in] DueTime

指定定時器到期的絕對或相對時間。 如果 DueTime 參數的值是負數,則到期時間會相對於目前的系統時間。 否則,到期時間是絕對的。 到期時間是以系統時間單位表示, (100 奈秒的間隔) 。 絕對到期時間會追蹤系統時間中的任何變更;相對到期時間不會受到系統時間變更的影響。

[in] Period

指定定時器的選擇性週期性間隔,以毫秒為單位。 必須是大於或等於零的值。 如果此參數的值是零,定時器是非持續性定時器,不會自動重新排入佇列本身。

[in, optional] Dpc

由 KeInitializeDpc 初始化之 DPC 物件的指標。 這是選擇性參數。

傳回值

如果定時器對象已經在系統定時器佇列中, KeSetTimerEx 會傳回 TRUE

備註

KeSetTimerEx 例程會執行下列動作:

  • 計算到期時間。

  • 將定時器設定為未發出訊號的狀態。

  • 如果已指定定時器,請設定定時器的週期性間隔。

  • 在系統定時器佇列中插入定時器物件。

如果定時器對象已經在定時器佇列中,則會在設定為新的到期時間之前隱含取消。 在先前指定的 DueTimerEx 到期之前呼叫 KeSetTimerEx 會同時取消定時器和與先前呼叫相關聯的 Dpc 呼叫。

到期時間會相對於系統時鐘進行測量,以及操作系統可在定時器到期時偵測到的精確度會受到系統時鐘的數據粒度所限制。 如需詳細資訊,請參閱 定時器精確度

如果指定 Dpc 參數,DPC 物件會與定時器對象相關聯。 當定時器過期時,定時器物件會從系統定時器佇列中移除,並設定為訊號狀態。 如果在設定定時器時,DPC 物件與定時器相關聯,則會在系統 DPC 佇列中插入 DPC 物件,以在定時器間隔到期后立即執行。

DPC 例程無法解除分配定期定時器。 DPC 例程可以解除分配非效能定時器。

請注意,定期定時器會在到期時自動重新啟動。 因此,在多處理器計算機上,定期定時器的 DPC 可以同時在兩個處理器上執行。

在任何指定的時間,只能排入指定 DPC 物件的一個具現化。 為了避免潛在的競爭狀況,傳遞至 KeSetTimerEx 的 DPC 不應該傳遞至 KeInsertQueueDpc

驅動程式必須在 其 Unload 例程中取消任何作用中的定時器。 使用 KeCancelTimer 取消任何定時器。

如需定時器對象的詳細資訊,請參閱 定時器物件和 DPC

規格需求

需求
最低支援的用戶端 從 Windows 2000 開始提供。
目標平台 Universal
標頭 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI 合規性規則 HwStorPortProhibitedDDIs (storport) IrqlKeDispatchLte (wdm)

另請參閱

KeCancelTimer

KeInitializeDpc

KeInitializeTimer

KeInitializeTimerEx

KeReadStateTimer

KeWaitForMultipleObjects

KeWaitForSingleObject