USB 視訊類別驅動程式會將擴充單位呈現為 USB 視訊 KS Proxy 篩選器中的節點。 擴充單元控制會在使用者模式中,以屬性集的形式在類型為 KSNODETYPE_DEV_SPECIFIC 的節點上公開。 屬性集的 GUID 符合延伸模組描述元的 GUID。
各個擴展單元控制項應從 1 到某個最大值 n 連續編號。 這些控制項會直接對應至 Extension Unit 屬性集上的屬性識別碼 (識別碼) ,而且可以透過 IKsControl 使用標準 KSPROPERTY 要求來存取它們。
為了回應來自應用程式的屬性要求,UVC 驅動程式會傳回屬性值,其中 KSPROPERTY_MEMBERSHEADER 結構的 MembersFlags 成員專門設定為 KSPROPERTY_MEMBER_RANGES。 UVC 不支援任意長度的階梯式範圍或延伸單位預設值。
若要將擴充單元屬性公開給應用程式,您可以撰寫公開 COM API 的使用者模式外掛程式 DLL。 您可以使用 IKsControl 介面向 KS 屬性集提出要求,以實作此 API。 Vidcap.ax 會根據特定登錄項目自動載入節點介面外掛程式。 應用程式可以使用 IKsTopologyInfo::CreateNodeInstance 來存取介面,然後呼叫節點物件上的 QueryInterface ,以取得所需的 COM API。
撰寫及使用延伸單元外掛程式需要下列元素:
包含實作擴充單元 API 的標頭和 cpp 檔案,以及一個名為 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 開始,只有節點支援 Extension Unit 屬性集,而篩選器則不支援。
註冊表考慮事項
若要註冊外掛程式匯出之介面的 IID 和 CLSID,您可以使用 DLL 註冊或裝置特定的設定資訊 (INF) 檔案。
如需檢視顯示登錄專案所需值的範例 .rgs 檔案,請參閱 UVC 擴充單元的範例登錄項目。 本主題也示範如何撰寫裝置特定的 INF 檔案來安裝 USB 視訊裝置,以及註冊外掛程式 DLL。 您可以根據您的特定需求選擇 DLL 註冊或裝置特定的 INF 檔案。
示意圖
下列示意圖顯示撰寫及使用延伸單元外掛程式所涉及的各種模組之間的關係。 特別是,它會追蹤從應用程式到外掛程式 DLL、驅動程式,最後到裝置本身的擴充單元的連線。 示意圖也展示涉及的各種 GUID,相同的值會用相應的顏色來突出顯示。
事件機制
USB 視訊類別支援自動更新事件,其中裝置會通知主機驅動程式其任何控制項的變更。 Microsoft USB 視訊類別驅動程式會讓應用程式註冊自動更新事件,以支援此概念。 取得更新的過程包含三個步驟:
使用 KSEVENTSETID_VIDCAPNotify::KSEVENT_VIDCAP_AUTO_UPDATE 註冊更新事件
監聽通知事件處理器上的事件
完成後取消通知