共用方式為


ExXxxTimer 常式和EX_TIMER物件

從Windows 8.1開始,有一組完整的ExXxxTimer常式可用來管理計時器。 這些常式會使用以 EX_TIMER 結構為基礎的計時器物件。 ExXxxTimer常式是KeXxxTimer常式的取代專案,從 Windows 2000 開始可供使用。 只有在Windows 8.1及更新版本的 Windows 上執行的驅動程式可以使用ExXxxTimer常式,而不是KeXxxTimer常式。 Windows 8.1和更新版本的 Windows 會繼續支援KeXxx計時器常式。

ExXxxTimer常式具有KeXxxTimer常式所提供的所有重要功能。 此外,ExXxxTimer常式支援兩種計時器類型,也就是高解析度計時器和無喚醒計時器KeXxxTimer常式不支援這些計時器。 高解析度計時器是計時器,其到期時間可以指定精確度高於精確度的計時器,其精確度受限於系統時鐘的預設解析度。 無喚醒計時器是計時器,可避免不必要的喚醒處理器處於低電源狀態。 如需詳細資訊,請參閱下列主題:

高解析度計時器

無喚醒計時器

從Windows 8.1開始,可以使用下列ExXxxTimer常式:

ExAllocateTimer

ExSetTimer

ExCancelTimer

ExDeleteTimer

可以使用 ExSetTimer常式,而不是KeSetTimer 或 KeSetTimerEx常式。 您可以使用 ExCancelTimer常式,而不是KeCancelTimer常式。

ExAllocateTimerExDeleteTimer常式沒有直接的 KeXxx計時器對應專案。 這兩個常式會配置並釋放計時器物件。 這個計時器物件是系統組態的 EX_TIMER 結構,其成員不透明。 相反地, KeXxxTimer 常式所使用的計時器物件是驅動程式配置的 KTIMER 結構。 驅動程式會呼叫 KeInitializeTimerKeInitializeTimerEx 常式來初始化這個物件。 ExAllocateTimer 會初始化其配置的計時器物件。 如需 ExDeleteTimer的詳細資訊,請參閱 刪除System-Allocated Timer 物件

EX_TIMERKTIMER 結構是可等候的物件。 在驅動程式呼叫ExSetTimer、KeSetTimerKeSetTimerEx來設定計時器之後,驅動程式可以呼叫常式,例如KeWaitForSingleObjectKeWaitForMultipleObjects以等候計時器到期。 計時器物件會在計時器到期時發出訊號。 作為選項,驅動程式可以提供驅動程式實作 ExTimerCallbackCustomTimerDpc 回呼常式的指標,讓作業系統在計時器到期之後呼叫。

KeXxxTimer常式有兩個未由ExXxxTimer常式提供的功能,但大部分驅動程式都不需要這些功能。

首先,KeXxxTimer常式用來做為計時器物件的KTIMER結構會配置驅動程式。 驅動程式可以預先配置此物件,以確保物件即使在資源受限且記憶體配置可能會失敗的情況下也能使用。 相反地,呼叫 ExAllocateTimer 以配置計時器物件可能會在資源限制的環境中失敗。 不過,有些驅動程式必須設計成在記憶體配置失敗的環境中運作,而且大部分驅動程式都受益于同時配置和初始化計時器物件的 ExAllocateTimer 常式便利性。

其次,沒有與KeReadStateTimer常式相等的ExXxxTimer,這表示計時器物件是否處於訊號狀態。 不過,此常式很少使用。 如有必要,使用ExXxxTimer常式的驅動程式可以讀取驅動程式提供給ExAllocateTimer常式的ExTimerCallback 回呼常式所設定的布林值,來檢查計時器物件是否處於訊號狀態。