Ensembles d’informations sur l’appareil

En mode utilisateur, les appareils qui appartiennent à des classes d’installation d’appareil ou à des classes d’interface d’appareil sont gérés à l’aide d’éléments d’informations sur l’appareil et d’ensembles d’informations sur l’appareil. Un jeu d’informations sur l’appareil se compose d’éléments d’informations sur l’appareil pour tous les appareils qui appartiennent à une classe d’installation d’appareil ou à une classe d’interface d’appareil.

Chaque élément d’informations sur l’appareil contient un handle vers le devnode de l’appareil et un pointeur vers une liste liée de toutes les interfaces d’appareil associées à l’appareil décrit par cet élément. Si un jeu d’informations sur l’appareil décrit les membres d’une classe d’installation, l’élément peut ne pointer vers aucune interface d’appareil, car les membres de la classe d’installation ne sont pas nécessairement associés à une interface.

Le diagramme suivant montre la structure interne d’un jeu d’informations d’appareil.

diagramme illustrant un ensemble d’informations d’appareil.

Création d’un jeu d’informations sur l’appareil

Après avoir créé un jeu d’informations d’appareil avec SetupDiCreateDeviceInfoList, les éléments d’informations sur l’appareil peuvent être créés et ajoutés à la liste un par un à l’aide de SetupDiCreateDeviceInfo. Vous pouvez également appeler SetupDiGetClassDevs pour créer un jeu d’informations sur l’appareil composé de tous les appareils associés à une classe d’installation d’appareil ou à une classe d’interface d’appareil spécifiée.

Énumération des informations sur l’appareil

Une fois qu’un jeu d’informations sur l’appareil est créé, les appareils et les interfaces d’appareil qui appartiennent à l’ensemble peuvent être énumérés, mais des opérations différentes sont nécessaires pour chaque type d’énumération. SetupDiEnumDeviceInfo énumère tous les appareils qui appartiennent à l’ensemble d’informations qui répondent à certains critères. Chaque appel à SetupDiEnumDeviceInfo extrait une structure SP_DEVINFO_DATA qui correspond approximativement à un élément d’informations sur l’appareil. SP_DEVINFO_DATA contient le GUID de la classe à laquelle appartient l’appareil et un périphérique instance handle qui pointe vers le devnode pour l’appareil. La principale différence entre une structure SP_DEVINFO_DATA et un élément d’appareil complet est que SP_DEVINFO_DATA ne contient pas la liste liée des interfaces associées à l’appareil. Par conséquent, SetupDiEnumDeviceInfo ne peut pas être utilisé pour énumérer les interfaces dans l’ensemble d’informations de l’appareil.

Pour énumérer les interfaces d’appareil dans un jeu d’informations d’appareil, appelez SetupDiEnumDeviceInterfaces. Cette routine décrit tous les éléments d’informations sur l’appareil dans le jeu d’informations sur l’appareil, extrait les interfaces de la liste des interfaces de chaque élément et retourne une interface à chaque appel. Si SetupDiEnumDeviceInterfaces reçoit une structure SP_DEVINFO_DATA comme entrée dans son deuxième paramètre, il limite l’énumération aux interfaces associées à l’appareil indiqué par SP_DEVINFO_DATA.

SetupDiEnumDeviceInterfaces retourne une structure SP_DEVICE_INTERFACE_DATA . SP_DEVICE_INTERFACE_DATA contient le GUID de la classe d’interface et d’autres informations sur l’interface, notamment un champ réservé contenant des informations encodées qui peuvent être utilisées pour obtenir le nom de l’interface. Pour obtenir le nom de l’interface, une étape supplémentaire est nécessaire : SetupDiGetDeviceInterfaceDetail doit être appelé. SetupDiGetDeviceInterfaceDetail retourne une structure de type SP_DEVICE_INTERFACE_DETAIL_DATA qui contient le chemin d’accès dans l’arborescence d’objets système qui définit l’interface.