共用方式為


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 伺服器,它會在句柄建立期間透過 CoCreateInstance 載入 KS 篩選器或針腳。

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

延伸模組也可以藉由支援 IDistributorNotify 介面來接收狀態變更的通知。 如果擴充物件支援此介面,則會在篩選本身處理這些變更之前收到所有啟動、停止和暫停狀態變更的通知。 此外, IDistributorNotify::NotifyGraphChange 方法用於針腳物件延伸模組,以指出 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 的二進位表示法。 這是會導致篩選或釘選上的 QueryInterface 傳送至 COM 伺服器的介面 GUID,以供此延伸模組使用。 如果子機碼下沒有這個具名值,所有未知 的 QueryInterface 呼叫都會透過這個延伸模組物件路由傳送,因此允許它支援基礎物件上公開的特定集合的許多介面。 將 iid 設定為集合的 GUID,或未設定 iid 值,即可將集合的 GUID 當做介面識別碼使用。 在後者的情況下,不支援的其他查詢可能會傳送至擴充物件。

雖然 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 檔。

規格需求

需求
目標平台 Windows
標頭 ksproxy.h (包含 Ksproxy.h)

另請參閱

IKsControl

IKsObject::KsGetObjectHandle

KsAddAggregate

KsRemoveAggregate