Criar chaves de propriedade do dispositivo do descritor do SISTEMA OPERACIONAL MS no firmware da câmera UVC (Classe de Vídeo USB)
No passado, os fabricantes de câmeras UVC (Classe de Vídeo USB) tinham que criar arquivos INF personalizados para fornecer funcionalidades como chaves de propriedade do dispositivo. Para chaves de registro simples, o driver USBVideo tem um mecanismo para criar chaves do Registro do descritor do SISTEMA OPERACIONAL MS se o nome da chave em questão for precedido por UVC-
. Isso expande essa funcionalidade no driver USBVideo para também criar chaves de propriedade do dispositivo de um descritor do SISTEMA OPERACIONAL MS se ele seguir um formato específico. Isso permite que o firmware da câmera USBVideo alcance a paridade de recursos com um driver de câmera MIPI sem criar um INF personalizado para essas câmeras.
Observação
Se a mesma chave de propriedade do dispositivo for definida em um INF personalizado, ela substituirá o valor fornecido pelo descritor do SISTEMA OPERACIONAL MS.
Aplica-se a
- Windows 11 e sistemas operacionais posteriores
Descritor de propriedade do registro do MS OS 2.0
O descritor de propriedade do registro do MS OS 2.0 atual é definido da seguinte maneira:
Deslocamento | Campo | Tamanho | Descrição |
---|---|---|---|
0 | wLength | 2 | Comprimento, em bytes, desse descritor. |
2 | wDescriptorType | 2 | MS_OS_20_FEATURE_REG_PROPERTY |
4 | wPropertyDataType | 2 | Tipo de propriedade do Registro |
6 | wPropertyNameLength | 2 | Comprimento do nome da propriedade. |
8 | PropertyName | Variável | Nome da propriedade do Registro. |
8+M | wPropertyDataLength | 2 | Comprimento dos dados de propriedade |
10+M | PropertyData | Variável | Dados de propriedade |
valores wPropertyDataType para o descritor de propriedade do registro do MS OS 2.0
A tabela a seguir descreve os valores wPropertyDataType para o descritor de propriedade do registro do MS OS 2.0:
Valor | Descrição |
---|---|
0 | RESERVADO |
1 | Cadeia de caracteres Unicode terminada em NULL (REG_SZ) |
2 | Cadeia de caracteres Unicode terminada em NULL que inclui variáveis de ambiente (REG_EXPAND_SZ) |
3 | Binário de forma livre (REG_BINARY) |
4 | Número inteiro de 32 bits little-endian (REG_DWORD_LITTLE_ENDIAN) |
5 | Inteiro de 32 bits big-endian (REG_DWORD_BIG_ENDIAN) |
6 | Cadeia de caracteres Unicode terminada em NULL que contém um link simbólico (REG_LINK) |
7 | Várias cadeias de caracteres Unicode terminadas em NULL (REG_MULTI_SZ) |
8 e superior | RESERVADO |
No momento, o driver USBVideo copiará todos os descritores do SISTEMA OPERACIONAL MS que têm um prefixo de como nomes de UVC-
variáveis de registro para cada nó de interface do dispositivo. Essas são cópias diretas de uma chave do Registro para outra, removendo o UVC-
prefixo . Para chaves de propriedade do dispositivo, informações adicionais são necessárias. Para definir uma chave de propriedade do dispositivo, é necessário ter um GUID e uma ID definidos. Além disso, cada chave requer um tipo de dados e um valor correspondentes para esses dados. Para esse recurso, o driver USBVideo mapeará um valor e um tipo do Registro para um DEVPROPTYPE.
Possíveis tipos de registro
Valor do Registro | Descrição | Valor DEVPROPTYPE | Descrição |
---|---|---|---|
1 | REG_SZ | DEVPROP_TYPE_STRING | Cadeia de caracteres terminada em nulo |
2 | REG_EXPAND_SZ | NA | Sem suporte |
3 | REG_BINARY | DEVPROP_TYPE_BINARY | Dados binários personalizados |
4 | REG_DWORD_LITTLE_ENDIAN | DEVPROP_TYPE_UINT32 | Int sem sinal de 32 bits (ULONG32) |
5 | REG_DWORD_BIG_ENDIAN | NA | Sem suporte |
6 | REG_LINK | NA | Sem suporte |
7 | REG_MULTI_SZ | DEVPROP_TYPE_STRING_LIST | Lista de cadeias de caracteres de vários sz |
Para determinar que essa chave de propriedade do dispositivo deve ser criada, um novo prefixo será definido. Se um descritor do SISTEMA OPERACIONAL MS for encontrado com o formato DKEY-GUID,ID<><>, o driver USBVideo tentará essa criação. O valor do Registro deve ser de um dos formatos definidos acima (descartando e ignorando REG_LINK, REG_EXPAND_SZ e REG_DWORD_BIG_ENDIAN). O formato do GUID deve ser {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXX} e o formato da ID deve ser um valor numérico maior que 2.
Descritor de sistema operacional MS de exemplo
O exemplo a seguir define um descritor do SISTEMA OPERACIONAL 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)
};
Isso converteria para a seguinte chave de propriedade do dispositivo usando IoSetDevicePropertyData com os seguintes parâmetros:
DEVPROPKEY
DEVPROPGUID = {4023440c-a74e-46e0-82df-e486fa545f40}
DEVPROPID = 3
DEVPROPTYPE = DEVPROP_TYPE_UINT32
PropertyBuffer containing UINT32 value = 940