Bagikan melalui


Membuat kunci properti perangkat dari deskriptor MS OS di firmware kamera USB Video Class (UVC)

Di masa lalu, produsen kamera USB Video Class (UVC) harus menulis file INF kustom untuk menyediakan fungsionalitas seperti kunci properti perangkat. Untuk kunci registri sederhana, driver USBVideo memiliki mekanisme untuk membuat kunci registri dari deskriptor MS OS jika nama kunci yang dimaksud diawali dengan UVC-. Ini memperluas fungsionalitas tersebut di driver USBVideo untuk juga membuat kunci properti perangkat dari deskriptor MS OS jika mengikuti format tertentu. Ini memungkinkan firmware kamera USBVideo untuk mencapai paritas fitur dengan driver kamera MIPI tanpa menulis INF khusus untuk kamera tersebut.

Catatan

Jika kunci properti perangkat yang sama didefinisikan dalam INF kustom, kunci tersebut akan mengambil alih nilai yang disediakan oleh deskriptor MS OS.

Berlaku untuk

  • Windows 11 dan sistem operasi yang lebih baru

Deskriptor properti registri MS OS 2.0

Deskriptor properti registri MS OS 2.0 saat ini didefinisikan sebagai berikut:

Offset Bidang Ukuran Deskripsi
0 wLength 2 Panjang, dalam byte, dari deskriptor ini.
2 wDescriptorType 2 MS_OS_20_FEATURE_REG_PROPERTY
4 wPropertyDataType 2 Jenis properti registri
6 wPropertyNameLength 2 Panjang nama properti.
8 PropertyName Variabel Nama properti registri.
8+M wPropertyDataLength 2 Panjang data properti
10+M PropertyData Variabel Data properti

nilai wPropertyDataType untuk deskriptor properti registri MS OS 2.0

Tabel berikut ini menjelaskan nilai wPropertyDataType untuk deskriptor properti registri MS OS 2.0:

Nilai Deskripsi
0 DIPESAN
1 Untai (karakter) Unicode yang dihentikan NULL (REG_SZ)
2 Untai (karakter) Unicode yang dihentikan NULL yang mencakup variabel lingkungan (REG_EXPAND_SZ)
3 Biner bentuk bebas (REG_BINARY)
4 Bilangan bulat 32-bit little-endian (REG_DWORD_LITTLE_ENDIAN)
5 Bilangan bulat 32-bit big-endian (REG_DWORD_BIG_ENDIAN)
6 String Unicode yang dihentikan NULL yang berisi tautan simbolis (REG_LINK)
7 Beberapa string Unicode yang dihentikan NULL (REG_MULTI_SZ)
8 dan lebih tinggi DIPESAN

Driver USBVideo saat ini akan menyalin semua deskriptor MS OS yang memiliki awalan UVC- sebagai nama variabel registri ke setiap simpul antarmuka perangkat. Ini adalah salinan langsung satu-ke-satu dari satu kunci registri ke kunci registri lainnya, menghapus awalan UVC- . Untuk kunci properti perangkat, diperlukan informasi tambahan. Untuk menentukan kunci properti perangkat, perlu ada GUID dan ID yang ditentukan. Selain itu, setiap kunci memerlukan jenis dan nilai data yang sesuai untuk data tersebut. Untuk fitur ini, driver USBVideo akan memetakan nilai registri dan mengetik ke DEVPROPTYPE.

Kemungkinan Jenis Registri

Nilai Registri Deskripsi Nilai DEVPROPTYPE Deskripsi
1 REG_SZ DEVPROP_TYPE_STRING String yang dihentikan null
2 REG_EXPAND_SZ NA Tidak didukung
3 REG_BINARY DEVPROP_TYPE_BINARY Data biner kustom
4 REG_DWORD_LITTLE_ENDIAN DEVPROP_TYPE_UINT32 Int tidak bertanda 32-bit (ULONG32)
5 REG_DWORD_BIG_ENDIAN NA Tidak didukung
6 REG_LINK NA Tidak didukung
7 REG_MULTI_SZ DEVPROP_TYPE_STRING_LIST Daftar string multi-sz

Untuk menentukan bahwa kunci properti perangkat ini harus dibuat, awalan baru akan ditentukan. Jika deskriptor MS OS ditemukan dengan format DKEY-GUID,ID<>>,< driver USBVideo akan mencoba pembuatan ini. Nilai registri harus dari salah satu format yang ditentukan di atas (membuang dan mengabaikan REG_LINK, REG_EXPAND_SZ, dan REG_DWORD_BIG_ENDIAN). Format GUID harus {XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} dan format ID harus menjadi nilai numerik yang lebih besar dari 2.

Contoh deskriptor MS OS

Contoh berikut mendefinisikan deskriptor MS OS:

UCHAR Example2_MSOS20DescriptorSet_UVCDevicePropertyKeyForFutureWindows\[0x3C\] =
{

//
// MS OS 2.0 Descriptor Set Header
//
0x0A, 0x00, // wLength - 10 bytes
0x00, 0x00, // MSOS20_SET_HEADER_DESCRIPTOR
0x00, 0x00, 0x0?, 0x06, // dwWindowsVersion – 0x060?0000 for future Windows version
0x76, 0x00, // wTotalLength – 118 bytes

//
// MS OS 2.0 Registry Value Feature Descriptor
//
0x6c, 0x00, // wLength - 108 bytes
0x04, 0x00, // wDescriptorType – 4 for Registry Property
0x04, 0x00, // wPropertyDataType - 4 for REG_DWORD_LITTLE_ENDIAN
0x5E, 0x00, // wPropertyNameLength – 94 bytes
'D', 0x00, 'K', 0x00, // Property Name – **DKEY-{4023440c-a74e-46e0-82df-e486fa545f40},3**
'E', 0x00, 'Y', 0x00,
'-', 0x00, '{', 0x00,
'4', 0x00, '0', 0x00,
'2', 0x00, '3', 0x00,
'4', 0x00, '4', 0x00,
'0', 0x00, 'C', 0x00,
'-', 0x00, 'A', 0x00,
'7', 0x00, '4', 0x00,
'E', 0x00, '-', 0x00,
'4', 0x00, '6', 0x00,
'E', 0x00, '0', 0x00,
'-', 0x00, '8', 0x00,
'2', 0x00, 'D', 0x00,
'F', 0x00, '-', 0x00,
'E', 0x00, '4', 0x00,
'8', 0x00, '6', 0x00,
'F', 0x00, 'A', 0x00,
'5', 0x00, '4', 0x00,
'5', 0x00, 'F', 0x00,
'4', 0x00, '0', 0x00,
'}', 0x00, ',', 0x00,
'3', 0x00, 0x00, 0x00,
0x00, 0x00,
0x04, 0x00, // wPropertyDataLength – 4 bytes
0xAC, 0x03, 0x00, 0x00 // PropertyData – 0x000003AC (940)
};

Ini akan mengonversi ke kunci properti perangkat berikut menggunakan IoSetDevicePropertyData dengan parameter berikut:

DEVPROPKEY

    DEVPROPGUID = {4023440c-a74e-46e0-82df-e486fa545f40}

    DEVPROPID = 3

DEVPROPTYPE = DEVPROP_TYPE_UINT32

PropertyBuffer containing UINT32 value = 940