Condividi tramite


Creare le chiavi delle proprietà del dispositivo dal descrittore del sistema operativo MS nel firmware della fotocamera UVC (USB Video Class)

In passato, i produttori di fotocamere USB Video Class (UVC) dovevano creare file INF personalizzati per fornire funzionalità come le chiavi di proprietà del dispositivo. Per le chiavi del Registro di sistema semplici, il driver USBVideo ha un meccanismo per la creazione di chiavi del Registro di sistema dal descrittore del sistema operativo MS se il nome della chiave in questione è preceduto da UVC-. In questo modo si espande tale funzionalità nel driver USBVideo per creare anche le chiavi delle proprietà del dispositivo da un descrittore del sistema operativo MS se segue un formato specifico. Ciò consente al firmware della fotocamera USBVideo di raggiungere la parità di funzionalità con un driver della fotocamera MIPI senza creare un INF personalizzato per tali fotocamere.

Nota

Se la stessa chiave della proprietà del dispositivo è definita in un INF personalizzato, eseguirà l'override del valore fornito dal descrittore del sistema operativo MS.

Si applica a

  • Windows 11 e sistemi operativi successivi

Descrittore delle proprietà del Registro di sistema MS OS 2.0

Il descrittore di proprietà del Registro di sistema MS OS 2.0 corrente è definito come segue:

Offset Campo Dimensione Descrizione
0 wLength 2 Lunghezza, in byte, di questo descrittore.
2 wDescriptorType 2 MS_OS_20_FEATURE_REG_PROPERTY
4 wPropertyDataType 2 Tipo di proprietà del Registro di sistema
6 wPropertyNameLength 2 Lunghezza del nome della proprietà.
8 PropertyName Variabile Nome della proprietà del Registro di sistema.
8+M wPropertyDataLength 2 Lunghezza dei dati delle proprietà
10+M PropertyData Variabile Dati delle proprietà

Valori wPropertyDataType per il descrittore di proprietà del Registro di sistema MS OS 2.0

Nella tabella seguente vengono descritti i valori wPropertyDataType per il descrittore della proprietà del Registro di sistema MS OS 2.0:

Valore Descrizione
0 RISERVATO
1 Stringa Unicode con terminazione NULL (REG_SZ)
2 Stringa Unicode con terminazione NULL che include variabili di ambiente (REG_EXPAND_SZ)
3 File binario in formato libero (REG_BINARY)
4 Integer a 32 bit little-endian (REG_DWORD_LITTLE_ENDIAN)
5 Intero big-endian a 32 bit (REG_DWORD_BIG_ENDIAN)
6 Stringa Unicode con terminazione NULL che contiene un collegamento simbolico (REG_LINK)
7 Più stringhe Unicode con terminazione NULL (REG_MULTI_SZ)
8 e versioni successive RISERVATO

Il driver USBVideo copia attualmente tutti i descrittori del sistema operativo MS con un prefisso di come nomi di UVC- variabili del Registro di sistema in ogni nodo dell'interfaccia del dispositivo. Si tratta di copie uno-a-uno di una chiave del Registro di sistema in un'altra, rimuovendo il UVC- prefisso. Per le chiavi delle proprietà del dispositivo, sono necessarie informazioni aggiuntive. Per definire una chiave di proprietà del dispositivo, è necessario avere un GUID e un ID definiti. Inoltre, ogni chiave richiede un tipo di dati e un valore corrispondenti per tali dati. Per questa funzionalità, il driver USBVideo esegue il mapping di un valore del Registro di sistema e digita a devPROPTYPE.

Possibili tipi di Registro di sistema

Valore del Registro di sistema Descrizione Valore DEVPROPTYPE Descrizione
1 REG_SZ DEVPROP_TYPE_STRING Stringa con terminazione Null
2 REG_EXPAND_SZ ND Non supportato
3 REG_BINARY DEVPROP_TYPE_BINARY Dati binari personalizzati
4 REG_DWORD_LITTLE_ENDIAN DEVPROP_TYPE_UINT32 Int senza segno a 32 bit (ULONG32)
5 REG_DWORD_BIG_ENDIAN ND Non supportato
6 REG_LINK ND Non supportato
7 REG_MULTI_SZ DEVPROP_TYPE_STRING_LIST Elenco di stringhe multi-sz

Per determinare che la chiave della proprietà del dispositivo deve essere creata, verrà definito un nuovo prefisso. Se viene trovato un descrittore del sistema operativo MS con il formato DKEY-GUID<>,< l'ID> del driver USBVideo tenterà questa creazione. Il valore del Registro di sistema deve essere di uno dei formati definiti sopra (ignorando REG_LINK, REG_EXPAND_SZ e REG_DWORD_BIG_ENDIAN). Il formato del GUID deve essere {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} e il formato dell'ID deve essere un valore numerico maggiore di 2.

Descrittore del sistema operativo MS di esempio

Nell'esempio seguente viene definito un descrittore del 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)
};

Verrà convertito nella chiave della proprietà del dispositivo seguente usando IoSetDevicePropertyData con i parametri seguenti:

DEVPROPKEY

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

    DEVPROPID = 3

DEVPROPTYPE = DEVPROP_TYPE_UINT32

PropertyBuffer containing UINT32 value = 940