設定 Usbccgp.sys 以選取非預設 USB 組態
本文提供登錄設定的相關信息,這些設定 Usbccgp.sys 選取 USB 組態的方式。 本主題也說明 Usbccgp.sys 如何處理用戶端驅動程式所傳送的選取組態要求,以控制複合裝置的其中一個功能。
USB 複合裝置是由單一 USB 裝置內) 多個函式 (功能裝置所組成。 如果 Windows 為複合裝置載入 Microsoft 提供的 USB 一般父驅動程式 (Usbccgp.sys) ,則從該點往後,Usbccgp.sys 負責選取裝置的設定。 複合裝置的每個介面或介面集合都在許多方面都是,例如具有其本身實體裝置對象的個別裝置, (PDO) 。 重設裝置的組態會變更所有裝置介面的組態,而不只是用戶端驅動程式所控制的介面。 操作系統不允許這樣做。 因此,控制一組介面或複合裝置介面集合的客戶端驅動程序無法變更一開始由 Usbccgp.sys 所設定的組態。
不過,在 Windows Vista 和更新版本的 Windows 中,您可以新增下列登錄值來指定要選取的組態:
登錄金鑰 | 類型 | 值 | 預設值 |
---|---|---|---|
OriginalConfigurationValue | REG_DWORD | USB 組態索引。 Usbccgp.sys 先針對選取組態要求使用 OriginalConfigurationValue。 | 0 |
AltConfigurationValue | REG_DWORD | 如果具有 OriginalConfigurationValue 的 select-configuration 要求失敗,要使用的組態索引。 | 0 |
注意
根據預設,上述登錄設定不存在。 必須在 硬體 (下新增它們,也稱為USB裝置的「裝置」) 金鑰 。
登錄設定可讓 CCGP 驅動程式選取替代組態。
上表中所述的登錄值會對應至USB定義的組態索引,由組態描述元的 bConfigurationValue 成員表示, (USB_CONFIGURATION_DESCRIPTOR) , 而不是 由裝置的組態描述項中所報告的 bConfigurationNum 值所指出。 首先,Usbccgp.sys 使用 OriginalConfigurationValue 指定的 USB 設定索引,將選取組態要求傳送至父 USB 總線驅動程式 (Usbhub.sys) 。 如果該要求失敗,Usbccgp.sys 嘗試使用AlternateConfigurationValue 中指定的值。 如果AlternateConfigurationValue 或OriginalConfigurationValue無效,Usbccgp.sys 會使用預設值。
選取組態要求可能會因為許多原因而失敗。 當裝置未正確回應要求或 bMaxPower 值 (要求設定所需的電源時,) 超過中樞埠支援的電源值時,就會發生最常見的失敗。 例如,OriginalConfigurationValue 所指定特定組態 (的 bMaxPower) 為 100 milliamperes,但中樞埠只能提供 50 milliamperes。 當 Usbccgp.sys 傳送該組態的選取組態要求時,USB 驅動程式堆疊 (具體來說,USB 埠驅動程式) 會失敗要求。 Usbccgp.sys 然後指定AltConfigurationValue所指示的組態,以傳送另一個選取組態要求。 如果替代設定需要 50 milliamperes 或更少,而且不會發生其他問題,則 select-configuration 要求會順利完成。
相容性功能
即使複合裝置中函式的用戶端驅動程式無法選取複合裝置的組態,用戶端驅動程式仍然可以傳送選取組態要求給 Usbccgp.sys。 如需如何建置該要求的資訊,請參閱 如何選取USB裝置的設定。 Usbccgp.sys 從客戶端驅動程式接收選取組態要求之後,執行下列工作:
- 使用USB埠驅動程式所使用的相同準則來驗證接收的要求,以驗證任何選取組態要求。
- 如果要求指定與目前設定不同的介面或管道設定,Usbccgp.sys 傳送類型的 URB 來發出選取介面要求,URB_FUNCTION_SELECT_INTERFACE將現有的設定變更為新的介面和管道設定。
- 將 USBD_INTERFACE_INFORMATION 和 USBD_PIPE_INFORMATION 結構的快取內容複製到URB。
- 完成 URB。