Freigeben über


Objektbehälter

AVStream verwaltet ein Konstrukt, das als Objektbehälter für jedes AVStream-Objekt bezeichnet wird, das für den Minidriver sichtbar ist. Ein Objektbehälter ist ein generischer Container, in dem dynamisch zugeordneter Speicher gespeichert wird, der einem bestimmten Objekt zugeordnet ist.

Die folgenden Strukturen weisen Elemente vom Typ KSOBJECT_BAG auf, die PVOID entsprechen: KSDEVICE, KSFILTERFACTORY, KSFILTERFACTORY, KSFILTER und KSPIN.

Zu den Verwendungsmöglichkeiten von Objekttüten gehören:

  • Speicherverwaltung.

    Minidriver können Objektbehälter für die Speicherverwaltung verwenden, um die Bereinigungsarbeit zu reduzieren. Um dies zu tun, muss ein Minidriver zuerst ExAllocatePoolWithTag aufrufen, um dynamischen Speicher zuzuweisen und es einem bestimmten Objekt zuzuordnen. Der Minidriver fügt dann den zugewiesenen Speicher zum Objektbehälter hinzu, indem KsAddItemToObjectBag aufgerufen wird.

    Wenn der Minidriver KsAddItemToObjectBag aufruft, ordnet AVStream eine Standardbereinigungsfunktion (in der Regel ExFreePool) dem Objekt zu. Alternativ kann der Minidriver einen Zeiger auf eine vom Minidriver bereitgestellte Bereinigungsroutine im Free-Parameter von KsAddItemToObjectBag angeben. Wenn ein Objekt geschlossen wird, entfernt AVStream jedes Element aus dem Objektbehälter und ruft die zugehörigen Bereinigungsroutinen auf.

  • Dynamische Verteilung von zugewiesenen Daten zwischen mehreren AVStream-Objekten.

    Ein Minidriver kann dynamisch zugeordnete Daten zwischen mehreren AVStream-Objekten freigeben, indem ein bestimmtes Element in mehreren Objektbehältern platziert wird. In diesem Fall gibt AVStream das angegebene Element erst wieder frei, wenn es nicht mehr in einem Objektbehälter enthalten ist. Die einzige Einschränkung für die Anzahl der Elemente, die ein Objektbehälter enthalten kann, ist verfügbarer Arbeitsspeicher.

  • Bestimmen, welche Strukturen mit Deskriptoren bearbeitet werden können.

    Wenn ein Minidriver einen Deskriptor oder eine Deskriptor-Unterstruktur dynamisch zuweist, platziert der Minidriver den Deskriptor in der relevanten Objektsammlung. Die funktion _KsEdit verwendet dann diese Informationen, um zu bestimmen, ob eine bestimmte Struktur bearbeitet werden kann.

AVStream entfernt Elemente automatisch aus einer Objekttasche, wenn das zugehörige Objekt gelöscht wird.

Minidriver können einzelne Elemente aus einem Objektbehälter entfernen, indem KsRemoveItemFromObjectBag oder KsDiscard aufgerufen wird.