共用方式為


IKsAggregateControl 介面 (ksproxy.h)

IKsAggregateControl 介面提供方法,可在支援介面的 KS 物件上新增和移除 COM 伺服器做為匯總提供者。

這個介面的介面標識碼 (IID) 是IID_IKsAggregateControl。

遺產

IKsAggregateControl 介面繼承自 IUnknown 介面

方法

IKsAggregateControl 介面具有這些方法。

 
IKsAggregateControl::KsAddAggregate

KsAddAggregate 方法會將 COM 伺服器新增為匯總提供者至公開 IKsAggregateControl 介面之 KS 物件的介面提供者清單。
IKsAggregateControl::KsRemoveAggregate

KsRemoveAggregate 方法會從公開 IKsAggregateControl 介面之 KS 物件的介面提供者清單中移除先前新增的 COM 伺服器匯總提供者。

言論

KS 篩選或釘選支援的所有屬性、方法和事件集,都可以以零個或多個匯總介面、對話方塊等方式,在篩選或釘選物件的 DirectShow Proxy 表示上表示。 這些客戶端匯總介面是設定延伸模組,然後可用來與基礎 KS 物件通訊,以代表集合的功能。 集合延伸模組是已註冊的 COM 伺服器,它會透過 KS 篩選器或針腳在建立時間透過 CoCreateInstance 載入。

設定延伸模組的主要目的是允許介面的匯總,以便透過一或多個 COM 介面支援某些集合。 不過,實作也可能包含對話的支持、線程中的異步處理等等。 設定處理程式的註冊可讓一個處理程式指出要匯總的特定介面,或是將公開未命名的介面清單。 在第一個案例中,只有適當的查詢會傳送至 物件,而後者中所有不符合已支援介面的查詢都會傳送至這個擴充物件。

延伸模組也可以藉由支援 IDistributorNotify 介面來接收狀態變更的通知。 如果擴充對象支援這個介面,則會在篩選本身處理這些變更之前,收到所有啟動、停止和暫停狀態變更的通知。 此外,IDistributorNotify::NotifyGraphChange 方法會用於 pin 物件延伸模組,表示 KS 針腳實例剛剛關閉。 這個方法僅用於針腳介面延伸模組,而且每次針腳中斷連接或重新連線時,都會在擴充物件上呼叫,而擴充物件仍由針腳物件載入和匯總。

需要針腳連線變更的通知,因為當針腳中斷連線時,擴充功能不會卸除。 相反地,延伸模組會在第一次連接針腳時載入,並透過中斷連線和重新連線而繼續載入,除非重新連接表示針腳上不再支援特定擴充功能集。 這個事實可讓擴充物件在重新連線之間保留狀態,但也表示延伸模組可能需要 KS 針腳目前連接的相關信息。 延伸模組可以呼叫 IKsObject::KsGetObjectHandle 方法來查詢擴充功能收到 NotifyGraphChange 呼叫時,KS 針腳的物件句柄,以判斷這項資訊。 第一次載入擴充功能時,它可以假設針腳已連線,而任何後續通知都表示中斷連線或重新連線。 因此,通知會在實際變更發生之後發生,而不是之前通知的狀態變更。

集合延伸模組基本上是 COM 伺服器,可選擇性地公開 IDistributorNotify 介面,以及可供篩選用戶端用來作延伸模組物件所代表集合的其他匯總介面。 在透過 CoCreateInstance的擴充物件建立要求上,伺服器一律會顯示用來建立 COM 物件的外部 IUnknown。 這個 IUnknown 是載入集合延伸模組之篩選或釘選物件的介面。 IUnknown 介面指標可用來從篩選或釘選查詢資訊或介面,例如 IKsControl。 不過,不應將參考留在外部物件上,因為它會導致迴圈參考計數。 使用沒有參考計數的介面是可接受的,因為延伸是由外部物件匯總,而且根據定義,會在外部對象的參考計數達到零時終結。

為了載入集合延伸模組,Proxy 會查閱從篩選或釘選收集之每個集合的 GUID,判斷登錄中是否有每個集合。 要載入擴充功能之每個集合的 GUID 為:

HKLM\System\CurrentControlSet\Control\MediaInterfaces\{set guid}

如果此子機碼存在,則集合的 GUID 會直接對應至 CoCreateInstance 呼叫之 COM 伺服器參數中使用的 GUID。 每個子機碼也可能有一個具名的二進位值 iid,其中包含 GUID 的二進位表示法,以便針對這個集合延伸模組匯總介面。 這是介面 GUID,會導致篩選或釘選上的 QueryInterface 傳送至此延伸模組的 COM 伺服器。 如果子機碼下沒有這個具名值,則所有未知 QueryInterface 呼叫都會透過這個延伸模組物件路由傳送,因此允許它支援基礎對象上公開的特定集合的許多介面。 集合的 GUID 可以藉由將 iid 設定為集合的 GUID,或未設定 iid 值,來作為介面識別碼。 在後者的情況下,不支援的其他查詢可能會傳送至擴充物件。

雖然 MediaInterfaces 登錄機碼可用來明確指出提供者匯總的介面(如果有的話),但整個專案不需要存在。 暗示任何 COM 伺服器都可以透過 IKsAggregateControl 載入,讓此 COM 伺服器提供匯總介面,不論 COM 伺服器是否列在 MediaInterfaces 登錄機碼底下。

對於支援且已經定義在安裝時間自動註冊的擴充對象處理程式,或將特定類型的裝置新增至系統時,驅動程式安裝不需要執行任何額外的工作來公開這些 COM 介面以供篩選。 不過,若要公開私人集合的 COM 介面,MediaInterfaces 專案,以及安裝篩選時必須新增 COM 伺服器專案。

Proxy 也允許篩選條件覆寫在 MediaInterfaces 下註冊之集合的 COM 伺服器。 若要覆寫,請在隨插即用介面登錄機碼下建立 SetAliases 機碼。 CLSIDFriendlyName 位於 HKLM\...\SetAliases 路徑

此外,輸入具名值 {set guid},這是設定 GUID 的字串格式,做為取代 MediaInterfaces 子機碼之 GUID 的二進位值。 因此,針對此篩選或此篩選下的任何物件,具有此 GUID 的所有集合都會使用此替代 GUID 來尋找 MediaInterfaces 專案,而不是集合本身的 GUID。 新的 MediaInterfaces 專案會如往常註冊。

如需 IDistributorNotifyIUnknownCoCreateInstance的詳細資訊,請參閱 Microsoft Windows SDK 檔。

要求

要求 價值
目標平臺 窗戶
標頭 ksproxy.h (包括 Ksproxy.h)

另請參閱

IKsControl

IKsObject::KsGetObjectHandle

KsAddAggregate

KsRemoveAggregate