使用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 ,從已註冊的回呼清單中刪除其回呼常式,並移除其回呼物件的參考。