共用方式為


擴充單元Plug-In架構

USB 視訊類別驅動程式會將擴充單元公開為 USB 視訊 KS Proxy 篩選器中的節點。 擴充單元控制項會在使用者模式中進一步公開為節點上所設定的屬性,其類型為 KSNODETYPE_DEV_SPECIFIC。 屬性集的 GUID 符合擴充單元描述元的 GUID。

個別擴充單元控制項應該持續從 1 編號到 n 的最大值 這些控制項會直接對應至擴充單元屬性集上 (識別碼) 的屬性識別碼,而且可以透過 IKsControl使用標準 KSPROPERTY 要求來存取這些控制項。

為了回應來自應用程式的屬性要求,UVC 驅動程式會傳回屬性值,這些屬性值會以獨佔方式將KSPROPERTY_MEMBERSHEADER結構的MembersFlags成員設定為 KSPROPERTY_MEMBER_RANGES。 UVC 不支援任意長度的階梯狀範圍或延伸單位預設值。

若要將擴充單元屬性公開至應用程式,您可以撰寫公開 COM API 的使用者模式外掛程式 DLL。 您可以使用 IKsControl 介面對 KS 屬性所設定的要求,以實作此 API。 Vidcap.ax 根據特定登錄專案自動載入節點介面外掛程式。 應用程式可以使用 IKsTopologyInfo::CreateNodeInstance 來存取介面,接著呼叫節點物件上的 QueryInterface 以取得必要的 COM API。

需要下列元素才能寫入及使用擴充單元外掛程式:

  • 標頭和 cpp 檔案,實作擴充單元 API 和名為 IKsNodeControl 的介面。 Vidcap.ax 使用 IKsNodeControl 介面來通知擴充節點識別碼的外掛程式,並提供 IKsControl 的實例。 您可以在 範例擴充單元外掛程式 DLL中找到這些檔案的範例程式碼。

  • .rgs檔案,會在HKLM\System\CCS\Control\NodeInterfaces\Property_Set_GUID登錄子機碼下註冊節點介面和類別識別碼 () CLSID。 此登錄子機碼中的專案包含介面識別碼 (IID) 和 CLSID 的二進位值。 如需詳細資訊,請參閱 UVC 擴充單元的範例登錄專案

  • 叫用這個介面的應用程式。 應用程式會先使用 IKsTopologyInfo::CreateNodeInstance 建立具有正確節點識別碼的節點實例。 應用程式接著會在節點實例上呼叫 QueryInterface ,以取得必要的擴充單元介面。 如需詳細資訊,請參閱 UVC 擴充單元的範例應用程式 ,以及 支援具有擴充單位的自動更新事件

本節中的程式碼範例說明所有這些元素。 請參閱 建置擴充單元範例控制項 ,以瞭解如何建置範例外掛程式和相關聯的範例應用程式程式碼。

註冊外掛程式 DLL 並提供上述的登錄專案之後,Vidcap.ax 建立節點實例時自動載入相關的節點介面。

注意 從 Windows XP SP2 起,只有在節點上才支援擴充單元屬性集,而不是在篩選上。

登錄考慮

若要註冊外掛程式所匯出介面的 IID 和 CLSID,您可以使用 DLL 註冊或裝置特定的安裝資訊, (INF) 檔案。

如需範例.rgs檔案,請參閱UVC 擴充單元的範例登錄專案,其中顯示登錄專案的必要值。 本主題也會示範如何撰寫裝置特定的 INF 檔案來安裝 USB 視訊裝置,以及註冊外掛程式 DLL。 您可以根據您的特定需求,選擇 DLL 註冊或裝置特定的 INF 檔案。

圖解

下圖顯示撰寫和使用擴充單元外掛程式之各種模組之間的關聯性。 特別是它會追蹤從應用程式到外掛程式 DLL 的連線、向下到驅動程式,最後追蹤到裝置本身的擴充單元。 此圖也說明涉及的各種 GUID;使用相符色彩會醒目提示相同的值。

說明擴充單元外掛程式和相關聯模組的圖表。

事件機制

USB 視訊類別支援自動更新事件,其中裝置會通知主機驅動程式其任何控制項的變更。 Microsoft USB 視訊類別驅動程式可讓應用程式註冊自動更新事件,以支援此概念。 取得更新的套裝程式含三個步驟:

  1. 使用KSEVENTSETID_VIDCAPNotify::KSEVENT_VIDCAP_AUTO_UPDATE註冊更新事件

  2. 接聽通知事件控制碼上的事件

  3. 完成時取消通知