共用方式為


KeCancelTimer 函式 (wdm.h)

KeCancelTimer 例程會在定時器間隔之前清除定時器物件,如果有設定,就會過期。

語法

BOOLEAN KeCancelTimer(
  [in, out] PKTIMER unnamedParam1
);

參數

[in, out] unnamedParam1

初始化定時器物件的指標,呼叫端會為其提供記憶體。

傳回值

如果指定的定時器物件位於系統定時器佇列中,KeCancelTimer 會傳回 true

言論

如果定時器物件目前位於系統定時器佇列中,則會從佇列中移除該物件。 如果 DPC 物件與定時器相關聯,它也會取消。 否則,不會執行任何作業。

如果定時器仍在定時器佇列中,則例程 會傳回 true。 非效能定時器會在系統佇列到期時立即從系統佇列中移除。 因此,對於非永久性定時器,KeCancelTimer 如果定時器 DPC 已排入佇列,則會傳回 FALSE。 定期定時器一律會位於定時器佇列中,因此 KeCancelTimer 一律會傳回定期定時器 TRUE

請注意,已經執行的 DPC 會執行到完成。 驅動程式必須確定 DPC 已完成,才能釋放 DPC 使用的任何資源。 對於非效能定時器,您可以使用同步處理基本類型,例如事件物件,在驅動程式與 DPC 之間進行同步處理。 驅動程式可以檢查 KeCancelTimer 的傳回碼,以判斷 DPC 是否正在執行。 如果是,DPC 可以在結束之前發出訊號,而驅動程式可以等候該事件重設為未收到訊號的狀態。

由於針對定期定時器 KeCancelTimer 一律會傳回 TRUE,因此驅動程式必須使用不同的技術等待 DPC 完成為止。 使用 KeFlushQueuedDpcs 例程來封鎖,直到 DPC 執行為止。

驅動程式不需要同步處理儲存在全域變數或驅動程序物件延伸模組中的數據。 系統會自動呼叫 KeFlushQueuedDpcs,再解除分配這些區域。

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

要求

要求 價值
最低支援的用戶端 從 Windows 2000 開始提供。
目標平臺 普遍
標頭 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
連結庫 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI 合規性規則 HwStorPortProhibitedDIs(storport)IrqlKeDispatchLte(wdm)

另請參閱

KeInitializeTimer

KeReadStateTimer

KeSetTimer