Mengonfigurasi Usbccgp.sys untuk memilih konfigurasi USB non-default

Artikel ini menyediakan informasi tentang pengaturan registri yang mengonfigurasi cara Usbccgp.sys memilih konfigurasi USB. Topik ini juga menjelaskan bagaimana Usbccgp.sys menangani permintaan konfigurasi tertentu yang dikirim oleh driver klien yang mengontrol salah satu fungsi perangkat komposit.

Perangkat komposit USB terdiri dari beberapa fungsi (perangkat fungsional) dalam satu perangkat USB. Jika Windows memuat USB Generic Parent Driver (Usbccgp.sys) yang disediakan Microsoft untuk perangkat komposit, dari titik tersebut ke depan, Usbccgp.sys bertanggung jawab untuk memilih konfigurasi perangkat. Setiap antarmuka atau koleksi antarmuka perangkat komposit, dalam banyak hal, seperti perangkat terpisah yang memiliki objek perangkat fisik (PDO) sendiri. Mengatur ulang konfigurasi perangkat mengubah konfigurasi untuk semua antarmuka perangkat, bukan hanya yang dikontrol driver klien. Sistem operasi tidak memperbolehkan ini. Oleh karena itu, driver klien yang mengontrol sekumpulan antarmuka atau kumpulan antarmuka perangkat komposit tidak dapat mengubah konfigurasi yang awalnya diatur oleh Usbccgp.sys.

Namun, di Windows Vista dan versi Windows yang lebih baru, Anda dapat menambahkan nilai registri berikut untuk menentukan konfigurasi yang akan dipilih:

Kunci Registri Jenis Nilai Nilai Default
OriginalConfigurationValue REG_DWORD Indeks konfigurasi USB. Usbccgp.sys menggunakan OriginalConfigurationValue terlebih dahulu untuk permintaan konfigurasi tertentu. 0
AltConfigurationValue REG_DWORD Indeks konfigurasi yang akan digunakan jika permintaan select-configuration dengan OriginalConfigurationValue gagal. 0

Catatan

Pengaturan registri sebelumnya tidak ada, secara default. Mereka harus ditambahkan di bawah kunci perangkat keras (alias "perangkat") dari perangkat USB.

Pengaturan registri memungkinkan driver CCGP untuk memilih konfigurasi alternatif.

Nilai registri yang dijelaskan dalam tabel sebelumnya sesuai dengan indeks konfigurasi yang ditentukan USB, ditunjukkan oleh anggota bConfigurationValue dari deskriptor konfigurasi (USB_CONFIGURATION_DESCRIPTOR) dan bukan oleh nilai bConfigurationNum yang dilaporkan dalam deskriptor konfigurasi perangkat. Pertama, Usbccgp.sys mengirimkan permintaan konfigurasi tertentu ke driver bus USB induk (Usbhub.sys) dengan menggunakan indeks konfigurasi USB yang ditentukan oleh OriginalConfigurationValue. Jika permintaan tersebut gagal, Usbccgp.sys mencoba menggunakan nilai yang ditentukan dalam AlternateConfigurationValue. Usbccgp.sys menggunakan nilai default jika AlternateConfigurationValue atau OriginalConfigurationValue tidak valid.

Permintaan konfigurasi tertentu dapat gagal karena berbagai alasan. Kegagalan paling umum terjadi ketika perangkat tidak merespons permintaan dengan benar atau ketika nilai bMaxPower (daya yang diperlukan oleh konfigurasi yang diminta) melebihi nilai daya yang didukung oleh port hub. Misalnya, bMaxPower untuk konfigurasi tertentu (ditentukan oleh OriginalConfigurationValue) adalah 100 miliamperes tetapi port hub hanya dapat menyediakan 50 miliamper. Ketika Usbccgp.sys mengirim permintaan konfigurasi pilih untuk konfigurasi tersebut, tumpukan driver USB (khususnya, driver port USB) gagal dalam permintaan. Usbccgp.sys kemudian mengirim permintaan pilih-konfigurasi lain dengan menentukan konfigurasi yang ditunjukkan oleh AltConfigurationValue. Jika konfigurasi alternatif memerlukan 50 miliamper atau kurang dan tidak ada masalah lain yang terjadi, permintaan pilih-konfigurasi berhasil diselesaikan.

Fitur kompatibilitas

Meskipun driver klien untuk fungsi di perangkat komposit tidak dapat memilih konfigurasi perangkat komposit, driver klien masih dapat mengirim permintaan konfigurasi tertentu ke Usbccgp.sys. Untuk informasi tentang cara membuat permintaan tersebut, lihat Cara Memilih Konfigurasi untuk Perangkat USB. Usbccgp.sys melakukan tugas berikut setelah menerima permintaan konfigurasi tertentu dari driver klien:

  1. Memvalidasi permintaan yang diterima dengan menggunakan kriteria yang sama yang digunakan oleh driver port USB untuk memvalidasi permintaan konfigurasi tertentu.
  2. Jika permintaan menentukan pengaturan antarmuka atau pipa yang berbeda dari pengaturan saat ini, Usbccgp.sys mengeluarkan permintaan antarmuka pilih dengan mengirim URB jenis URB_FUNCTION_SELECT_INTERFACE untuk mengubah pengaturan yang ada ke antarmuka baru dan pengaturan pipa.
  3. Menyalin konten yang di-cache dari struktur USBD_INTERFACE_INFORMATION dan USBD_PIPE_INFORMATION ke dalam URB.
  4. Melengkapi URB.