Exemple de pile d’appareils WDM

Cette section décrit les objets d’appareil créés par un ensemble possible de pilotes pour le matériel USB afin d’illustrer les objets d’appareil WDM et la façon dont ils sont superposés.

La figure suivante montre les objets d’appareil créés par les exemples de pilotes décrits dans Couches de pilotes WDM : exemple.

diagramme illustrant des exemples de couches d’objets d’appareil wdm pour un joystick USB.

À partir du bas de cette figure, les objets d’appareil dans les exemples de piles d’appareils sont les suivants :

  1. PDO et FDO pour le bus PCI.

    Le pilote de bus racine énumère le bus système interne (le bus racine) et crée un AOP pour chaque appareil qu’il trouve. L’un de ces PDO concerne le bus PCI. (Le PDO et le FDO pour le bus racine ne sont pas indiqués dans la figure.)

    Le gestionnaire PnP identifie le pilote PCI comme pilote de fonction pour le bus PCI, charge le pilote (s’il n’est pas déjà chargé) et transmet l’AOP au pilote PCI. Dans sa routine AddDevice , le pilote PCI crée un FDO pour le bus PCI (IoCreateDevice) et attache le FDO à la pile d’appareils (IoAttachDeviceToDeviceStack) pour le bus PCI. Le pilote PCI crée et attache ce FDO dans le cadre de ses responsabilités en tant que pilote de fonction pour le bus PCI.

    Il n’existe aucun pilote de filtre pour le bus PCI dans cet exemple.

  2. PDO et FDO pour le contrôleur hôte USB.

    Le gestionnaire PnP charge le pilote PCI de démarrer son appareil (IRP_MN_START_DEVICE), puis interroge le pilote PCI pour ses enfants (IRP_MN_QUERY_DEVICE_RELATIONS avec le type de relation BusRelations). En réponse, le pilote PCI énumère les périphériques de son bus. Dans cet exemple, le pilote PCI recherche un contrôleur hôte USB et crée un PDO pour cet appareil. La flèche large de la figure indique que le contrôleur hôte USB est un « enfant » du bus PCI. Le pilote PCI crée des PDO pour ses appareils enfants dans le cadre de ses responsabilités en tant que pilote de bus pour le bus PCI.

    Le gestionnaire PnP identifie la paire de pilotes miniclasse/classe du contrôleur hôte USB comme pilote de fonction pour le contrôleur hôte USB et charge la paire de pilotes. Le gestionnaire PnP appelle la paire de pilotes au moment approprié pour créer et attacher un FDO pour le contrôleur hôte USB.

    Il n’existe aucun pilote de filtre pour le contrôleur hôte USB dans cet exemple.

  3. PDO et FDO pour le hub USB.

    Le contrôleur hôte USB énumère son bus, localise le hub USB dans le seul port et crée un PDO pour le hub. Le pilote du hub USB crée et attache un FDO pour le hub.

    Il n’existe aucun pilote de filtre pour le hub USB dans cet exemple.

  4. Un AOP, un FDO et deux DO filtrent pour l’appareil joystick.

    Le pilote du hub USB énumère son bus, localise un appareil HID (le joystick) et crée un PDO pour le joystick.

    Dans cet exemple, un pilote de filtre de niveau inférieur a été configuré dans le registre pour les appareils joystick, de sorte que le gestionnaire PnP charge le pilote de filtre. Le pilote de filtre détermine qu’il est pertinent pour l’appareil et crée et attache un filtre DO à la pile de l’appareil.

    Le gestionnaire PnP détermine que le pilote de fonction du joystick est la paire de pilotes HID class/miniclass et charge ces pilotes. La paire de pilotes se compose d’un pilote de miniclasse lié à une DLL de pilote de classe ; ensemble, ils agissent comme un seul pilote de fonction pour l’appareil. La paire de pilotes classe/miniclasse crée un objet d’appareil, le FDO, et l’attache à la pile des appareils.

    Un pilote de filtre de niveau supérieur crée et attache un filtre DO à la pile de périphériques, de manière similaire au filtre de niveau inférieur.

Notez que le PDO créé par le pilote de bus parent se trouve toujours en bas de la pile d’appareils pour un appareil particulier. Lorsque les pilotes gèrent pnP ou les IRP d’alimentation, ils doivent passer chaque IRP dans la pile des appareils à l’AOP et au pilote de bus associé.

La figure suivante montre les mêmes piles d’appareils que la figure précédente, mais met en évidence les objets d’appareil qui sont créés et gérés par quels pilotes.

diagramme illustrant des exemples de couches d’objets d’appareil du point de vue du pilote.

Un pilote de bus s’étend sur plusieurs piles d’appareils. Un pilote de bus crée le FDO pour son adaptateur/contrôleur de bus et crée un PDO pour chacun de ses appareils enfants.