Freigeben über


Erstellen von Geräteeigenschaftenschlüsseln aus dem MS-Betriebssystemdeskriptor in der UVC-Kamerafirmware (USB Video Class)

In der Vergangenheit mussten Hersteller von USB Video Class (UVC)-Kameras benutzerdefinierte INF-Dateien erstellen, um Funktionen wie Geräteeigenschaftenschlüssel bereitzustellen. Für einfache Registrierungsschlüssel verfügt der USBVideo-Treiber über einen Mechanismus zum Erstellen von Registrierungsschlüsseln aus dem MS OS-Deskriptor, wenn der betreffende Schlüsselname mit UVC-vorangestellt ist. Dadurch wird diese Funktionalität im USBVideo-Treiber erweitert, um auch Geräteeigenschaftenschlüssel aus einem MS OS-Deskriptor zu erstellen, wenn er einem bestimmten Format folgt. Dadurch kann die USBVideo-Kamerafirmware die Featureparität mit einem MIPI-Kameratreiber erreichen, ohne einen benutzerdefinierten INF für diese Kameras zu erstellen.

Hinweis

Wenn derselbe Geräteeigenschaftenschlüssel in einem benutzerdefinierten INF definiert ist, überschreibt er den vom MS OS-Deskriptor bereitgestellten Wert.

Gilt für:

  • Windows 11 und höhere Betriebssysteme

MS OS 2.0-Registrierungseigenschaftsdeskriptor

Der aktuelle MS OS 2.0-Registrierungseigenschaftsdeskriptor ist wie folgt definiert:

Offset Feld Size BESCHREIBUNG
0 wLength 2 Länge dieses Deskriptors in Bytes.
2 wDescriptorType 2 MS_OS_20_FEATURE_REG_PROPERTY
4 wPropertyDataType 2 Typ der Registrierungseigenschaft
6 wPropertyNameLength 2 Länge des Eigenschaftsnamens.
8 PropertyName Variable Name der Registrierungseigenschaft.
8+M wPropertyDataLength 2 Länge der Eigenschaftendaten
10+M PropertyData Variable Eigenschaftendaten

wPropertyDataType-Werte für den MS OS 2.0-Registrierungseigenschaftsdeskriptor

In der folgenden Tabelle werden wPropertyDataType-Werte für die Ms OS 2.0-Registrierungseigenschaftsdeskriptor beschrieben:

Wert BESCHREIBUNG
0 RESERVIERT
1 NULL-beendete Unicode-Zeichenfolge (REG_SZ)
2 NULL-beendete Unicode-Zeichenfolge, die Umgebungsvariablen enthält (REG_EXPAND_SZ)
3 Freiform-Binärdatei (REG_BINARY)
4 Little-Endian 32-Bit-Ganzzahl (REG_DWORD_LITTLE_ENDIAN)
5 Big-Endian 32-Bit-Ganzzahl (REG_DWORD_BIG_ENDIAN)
6 NULL-beendete Unicode-Zeichenfolge, die einen symbolischen Link enthält (REG_LINK)
7 Mehrere NULL-beendete Unicode-Zeichenfolgen (REG_MULTI_SZ)
8 und höher RESERVIERT

Der USBVideo-Treiber kopiert derzeit alle MS OS-Deskriptoren, die ein Präfix von UVC- als Registrierungsvariablennamen haben, in jeden Geräteschnittstellenknoten. Hierbei handelt es sich um direkte 1:1-Kopien eines Registrierungsschlüssels zu einem anderen, wobei das UVC- Präfix entfernt wird. Für Geräteeigenschaftenschlüssel sind zusätzliche Informationen erforderlich. Zum Definieren eines Geräteeigenschaftenschlüssels müssen eine definierte GUID und id vorhanden sein. Darüber hinaus erfordert jeder Schlüssel einen entsprechenden Datentyp und Wert für diese Daten. Für dieses Feature weist der USBVideo-Treiber einen Registrierungswert zu und gibt einen DEVPROPTYPE-Wert ein.

Mögliche Registrierungstypen

Registrierungswert BESCHREIBUNG DEVPROPTYPE-Wert BESCHREIBUNG
1 REG_SZ DEVPROP_TYPE_STRING Null-beendete Zeichenfolge
2 REG_EXPAND_SZ Nicht verfügbar Nicht unterstützt
3 REG_BINARY DEVPROP_TYPE_BINARY Benutzerdefinierte Binärdaten
4 REG_DWORD_LITTLE_ENDIAN DEVPROP_TYPE_UINT32 32-Bit unsigned int (ULONG32)
5 REG_DWORD_BIG_ENDIAN Nicht verfügbar Nicht unterstützt
6 REG_LINK Nicht verfügbar Nicht unterstützt
7 REG_MULTI_SZ DEVPROP_TYPE_STRING_LIST Multi-sz-Zeichenfolgenliste

Um zu bestimmen, dass dieser Geräteeigenschaftenschlüssel erstellt werden soll, wird ein neues Präfix definiert. Wenn ein MS OS-Deskriptor mit dem Format DKEY-GUID,ID<>> gefunden wird,< versucht der USBVideo-Treiber diese Erstellung. Der Registrierungswert muss eines der oben definierten Formate aufweisen (verwerfen und ignorieren REG_LINK, REG_EXPAND_SZ und REG_DWORD_BIG_ENDIAN). Das Format der GUID sollte {XXXXXXXX-XXXX-XXXX-XXXX-XXXX-XXXXXXXXXX} sein, und das Format der ID sollte ein numerischer Wert größer als 2 sein.

Beispiel-MS-Betriebssystemdeskriptor

Im folgenden Beispiel wird ein MS-Betriebssystemdeskriptor definiert:

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)
};

Dies würde mithilfe von IoSetDevicePropertyData mit den folgenden Parametern in den folgenden Geräteeigenschaftenschlüssel konvertiert:

DEVPROPKEY

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

    DEVPROPID = 3

DEVPROPTYPE = DEVPROP_TYPE_UINT32

PropertyBuffer containing UINT32 value = 940