IKsAggregateControl 인터페이스(ksproxy.h)
IKsAggregateControl 인터페이스는 인터페이스를 지원하는 KS 개체에서 COM 서버를 집계 공급자로 추가하고 제거하는 메서드를 제공합니다.
이 인터페이스의 IID(인터페이스 식별자)는 IID_IKsAggregateControl.
상속
IKsAggregateControl 인터페이스는 IUnknown 인터페이스에서 상속됩니다.
메서드
IKsAggregateControl 인터페이스에는 이러한 메서드가 있습니다.
IKsAggregateControl::KsAddAggregate KsAddAggregate 메서드는 IKsAggregateControl 인터페이스를 노출하는 KS 개체의 인터페이스 공급자 목록에 COM 서버를 집계 공급자로 추가합니다. |
IKsAggregateControl::KsRemoveAggregate KsRemoveAggregate 메서드는 IKsAggregateControl 인터페이스를 노출하는 KS 개체의 인터페이스 공급자 목록에서 이전에 추가된 COM 서버 집계 공급자를 제거합니다. |
설명
KS 필터 또는 핀이 지원하는 모든 속성, 메서드 및 이벤트 집합은 필터 또는 핀 개체의 DirectShow 프록시 표현에서 0개 이상의 집계된 인터페이스, 대화 상자 등으로 나타낼 수 있습니다. 이러한 클라이언트 집계 인터페이스는 집합의 기능을 나타내기 위해 기본 KS 개체와 통신하는 데 사용할 수 있는 집합 확장입니다. 집합 확장은 KS 필터 또는 핸들 생성 시 핀에 의해 CoCreateInstance 를 통해 로드되는 등록된 COM 서버입니다.
확장 집합의 주요 목적은 하나 이상의 COM 인터페이스를 통해 일부 집합을 지원하도록 인터페이스의 집계를 허용하는 것입니다. 그러나 구현에는 대화 상자 지원, 스레드의 비동기 처리 등이 포함될 수 있습니다. 집합 처리기를 등록하면 집계할 특정 인터페이스 또는 명명되지 않은 인터페이스 목록이 노출될 것임을 나타낼 수 있습니다. 첫 번째 경우 적절한 쿼리만 개체로 전송되고, 후자의 경우 이미 지원되는 인터페이스와 일치하지 않는 모든 쿼리가 이 확장 개체로 전송됩니다.
확장은 IDistributorNotify 인터페이스를 지원하여 상태 변경 알림을 받을 수도 있습니다. 확장 개체가 이 인터페이스를 지원하는 경우 필터 자체가 해당 변경 내용을 처리하기 전에 모든 시작, 중지 및 일시 중지 상태 변경 내용에 대한 알림이 표시됩니다. 또한 IDistributorNotify::NotifyGraphChange 메서드는 핀 개체 확장에서 KS 핀 instance 방금 닫혔음을 나타내는 데 사용됩니다. 이 메서드는 핀 인터페이스 확장에만 사용되며 핀의 연결이 끊어지거나 다시 연결될 때마다 확장 개체에서 호출되며, 확장 개체는 여전히 핀 개체에 의해 로드되고 집계됩니다.
핀 연결이 끊어지면 확장이 언로드되지 않으므로 핀 연결 변경에 대한 알림이 필요합니다. 대신, 다시 연결이 핀에서 특정 확장 집합이 더 이상 지원되지 않는다는 것을 나타내지 않는 한 핀이 처음 연결되고 연결 해제 및 다시 연결을 통해 로드된 상태로 남아 있는 경우 확장이 로드됩니다. 이렇게 하면 확장 개체가 다시 연결 간에 상태를 유지할 수 있지만 확장에 KS 핀이 현재 연결되어 있는지 여부에 대한 정보가 필요할 수도 있습니다. 확장은 IKsObject::KsGetObjectHandle 메서드를 호출하여 확장이 NotifyGraphChange 호출을 받을 때 KS 핀의 개체 핸들을 쿼리하여 이 정보를 확인할 수 있습니다. 확장이 처음 로드되면 핀이 연결되어 있고 후속 알림이 연결 끊김 또는 다시 연결을 암시할 수 있다고 가정할 수 있습니다. 따라서 알림은 이전에 알릴 상태 변경과 달리 실제 변경이 발생한 후에 발생합니다.
집합 확장은 기본적으로 선택적으로 IDistributorNotify 인터페이스 및 확장 개체가 나타내는 집합을 조작하기 위해 필터의 클라이언트에서 사용할 수 있는 0개 이상의 집계된 인터페이스를 노출하는 COM 서버입니다. CoCreateInstance를 통한 확장 개체 만들기 요청에서 서버에는 항상 COM 개체를 만들 외부 IUnknown이 표시됩니다. 이 IUnknown 은 집합 확장을 로드하는 필터 또는 핀 개체의 인터페이스입니다. IUnknown 인터페이스 포인터는 IKsControl과 같은 필터 또는 핀에서 정보 또는 인터페이스를 쿼리하는 데 사용할 수 있습니다. 그러나 외부 개체에는 순환 참조 수가 발생하므로 참조가 남아 있지 않아야 합니다. 외부 개체에 의해 확장이 집계되고 정의에 따라 외부 개체의 참조 수가 0에 도달하면 제거되므로 참조 횟수 없이 인터페이스를 사용하는 것이 허용됩니다.
집합 확장을 로드하기 위해 프록시는 필터 또는 핀에서 수집된 각 집합의 GUID를 조회하여 각각이 레지스트리에 있는지 확인합니다. 확장을 로드할 각 집합의 GUID는 다음과 같습니다.
HKLM\System\CurrentControlSet\Control\MediaInterfaces\{set guid}
이 하위 키가 있는 경우 집합의 GUID는 CoCreateInstance 호출의 COM 서버 매개 변수에 사용되는 GUID에 직접 해당합니다. 각 하위 키에는 이 집합 확장에 대해 집계할 인터페이스에 대한 GUID의 이진 표현을 포함하는 명명된 이진 값 iid가 있을 수도 있습니다. 필터 또는 핀의 QueryInterface 가 이 확장을 위해 COM 서버로 전송되도록 하는 인터페이스 GUID입니다. 이 명명된 값이 하위 키 아래에 없는 경우 알 수 없는 모든 QueryInterface 호출이 이 확장 개체를 통해 라우팅되므로 기본 개체에 노출된 특정 집합에 대해 많은 인터페이스를 지원할 수 있습니다. 집합의 GUID는 iid를 집합의 GUID로 설정하거나 iid 값을 설정하지 않음으로써 인터페이스 식별자로 사용할 수 있습니다. 후자의 경우 지원되지 않는 추가 쿼리를 확장 개체로 보낼 수 있습니다.
MediaInterfaces 레지스트리 키를 사용하여 공급자가 집계하는 인터페이스(있는 경우)를 명시적으로 나타낼 수 있지만 전체 항목이 있으면 안 됩니다. 이는 COM 서버가 MediaInterfaces 레지스트리 키 아래에 나열되는지 여부에 관계없이 이 COM 서버가 집계된 인터페이스를 제공하므로 IKsAggregateControl을 통해 모든 COM 서버를 로드할 수 있다는 의미입니다.
설치 시 또는 특정 유형의 디바이스가 시스템에 추가될 때 지원되고 이미 정의된 확장 개체 처리기가 있는 집합의 경우 드라이버 설치는 해당 필터에 대해 이러한 COM 인터페이스를 노출하는 추가 작업을 수행할 필요가 없습니다. 그러나 프라이빗 집합에 대한 COM 인터페이스를 노출하려면 필터를 설치할 때 MediaInterfaces 항목과 COM 서버 항목을 모두 추가해야 합니다.
또한 프록시를 사용하면 필터가 MediaInterfaces에 등록된 집합에 대한 COM 서버를 재정의할 수 있습니다. 재정의하려면 플러그 앤 플레이 인터페이스 레지스트리 키 아래에 SetAliases 키를 만듭니다. CLSID 및 FriendlyName 은 HKLM\...\SetAliases 경로에 있습니다.
또한 set GUID의 문자열 형식인 명명된 값 {set guid}를 대체 MediaInterfaces 하위 키에 대한 GUID의 이진 값으로 입력합니다. 따라서 이 필터 또는 이 필터 아래의 개체에 대해 이 GUID를 사용하는 모든 집합은 이 대체 GUID를 사용하여 집합 자체의 GUID가 아닌 MediaInterfaces 항목을 찾습니다. 새 MediaInterfaces 항목은 평소와 같이 등록됩니다.
IDistributorNotify, IUnknown 및 CoCreateInstance에 대한 자세한 내용은 Microsoft Windows SDK 설명서를 참조하세요.
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | Windows |
헤더 | ksproxy.h(Ksproxy.h 포함) |