Utilisation d’une interface de périphérique

Les interfaces d’appareil sont disponibles pour les composants en mode noyau et les applications en mode utilisateur. Le code en mode utilisateur peut utiliser des fonctions CfgMgr32 (par exemple, CM_Get_Device_Interface_List) ou des fonctions SetupDiXxx (voir fonctions d’interface d’appareil SetupDi) pour en savoir plus sur les interfaces d’appareil inscrites et activées. L’application en mode utilisateur peut ensuite utiliser des API d’E/S telles que CreateFile pour obtenir un handle sur l’appareil afin d’y envoyer des E/S. Pour être informé de l’activation et de la désactivation des interfaces d’appareil et de la façon de réagir à ces actions, consultez Inscription pour la notification de l’arrivée des interfaces de périphérique et du retrait du périphérique.

Avant qu’un composant en mode noyau puisse utiliser un appareil ou un objet de fichier spécifique, il doit effectuer les opérations suivantes :

  1. Déterminez si la classe d’interface d’appareil requise est inscrite et activée.

    Un pilote peut s’inscrire auprès du gestionnaire PnP pour être averti lorsqu’une instance d’une interface d’appareil est activée ou désactivée. Pour s’enregistrer, le composant appelle IoRegisterPlugPlayNotification. Cette routine stocke l’adresse d’un rappel fourni par le pilote, appelé chaque fois qu’une instance d’interface de périphérique est activée ou désactivée, pour une classe d’appareil spécifiée. Les routines de rappel reçoivent la structure DEVICE_INTERFACE_CHANGE_NOTIFICATION , qui contient une chaîne Unicode représentant le lien symbolique de l’instance d’interface. Pour plus d’informations, consultez Using PnP device interface change notification.

    Un pilote ou un autre composant en mode noyau peut également appeler IoGetDeviceInterfaces pour obtenir la liste de toutes les instances d’interface d’appareil inscrites et activées pour une classe d’interface d’appareil spécifique. La liste retournée contient des pointeurs vers les chaînes de liens symboliques Unicode qui identifient les instances d’interface d’appareil.

  2. Obtenez un pointeur vers un périphérique ou un objet de fichier qui correspond à une instance de l’interface.

    Pour accéder à un objet d’appareil spécifique, le pilote doit appeler IoGetDeviceObjectPointer, en passant la chaîne Unicode pour l’interface requise dans le paramètre ObjectName . Pour accéder à un objet de fichier, le pilote doit appeler InitializeObjectAttributes, en passant la chaîne Unicode dans le paramètre ObjectName , puis passer la structure d’attributs initialisée avec succès dans un appel à ZwCreateFile.