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