使用System-Defined回呼物件

系統會定義三個回呼物件以供驅動程式使用:

\Callback\SetSystemTime

\Callback\PowerState

\Callback\ProcessorAdd

例如,使用系統時間的驅動程式 (,檔案系統驅動程式) 可能會註冊 \Callback\SetSystemTime 回呼物件。 此回呼會在系統時間變更時提供通知。

\Callback\PowerState 回呼物件會在發生下列其中一項時提供通知:

  • 系統會從 AC 切換至 DC 電源,反之亦然。

  • 系統電源原則會隨著使用者或應用程式要求而變更。

  • 轉換至系統睡眠或關機狀態即將發生。 驅動程式可以要求通知,使其可以在預期關機時將程式碼鎖定到記憶體中。 回呼常式會在電源管理員傳送系統 set-power IRP 之前收到通知。

\Callback\ProcessorAdd回呼會在系統新增處理器時提供通知。

若要使用系統定義的回呼,驅動程式會以回呼的名稱呼叫 InitializeObjectAttributes 來初始化屬性區塊,然後開啟回呼物件 (ExCreateCallback) ,就如同驅動程式定義的回呼一樣。 驅動程式不應該要求建立回呼物件。

透過 ExCreateCallback傳回的控制碼,驅動程式會呼叫 ExRegisterCallback 來註冊通知常式,並將指標傳遞至任意內容,以及其常式的指標。 驅動程式可以隨時註冊其回呼常式。 發生指定的條件時,系統會在 IRQL < =DISPATCH_LEVEL 呼叫已註冊的回呼常式。

當驅動程式不再需要通知時,它應該呼叫 ExUnregisterCallback ,從已註冊的回呼清單中刪除其回呼常式,並移除其回呼物件的參考。