Tas Objek
AVStream mengelola konstruksi yang disebut sebagai tas objek untuk setiap objek AVStream yang terlihat oleh minidriver. Tas objek adalah kontainer generik untuk menyimpan memori yang dialokasikan secara dinamis yang terkait dengan objek tertentu.
Struktur berikut memiliki anggota jenis KSOBJECT_BAG, yang setara dengan PVOID: KSDEVICE, KSFILTERFACTORY, KSFILTER, dan KSPIN.
Penggunaan tas objek meliputi:
Manajemen memori.
Minidriver dapat menggunakan tas objek untuk manajemen memori untuk mengurangi pekerjaan pembersihan. Untuk melakukan ini, minidriver harus terlebih dahulu memanggil ExAllocatePoolWithTag untuk mengalokasikan memori dinamis dan mengaitkannya dengan objek tertentu. Minidriver kemudian menambahkan memori yang dialokasikan ke tas objek dengan memanggil KsAddItemToObjectBag.
Saat minidriver memanggil KsAddItemToObjectBag, AVStream mengaitkan fungsi pembersihan default (biasanya ExFreePool) dengan objek . Atau, minidriver dapat menyertakan penunjuk ke rutinitas pembersihan yang disediakan minidriver dalam parameter GratisKsAddItemToObjectBag. Ketika objek ditutup, AVStream menghapus setiap item dari tas objek dan memanggil rutinitas pembersihan terkait.
Berbagi data yang dialokasikan secara dinamis di antara beberapa objek AVStream.
Minidriver dapat berbagi data yang dialokasikan secara dinamis di antara beberapa objek AVStream dengan menempatkan item tertentu di lebih dari satu tas objek. Dalam hal ini, AVStream tidak merilis item yang diberikan sampai tidak lagi terkandung dalam tas objek apa pun. Satu-satunya batasan jumlah item yang dapat dimuat tas objek adalah memori yang tersedia.
Menentukan struktur mana yang dapat diedit dengan deskriptor.
Jika minidriver secara dinamis mengalokasikan substruktur deskriptor atau deskriptor, minidriver menempatkan deskriptor di tas objek yang relevan. Fungsi _KsEdit kemudian menggunakan informasi ini untuk menentukan apakah struktur tertentu dapat diedit.
AVStream secara otomatis menghapus item dari tas objek jika objek pemilik dihapus.
Minidriver dapat menghapus item individual dari tas objek dengan memanggil KsRemoveItemFromObjectBag atau KsDiscard.