Utilisation d’une interface d’appareil
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 de lui envoyer des E/S. Pour être averti 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 et de la suppression de l’interface d’appareil.
Avant qu’un composant en mode noyau puisse utiliser un appareil ou un objet fichier spécifique, il doit effectuer les opérations suivantes :
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’un instance d’une interface d’appareil est activé ou désactivé. Pour s’inscrire, le composant appelle IoRegisterPlugPlayNotification. Cette routine stocke l’adresse d’un rappel fourni par le pilote, qui est appelé chaque fois qu’un instance d’une interface d’appareil instance est activé ou désactivé, 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’interface instance. Pour plus d’informations, consultez Utilisation de la notification de modification de l’interface d’appareil PnP .
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 de l’interface d’appareil.
Obtenez un pointeur vers un appareil ou un objet fichier qui correspond à un 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 fichier, le pilote doit appeler InitializeObjectAttributes, en passant la chaîne Unicode dans le paramètre ObjectName , puis passer la structure d’attribut initialisée dans un appel à ZwCreateFile.