Compartir a través de


Creación de claves de propiedad de dispositivo desde el descriptor ms OS en el firmware de la cámara de la clase de vídeo USB (UVC)

En el pasado, los fabricantes de cámaras USB Video Class (UVC) tenían que crear archivos INF personalizados para proporcionar funcionalidad, como las claves de propiedad del dispositivo. En el caso de las claves del Registro sencillas, el controlador USBVideo tiene un mecanismo para crear claves del Registro desde el descriptor de SISTEMA operativo MS si el nombre de clave en cuestión está precedido de UVC-. Esto expande esa funcionalidad en el controlador USBVideo para crear también claves de propiedad del dispositivo a partir de un descriptor de SISTEMA operativo MS si sigue un formato específico. Esto permite que el firmware de la cámara USBVideo alcance la paridad de características con un controlador de cámara MIPI sin crear un INF personalizado para esas cámaras.

Nota

Si se define la misma clave de propiedad de dispositivo en un INF personalizado, invalidará el valor proporcionado por el descriptor de SO de MS.

Se aplica a

  • Windows 11 y sistemas operativos posteriores

Descriptor de propiedad del Registro de MS OS 2.0

El descriptor de propiedad del Registro ms OS 2.0 actual se define de la siguiente manera:

Offset Campo Size Descripción
0 wLength 2 Longitud, en bytes, de este descriptor.
2 wDescriptorType 2 MS_OS_20_FEATURE_REG_PROPERTY
4 wPropertyDataType 2 Tipo de propiedad del Registro
6 wPropertyNameLength 2 Longitud del nombre de la propiedad.
8 PropertyName Variable Nombre de la propiedad del Registro.
8+M wPropertyDataLength 2 Longitud de los datos de propiedad
10+M PropertyData Variable Datos de propiedad

Valores wPropertyDataType para el descriptor de propiedad del Registro de MS OS 2.0

En la tabla siguiente se describen los valores wPropertyDataType para el descriptor de propiedad del Registro de MS OS 2.0:

Valor Descripción
0 RESERVED
1 Cadena Unicode terminada en NULL (REG_SZ)
2 Cadena Unicode terminada en NULL que incluye variables de entorno (REG_EXPAND_SZ)
3 Binario de forma libre (REG_BINARY)
4 Entero de 32 bits de little-endian (REG_DWORD_LITTLE_ENDIAN)
5 Entero de 32 bits big-endian (REG_DWORD_BIG_ENDIAN)
6 Cadena Unicode terminada en NULL que contiene un vínculo simbólico (REG_LINK)
7 Varias cadenas Unicode terminadas en NULL (REG_MULTI_SZ)
8 y versiones posteriores RESERVED

El controlador USBVideo copiará actualmente todos los descriptores de MS OS que tengan un prefijo de como nombres de variable del Registro en cada nodo de UVC- interfaz de dispositivo. Estas son copias directas uno a uno de una clave del Registro en otra, quitando el UVC- prefijo. Para las claves de propiedad del dispositivo, se requiere información adicional. Para definir una clave de propiedad de dispositivo, debe haber un GUID y un identificador definidos. Además, cada clave requiere un tipo de datos y un valor correspondientes para esos datos. Para esta característica, el controlador USBVideo asignará un valor del Registro y un tipo a DEVPROPTYPE.

Posibles tipos de registro

Valor del Registro Descripción Valor DEVPROPTYPE Descripción
1 REG_SZ DEVPROP_TYPE_STRING Cadena terminada en NULL
2 REG_EXPAND_SZ N/D No compatible
3 REG_BINARY DEVPROP_TYPE_BINARY Datos binarios personalizados
4 REG_DWORD_LITTLE_ENDIAN DEVPROP_TYPE_UINT32 Int sin signo de 32 bits (ULONG32)
5 REG_DWORD_BIG_ENDIAN N/D No compatible
6 REG_LINK N/D No compatible
7 REG_MULTI_SZ DEVPROP_TYPE_STRING_LIST Lista de cadenas multisz

Para determinar que se debe crear esta clave de propiedad de dispositivo, se definirá un nuevo prefijo. Si se encuentra un descriptor de SISTEMA operativo MS con el formato DKEY-GUID,ID<>>,< el controlador USBVideo intentará esta creación. El valor del Registro debe ser de uno de los formatos definidos anteriores (descartando e ignorando REG_LINK, REG_EXPAND_SZ y REG_DWORD_BIG_ENDIAN). El formato de GUID debe ser {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} y el formato del identificador debe ser un valor numérico mayor que 2.

Descriptor de SO de MS de ejemplo

En el ejemplo siguiente se define un descriptor de SISTEMA operativo 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)
};

Esto se convertirá en la siguiente clave de propiedad del dispositivo mediante IoSetDevicePropertyData con los parámetros siguientes:

DEVPROPKEY

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

    DEVPROPID = 3

DEVPROPTYPE = DEVPROP_TYPE_UINT32

PropertyBuffer containing UINT32 value = 940