Создавайте ключи свойств устройства из дескриптора ОС Microsoft в прошивке камеры с поддержкой USB Video Class (UVC).

В прошлом производители камер класса USB видео (UVC) должны были создавать пользовательские INF-файлы для предоставления таких функций, как ключи свойств устройства. Для простых ключей реестра драйвер USBVideo имеет механизм создания ключей реестра из дескриптора ОС MS, если имя ключа имеет префикс UVC-. Это расширяет функциональные возможности в драйвере USBVideo, чтобы также создавать ключи свойств устройства из дескриптора ОС MS, если он соответствует определенному формату. Это позволяет встроенному ПО USBVideo камеры достичь совместимости по функциям с драйвером камеры MIPI без создания пользовательского INF-файла для этих камер.

Примечание.

Если тот же ключ свойства устройства определен в пользовательском INF, он переопределит значение, предоставленное дескриптором ОС MS.

Применимо к

  • Операционные системы Windows 11 и более поздних версий

Дескриптор свойства реестра MS OS 2.0

Текущий дескриптор свойства реестра MS OS 2.0 определяется следующим образом:

Смещение Поле Размер Описание
0 wLength 2 Длина дескриптора в байтах.
2 wDescriptorType 2 MS_OS_20_FEATURE_REG_PROPERTY
4 тип_данных_свойства_w 2 Тип свойства реестра
6 wPropertyNameLength 2 Длина имени свойства.
8 ИмяСвойства Переменная Имя свойства реестра.
8+M wPropertyDataLength 2 Длина данных свойств
10+ млн Данные собственности Переменная Данные свойств

Значения wPropertyDataType для дескриптора свойства реестра MS OS 2.0

В следующей таблице описываются значения wPropertyDataType для дескриптора свойства реестра MS OS 2.0:

Ценность Описание
0 ЗАРЕЗЕРВИРОВАНО
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 Несколько Юникод-строк, заканчивающихся нулевым символом (REG_MULTI_SZ)
8 и выше ЗАРЕЗЕРВИРОВАНО

Драйвер USBVideo в настоящее время копирует все дескрипторы ОС MS, имеющие префикс UVC- имен переменных реестра в каждый узел интерфейса устройства. Это точные копии одного ключа реестра в другой, с удалением префикса UVC-. Для ключей свойств устройства требуются дополнительные сведения. Для определения ключа свойства устройства необходимо задать GUID и идентификатор. Кроме того, каждому ключу требуется соответствующий тип данных и значение для этих данных. Для этой функции драйвер USBVideo сопоставит значение реестра и тип с DEVPROPTYPE.

Возможные типы реестра

Значение реестра Описание Значение DEVPROPTYPE Описание
1 REG_SZ DEVPROP_TYPE_STRING Строка, завершающаяся значением NULL
2 REG_EXPAND_SZ NA Не поддерживается
3 REG_BINARY DEVPROP_TYPE_BINARY Пользовательские двоичные данные
4 REG_DWORD_LITTLE_ENDIAN DEVPROP_TYPE_UINT32 32-разрядное целое число без знака (ULONG32)
5 REG_DWORD_BIG_ENDIAN NA Не поддерживается
6 REG_LINK NA Не поддерживается
7 REG_MULTI_SZ DEVPROP_TYPE_STRING_LIST Список строк с несколькими sz

Чтобы определить, что этот ключ свойства устройства должен быть создан, будет определен новый префикс. Если дескриптор ОС MS обнаружен с форматом DKEY-<GUID>,<ID>, то драйвер USBVideo попытается выполнить создание на его основе. Значение реестра должно быть одним из указанных выше форматов (исключая и игнорируя REG_LINK, REG_EXPAND_SZ и REG_DWORD_BIG_ENDIAN). Формат GUID должен быть {XXXXXXXX-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