物件包
AVStream 會針對迷你驅動程式可見的每個 AVStream 物件,管理稱為物件包的建構。 物件包是一般容器,用來保存與指定物件相關聯的動態配置記憶體。
下列結構具有類型為 KSOBJECT_BAG 的成員,這相當於 PVOID:KSDEVICE、KSFILTERFACTORY、KSFILTER和KSPIN。
物件包的使用包括:
記憶體管理。
迷你驅動程式可以使用物件包進行記憶體管理,以減少清除工作。 若要這樣做,迷你驅動程式必須先呼叫 ExAllocatePoolWithTag 來配置動態記憶體,並將它與指定的物件產生關聯。 接著,迷你驅動程式會呼叫 KsAddItemToObjectBag,將配置的記憶體新增至物件包。
當迷你驅動程式呼叫 KsAddItemToObjectBag時,AVStream 會將預設清除函式關聯 (通常與 物件) 。 或者,迷你驅動程式可以在KsAddItemToObjectBag的Free參數中包含 minidriver 提供的清除常式指標。 關閉物件時,AVStream 會從物件包中移除每個專案,並呼叫相關聯的清除常式。
在數個 AVStream 物件之間共用動態配置的資料。
迷你驅動程式可以在數個 AVStream 物件之間共用動態配置的資料,方法是將指定的專案放在多個物件包中。 在此情況下,AVStream 不會釋出指定的專案,直到它不再包含在任何物件包中為止。 物件包可包含之專案數目的唯一限制是可用的記憶體。
判斷哪些結構可以使用描述元進行編輯。
如果迷你驅動程式動態配置描述項或描述元子結構,迷你驅動程式會將描述項放在相關的物件包中。 _KsEdit函式接著會使用此資訊來判斷是否可以編輯指定的結構。
如果刪除擁有的物件,AVStream 會自動從物件包中移除專案。
Minidrivers 可以藉由呼叫 KsRemoveItemFromObjectBag 或 KsDiscard,從物件包移除個別專案。