定義回檔物件

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

說明定義回呼物件的圖表。

建立物件之前,驅動程式會呼叫 InitializeObjectAttributes 來設定其屬性。 回呼物件必須具有名稱,這不符合系統定義的回呼名稱;它可以擁有其建立者認為適當的任何其他屬性,通常OBJ_CASE_INSENSITIVE。 接下來,驅動程式會呼叫 ExCreateCallback,將指標傳遞至初始化的屬性,以及接收回呼物件的控制碼的位置。 它也會傳遞兩個布林值,指出如果這類具名物件不存在,系統是否應該建立回呼物件,以及物件是否應該允許多個已註冊的回呼常式。

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

發生回呼條件時,驅動程式會呼叫 ExNotifyCallback,並將其控制碼傳遞至回呼物件和兩個引數。 系統接著會呼叫註冊回呼物件的所有回呼常式,依註冊的順序,傳遞兩個引數,以及註冊常式時提供的內容指標。 驅動程式必須在 IRQL < = DISPATCH_LEVEL呼叫ExNotifyCallback;系統會在驅動程式進行此呼叫的相同 IRQL 呼叫回呼常式。

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