Partager via


Créer des clés de propriété de périphérique à partir du descripteur MS OS dans le microprogramme de la caméra USB Video Class (UVC)

Dans le passé, les fabricants de caméras USB Video Class (UVC) devaient créer des fichiers INF personnalisés pour fournir des fonctionnalités telles que des clés de propriété d’appareil. Pour les clés de Registre simples, le pilote USBVideo dispose d’un mécanisme permettant de créer des clés de Registre à partir du descripteur MS OS si le nom de clé en question est précédé de UVC-. Cette fonctionnalité est étendue dans le pilote USBVideo pour créer également des clés de propriété de périphérique à partir d’un descripteur MS OS s’il suit un format spécifique. Cela permet au microprogramme de la caméra USBVideo d’atteindre la parité des fonctionnalités avec un pilote de caméra MIPI sans créer un INF personnalisé pour ces caméras.

Notes

Si la même clé de propriété d’appareil est définie dans un INF personnalisé, elle remplace la valeur fournie par le descripteur MS OS.

S’applique à

  • systèmes d’exploitation Windows 11 et versions ultérieures

Descripteur de propriété de Registre MS OS 2.0

Le descripteur de propriété de Registre MS OS 2.0 actuel est défini comme suit :

Offset Champ Taille Description
0 wLength 2 Longueur, en octets, de ce descripteur.
2 wDescriptorType 2 MS_OS_20_FEATURE_REG_PROPERTY
4 wPropertyDataType 2 Type de propriété de Registre
6 wPropertyNameLength 2 Longueur du nom de la propriété.
8 PropertyName Variable Nom de la propriété de registre.
8+M wPropertyDataLength 2 Longueur des données de propriété
10+M PropertyData Variable Données de propriété

Valeurs wPropertyDataType pour le descripteur de propriété de Registre MS OS 2.0

Le tableau suivant décrit les valeurs wPropertyDataType pour le descripteur de propriété de Registre MS OS 2.0 :

Valeur Description
0 RÉSERVÉ
1 Chaîne Unicode terminée par null (REG_SZ)
2 Chaîne Unicode terminée par NULL qui inclut des variables d’environnement (REG_EXPAND_SZ)
3 Binaire de forme libre (REG_BINARY)
4 Entier 32 bits little-endian (REG_DWORD_LITTLE_ENDIAN)
5 Entier big-endian 32 bits (REG_DWORD_BIG_ENDIAN)
6 Chaîne Unicode terminée par NULL qui contient un lien symbolique (REG_LINK)
7 Plusieurs chaînes Unicode terminées par null (REG_MULTI_SZ)
8 et versions ultérieures RÉSERVÉ

Le pilote USBVideo copie actuellement tous les descripteurs MS OS qui ont le préfixe comme noms de variables de Registre sur chaque nœud d’interface UVC- de périphérique. Il s’agit de copies un-à-un d’une clé de Registre à une autre, ce qui supprime le UVC- préfixe. Pour les clés de propriété d’appareil, des informations supplémentaires sont requises. Pour définir une clé de propriété d’appareil, il doit y avoir un GUID et un ID définis. En outre, chaque clé nécessite un type de données et une valeur correspondants pour ces données. Pour cette fonctionnalité, le pilote USBVideo mappe une valeur de Registre et un type à un DEVPROPTYPE.

Types de Registre possibles

Valeur de Registre Description Valeur DEVPROPTYPE Description
1 REG_SZ DEVPROP_TYPE_STRING Chaîne terminée par null
2 REG_EXPAND_SZ N/D Non prise en charge
3 REG_BINARY DEVPROP_TYPE_BINARY Données binaires personnalisées
4 REG_DWORD_LITTLE_ENDIAN DEVPROP_TYPE_UINT32 int non signé 32 bits (ULONG32)
5 REG_DWORD_BIG_ENDIAN N/D Non prise en charge
6 REG_LINK N/D Non prise en charge
7 REG_MULTI_SZ DEVPROP_TYPE_STRING_LIST Liste de chaînes multi-sz

Pour déterminer que cette clé de propriété d’appareil doit être créée, un nouveau préfixe est défini. Si un descripteur MS OS est trouvé au format DKEY-GUID,ID<>>,< le pilote USBVideo tente cette création. La valeur de Registre doit être de l’un des formats définis ci-dessus (ignorer REG_LINK, REG_EXPAND_SZ et REG_DWORD_BIG_ENDIAN). Le format du GUID doit être {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} et le format de l’ID doit être une valeur numérique supérieure à 2.

Exemple de descripteur MS OS

L’exemple suivant définit un descripteur de système d’exploitation 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)
};

Cette opération est convertie en clé de propriété d’appareil suivante à l’aide de IoSetDevicePropertyData avec les paramètres suivants :

DEVPROPKEY

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

    DEVPROPID = 3

DEVPROPTYPE = DEVPROP_TYPE_UINT32

PropertyBuffer containing UINT32 value = 940