Compartilhar via


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