Vue d’ensemble des classes d’interface d’appareil
Tout pilote d’un appareil physique, logique ou virtuel vers lequel le code en mode utilisateur peut diriger les demandes d’E/S doit fournir un nom pour ses clients en mode utilisateur. À l’aide du nom, une application en mode utilisateur (ou un autre composant système) identifie l’appareil à partir duquel elle demande des E/S.
Dans Windows NT 4.0 et les versions antérieures du système d’exploitation NT, les pilotes nommaient leurs objets d’appareil, puis configurent des liens symboliques dans le Registre entre ces noms et un nom logique Win32 visible par l’utilisateur.
À compter de Windows 2000, les pilotes ne nomment pas les objets d’appareil. Au lieu de cela, ils utilisent des interfaces d’appareil qui sont regroupées par classes d’interface d’appareil. Une classe d’interface d’appareil est un moyen d’exporter les fonctionnalités d’appareil et de pilote vers d’autres composants système, y compris d’autres pilotes, ainsi que des applications en mode utilisateur. Un pilote peut inscrire et activer une interface d’appareil instance de la classe d’interface de périphérique pour chaque objet d’appareil auquel les demandes d’E/S en mode utilisateur peuvent être envoyées. Chaque classe d’interface d’appareil doit représenter une fonctionnalité conceptuelle que toute interface d’appareil de cette classe doit prendre en charge ou représenter, comme un contrat d’E/S particulier.
Chaque classe d’interface d’appareil est associée à un GUID. Le système définit des GUID pour les classes d’interface d’appareil courantes dans les fichiers d’en-tête spécifiques de l’appareil. Les fournisseurs peuvent créer des classes d’interface d’appareil supplémentaires.
Par exemple, trois types différents d’appareils à souris peuvent inscrire des interfaces d’appareil qui sont membres de la même classe d’interface d’appareil, même si l’une se connecte via un port USB, une seconde via un port série et la troisième via un port infrarouge. Chaque pilote inscrit son appareil en tant que membre de la classe d’interface GUID_DEVINTERFACE_MOUSE. Ce GUID est défini dans le fichier d’en-tête Ntddmou.h.
Les pilotes peuvent inscrire et activer les interfaces d’appareil pour un appareil qu’ils contrôlent pour autant de classes d’interface d’appareil pour lesquelles l’appareil et le pilote prennent en charge les fonctionnalités. Par exemple, un pilote pour un disque pouvant être monté doit s’inscrire à la fois pour sa classe d’interface de disque (GUID_DEVINTERFACE_DISK) et la classe d’appareil montable (MOUNTDEV_MOUNTED_DEVICE_GUID).
Lorsqu’un pilote inscrit une interface d’appareil instance d’une classe d’interface d’appareil, le gestionnaire d’E/S associe l’appareil et le GUID de la classe d’interface d’appareil à un nom de lien symbolique. Le pilote doit activerl’interface de périphérique pour que ce lien symbolique soit utilisable pour qu’un pilote ou une application puisse envoyer des E/S. L’inscription du nom du lien persiste dans les démarrages du système, mais l’interface de l’appareil doit être activée par le pilote sur chaque énumération de l’appareil. Une application qui utilise une classe d’interface d’appareil particulière peut interroger les instances des interfaces d’appareil de cette classe et recevoir une liste de noms de liens symboliques représentant les appareils qui prennent en charge l’interface. L’application peut ensuite utiliser le nom de lien symbolique comme cible pour les demandes d’E/S.
Ne confondez pas les interfaces d’appareil avec les interfaces que les pilotes peuvent exporter en réponse à une demande de IRP_MN_QUERY_INTERFACE . Cette IRP est utilisée pour passer des points d’entrée de routine entre les pilotes en mode noyau.