Создание ключей свойств устройства из дескриптора ОС MS в встроенном ПО камеры класса ВИДЕО USB (UVC)
В прошлом производителям usb-видеоклассов (UVC) приходилось создавать пользовательские INF-файлы для предоставления функциональных возможностей, таких как ключи свойств устройства. Для простых разделов реестра драйвер USBVideo имеет механизм создания разделов реестра из дескриптора ОС MS, если имя ключа предваряется UVC-
. Это расширяет возможности драйвера USBVideo, чтобы также создавать ключи свойств устройства из дескриптора ОС MS, если он соответствует определенному формату. Это позволяет встроенному ПО камеры USBVideo достичь четности функций с драйвером камеры MIPI без создания пользовательского INF-файла для этих камер.
Примечание
Если один и тот же ключ свойства устройства определен в пользовательском inf, он переопределит значение, предоставленное дескриптором ОС MS.
Применяется к
- Windows 11 и более поздних версий операционных систем
Дескриптор свойства реестра MS OS 2.0
Текущий дескриптор свойства реестра MS OS 2.0 определяется следующим образом:
Offset | Поле | Size | Описание |
---|---|---|---|
0 | wLength | 2 | Длина этого дескриптора в байтах. |
2 | wDescriptorType | 2 | MS_OS_20_FEATURE_REG_PROPERTY |
4 | wPropertyDataType | 2 | Тип свойства реестра |
6 | wPropertyNameLength | 2 | Длина имени свойства. |
8 | PropertyName | Переменная | Имя свойства реестра. |
8+M | wPropertyDataLength | 2 | Длина данных свойства |
10+M | PropertyData | Переменная | Данные свойств |
Значения wPropertyDataType для дескриптора свойств реестра MS OS 2.0
В следующей таблице описаны значения wPropertyDataType для дескриптора свойств реестра MS OS 2.0:
Значение | Описание |
---|---|
0 | RESERVED |
1 | Строка Юникода с завершением NULL (REG_SZ) |
2 | Строка Юникода, завершающаяся null, которая включает переменные среды (REG_EXPAND_SZ) |
3 | Двоичный файл в свободной форме (REG_BINARY) |
4 | 32-разрядное целое число (REG_DWORD_LITTLE_ENDIAN) |
5 | 32-разрядное целое число (REG_DWORD_BIG_ENDIAN) |
6 | Строка Юникода, заканчивающаяся null, которая содержит символьную ссылку (REG_LINK) |
7 | Несколько строк Юникода с завершением NULL (REG_MULTI_SZ) |
8 и выше | RESERVED |
Драйвер USBVideo в настоящее время копирует все дескрипторы UVC-
ОС MS с префиксом в качестве имен переменных реестра в каждый узел интерфейса устройства. Это прямые копии одного раздела реестра в другой с удалением UVC-
префикса. Для ключей свойств устройства требуются дополнительные сведения. Для определения ключа свойства устройства должны быть определены GUID и идентификатор. Кроме того, каждому ключу требуется соответствующий тип данных и значение для этих данных. Для этой функции драйвер USBVideo сопоставляет значение реестра и тип с DEVPROPTYPE.
Возможные типы реестра
Значение реестра | Описание | Значение DEVPROPTYPE | Описание |
---|---|---|---|
1 | REG_SZ | DEVPROP_TYPE_STRING | Строка, заканчивающаяся null |
2 | REG_EXPAND_SZ | Н/Д | Не поддерживается |
3 | REG_BINARY | DEVPROP_TYPE_BINARY | Пользовательские двоичные данные |
4 | REG_DWORD_LITTLE_ENDIAN | DEVPROP_TYPE_UINT32 | 32-разрядная версия int без знака (ULONG32) |
5 | REG_DWORD_BIG_ENDIAN | Н/Д | Не поддерживается |
6 | REG_LINK | Н/Д | Не поддерживается |
7 | REG_MULTI_SZ | DEVPROP_TYPE_STRING_LIST | Список строк с несколькими sz |
Чтобы определить, что этот ключ свойства устройства должен быть создан, будет определен новый префикс. Если дескриптор ОС MS найден в формате DKEY-GUID,ID<>>,< драйвер USBVideo попытается создать его. Значение реестра должно иметь один из указанных выше форматов (отмена и игнорирование REG_LINK, REG_EXPAND_SZ и REG_DWORD_BIG_ENDIAN). Формат GUID должен быть {XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXXX}, а формат идентификатора должен быть числовым значением больше 2.
Пример дескриптора ОС MS
В следующем примере определяется дескриптор ОС MS:
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)
};
Он преобразуется в следующий ключ свойства устройства с помощью IoSetDevicePropertyData со следующими параметрами:
DEVPROPKEY
DEVPROPGUID = {4023440c-a74e-46e0-82df-e486fa545f40}
DEVPROPID = 3
DEVPROPTYPE = DEVPROP_TYPE_UINT32
PropertyBuffer containing UINT32 value = 940