KeCancelTimer 函式 (wdm.h)
KeCancelTimer 例程會在定時器間隔之前清除定時器物件,如果有設定,就會過期。
語法
BOOLEAN KeCancelTimer(
[in, out] PKTIMER unnamedParam1
);
參數
[in, out] unnamedParam1
初始化定時器物件的指標,呼叫端會為其提供記憶體。
傳回值
如果指定的定時器對象位於系統定時器佇列中, KeCancelTimer 會傳回 TRUE。
備註
如果定時器物件目前位於系統定時器佇列中,則會從佇列中移除它。 如果 DPC 物件與定時器相關聯,它也會取消。 否則,不會執行任何作業。
如果定時器仍在定時器佇列中,則例程會傳回 TRUE 。 非永久性定時器會在系統佇列到期時立即移除。 因此,對於非常數定時器,如果定時器 DPC 已排入佇列, KeCancelTimer 會傳回 FALSE 。 定期定時器一律位於定時器佇列中,因此 KeCancelTimer 一律會針對定期定時器傳回 TRUE 。
請注意,已經執行的 DPC 會執行以完成。 驅動程式必須確定 DPC 已完成,才能釋放 DPC 使用的任何資源。 對於非持續性定時器,您可以使用同步處理基本類型,例如事件物件,在驅動程式與 DPC 之間進行同步處理。 驅動程式可以檢查 KeCancelTimer 的傳回碼,以判斷 DPC 是否正在執行。 如果是,DPC 可以在結束前發出事件訊號,而驅動程式可以等候該事件重設為未收到訊號的狀態。
由於對於定期定時器 KeCancelTimer 一律會傳回 TRUE,因此驅動程式必須使用不同的技術等待 DPC 完成。 使用 KeFlushQueuedDpcs 例程來封鎖直到 DPC 執行為止。
驅動程式不需要同步處理儲存在全域變數或驅動程序物件延伸模組中的數據。 系統會自動呼叫 KeFlushQueuedDpcs ,然後再解除分配其中一個區域。
如需定時器對象的詳細資訊,請參閱 定時器物件和 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) |