共用方式為


定義回呼物件

驅動程式可以建立回呼物件,透過此物件,其他驅動程式可以要求建立驅動程式所定義之條件的通知。 下圖顯示定義回呼物件時所涉及的步驟。

圖表,說明如何定義回呼物件。

建立物件之前,驅動程式會呼叫 InitializeObjectAttributes 來設定其屬性。 回呼對象必須具有名稱,該名稱不能與系統定義的回呼名稱相同,它可以擁有其建立者認為適當的任何其他屬性,通常是OBJ_CASE_INSENSITIVE。 接下來,驅動程式會呼叫 ExCreateCallback,傳遞指標給初始化的屬性,以及用於接收回呼物件句柄的位置。 它也會傳遞兩個布爾值,指出如果這類具名物件不存在,系統是否應該建立回呼物件,以及物件是否應該允許多個已註冊的回呼例程。

驅動程式會定義將呼叫已註冊回呼例程的條件。 條件的形式為兩個參數,每個參數都指向由驅動程式為創建回呼所定義的參數。 您應該記錄這些條件,以及驅動程式用戶端的回呼物件名稱及其要求通知的 IRQL。

發生回呼條件時,驅動程式會呼叫 ExNotifyCallback,並將其句柄傳遞至回呼物件和兩個自變數。 接著,系統會呼叫為回呼物件註冊的所有回呼例程,依註冊的順序,傳遞兩個自變數,以及登錄例程時提供的內容指標。 驅動程式必須在 IRQL <= DISPATCH_LEVEL 呼叫 ExNotifyCallback,系統會在驅動程式觸發此呼叫的相同 IRQL 下呼叫回呼函式。

使用回呼物件完成所有作業之後,建立回呼的驅動程序應該呼叫 ObDereferenceObject,以遞減其參考計數,並確保刪除物件。