다음을 통해 공유


개체 모음

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

다음 구조체에는 KSDEVICE, KSFILTERFACTORY, KSFILTER 및 KSPIN과 동일한 형식의 KSOBJECT_BAG 멤버가 있습니다.

개체 모음의 용도는 다음과 같습니다.

  • 메모리 관리.

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

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

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

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

  • 설명자로 편집할 수 있는 구조체를 결정합니다.

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

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

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