物件包

AVStream 會針對迷你驅動程式可見的每個 AVStream 物件,管理稱為物件包的建構。 物件包是一般容器,用來保存與指定物件相關聯的動態配置記憶體。

下列結構具有類型為 KSOBJECT_BAG 的成員,這相當於 PVOID:KSDEVICEKSFILTERFACTORY、KSFILTERKSPIN

物件包的使用包括:

  • 記憶體管理。

    迷你驅動程式可以使用物件包進行記憶體管理,以減少清除工作。 若要這樣做,迷你驅動程式必須先呼叫 ExAllocatePoolWithTag 來配置動態記憶體,並將它與指定的物件產生關聯。 接著,迷你驅動程式會呼叫 KsAddItemToObjectBag,將配置的記憶體新增至物件包。

    當迷你驅動程式呼叫 KsAddItemToObjectBag時,AVStream 會將預設清除函式關聯 (通常與 物件) 。 或者,迷你驅動程式可以在KsAddItemToObjectBagFree參數中包含 minidriver 提供的清除常式指標。 關閉物件時,AVStream 會從物件包中移除每個專案,並呼叫相關聯的清除常式。

  • 在數個 AVStream 物件之間共用動態配置的資料。

    迷你驅動程式可以在數個 AVStream 物件之間共用動態配置的資料,方法是將指定的專案放在多個物件包中。 在此情況下,AVStream 不會釋出指定的專案,直到它不再包含在任何物件包中為止。 物件包可包含之專案數目的唯一限制是可用的記憶體。

  • 判斷哪些結構可以使用描述元進行編輯。

    如果迷你驅動程式動態配置描述項或描述元子結構,迷你驅動程式會將描述項放在相關的物件包中。 _KsEdit函式接著會使用此資訊來判斷是否可以編輯指定的結構。

如果刪除擁有的物件,AVStream 會自動從物件包中移除專案。

Minidrivers 可以藉由呼叫 KsRemoveItemFromObjectBagKsDiscard,從物件包移除個別專案。