Vue d’ensemble des classes d’interface d’appareil
Tout pilote d’un appareil physique, logique ou virtuel auquel 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 il demande des E/S.
Dans Windows NT 4.0 et versions antérieures du système d’exploitation NT, les pilotes ont nommé leurs objets d’appareil, puis configuré 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 d’objets d’appareil. Au lieu de cela, ils utilisent des interfaces d’appareil regroupées par des classes d’interface d’appareil. Une classe d’interface d’appareil permet d’exporter des 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 instance d’interface d’appareil de la classe d’interface d’appareil 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 à l’appareil. Les fournisseurs peuvent créer des classes d’interface d’appareil supplémentaires.
Par exemple, trois types différents d’appareils de souris peuvent inscrire des interfaces d’appareil membres de la même classe d’interface d’appareil, même si l’un se connecte via un port USB, une seconde via un port série et le troisième par le biais d’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 des interfaces d’appareil pour un appareil dont ils contrôlent autant de classes d’interface d’appareil que l’appareil et le pilote prennent en charge les fonctionnalités pour lesquelles. Par exemple, un pilote pour un disque pouvant être monté doit s’inscrire à la fois pour sa classe d’interface disque (GUID_DEVINTERFACE_DISK) et la classe d’appareil montable (MOUNTDEV_MOUNTED_DEVICE_GUID).
Lorsqu’un pilote inscrit une instance d’interface d’appareil d’une classe d’interface d’appareil, le gestionnaire d’E/S associe l’appareil et le GUID de classe d’interface d’appareil à un nom de lien symbolique. Le pilote doit activerl’interface de périphérique pour que ce lien symbolique puisse être utilisable pour un pilote ou une application pour envoyer des E/S. L’inscription du nom du lien persiste entre les démarrages 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 des instances des interfaces d’appareil de cette classe et recevoir une liste de noms de liens symboliques représentant des 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 . Cet IRP est utilisé pour passer des points d’entrée de routine entre les pilotes en mode noyau.