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