다음을 통해 공유


오브젝트 백

AVStream은 미니 드라이버에 표시되는 각 AVStream 개체에 대한 개체 모음이라고 하는 구문을 관리합니다. 개체 모음은 지정된 개체와 연결된 동적으로 할당된 메모리를 보유하기 위한 일반 컨테이너입니다.

다음 구조체에는 PVOID에 해당하는 형식인 KSOBJECT_BAG 멤버가 있는 KSDEVICE, KSFILTERFACTORY, KSFILTER 및 KSPIN이 포함되어 있습니다.

객체 백(bag)의 용도는 다음과 같습니다.

  • 메모리 관리.

    미니드라이버는 메모리 관리를 위해 객체 백(object bag)을 사용하여 정리 작업을 줄일 수 있습니다. 이렇게 하려면 미니 드라이버가 먼저 ExAllocatePoolWithTag 를 호출하여 동적 메모리를 할당하고 지정된 개체와 연결해야 합니다. 그런 다음, 미니 드라이버는 KsAddItemToObjectBag을 호출하여 개체 모음에 할당된 메모리를 추가합니다.

    미니 드라이버가 KsAddItemToObjectBag을 호출하면 AVStream은 기본 정리 함수(일반적으로 ExFreePool)를 개체와 연결합니다. 또는 미니 드라이버는 KsAddItemToObjectBagFree 매개 변수에 미니 드라이버 제공 정리 루틴에 대한 포인터를 포함할 수 있습니다. 개체가 닫힌 경우 AVStream은 개체 모음에서 모든 항목을 제거하고 연결된 정리 루틴을 호출합니다.

  • 여러 AVStream 개체 간에 동적으로 할당된 데이터를 공유합니다.

    미니 드라이버는 지정된 항목을 둘 이상의 개체 모음에 배치하여 여러 AVStream 개체 간에 동적으로 할당된 데이터를 공유할 수 있습니다. 이 경우 AVStream은 더 이상 개체 모음에 포함되지 않을 때까지 지정된 항목을 해제하지 않습니다. 개체 가방에 포함될 수 있는 항목 수에 대한 유일한 제한 사항은 사용 가능한 시스템 메모리입니다.

  • 설명자를 사용하여 편집할 수 있는 구조를 결정합니다.

    미니 드라이버가 설명자 또는 설명자 하위 구조를 동적으로 할당하는 경우 미니 드라이버는 관련 개체 모음에 설명자를 배치합니다. 그런 다음 _KsEdit 함수는 이 정보를 사용하여 지정된 구조를 편집할 수 있는지 여부를 결정합니다.

소유 개체가 삭제되면 AVStream은 개체 모음에서 항목을 자동으로 제거합니다.

미니 드라이버는 KsRemoveItemFromObjectBag 또는 KsDiscard를 호출하여 개체 모음에서 개별 항목을 제거할 수 있습니다.