Quand les objets d’appareil WDM sont-ils créés ?
Cette section décrit chaque type d’objet d’appareil et mentionne la date de création de chaque objet.
La figure suivante montre les types possibles d’objets d’appareil qui peuvent être attachés dans une pile de périphériques, représentant les pilotes gérant les demandes d’E/S pour un appareil.
En commençant en bas de cette figure :
Un pilote de bus crée un PDO pour chaque appareil qu’il énumère sur son bus.
Un pilote de bus crée un PDO pour un appareil enfant lorsqu’il énumère l’appareil. Un pilote de bus énumère un appareil en réponse à une demande de IRP_MN_QUERY_DEVICE_RELATIONS pour BusRelations du gestionnaire PnP. Le pilote de bus crée une PDO pour un appareil enfant si l’appareil a été ajouté au bus depuis la dernière fois que le pilote de bus a répondu à une demande de relations de requête pour BusRelations (ou s’il s’agit de la première demande de relations de requête depuis le démarrage de l’ordinateur).
Un PDO représente l’appareil au pilote de bus, ainsi qu’à d’autres composants système en mode noyau, tels que le gestionnaire d’alimentation, le gestionnaire PnP et le gestionnaire d’E/S.
D’autres pilotes pour un appareil attachent des objets de périphérique au-dessus de l’AOP, mais l’AOP se trouve toujours au bas de la pile de périphériques.
Les pilotes de filtre de bus facultatifs créent des DO de filtre pour chaque appareil qu’ils filtrent.
Lorsque le gestionnaire PnP détecte un nouvel appareil dans une liste BusRelations , il détermine s’il existe des pilotes de filtre de bus pour l’appareil. Si c’est le cas, pour chaque pilote de ce type, le gestionnaire PnP s’assure qu’il est chargé (appelle DriverEntry si nécessaire) et appelle la routine AddDevice du pilote. Si le pilote de filtre de bus filtre les opérations pour cet appareil, le pilote de filtre crée un objet de périphérique et l’attache à la pile de périphériques dans sa routine AddDevice . S’il existe plusieurs pilotes de filtre de bus et qu’il est pertinent pour cet appareil, chacun de ces pilotes de filtre crée et attache son propre objet de périphérique.
Les pilotes de filtre de niveau inférieur facultatifs créent des DOS de filtre pour chaque appareil qu’ils filtrent.
S’il existe un pilote de filtre de niveau inférieur facultatif pour ce périphérique, le gestionnaire PnP s’assure qu’un tel pilote est chargé après le pilote de bus et tous les pilotes de filtre de bus. Le gestionnaire PnP appelle la routine AddDevice du pilote de filtre. Dans sa routine AddDevice , le pilote de filtre de niveau inférieur crée un filtre DO pour l’appareil et l’attache à la pile de périphériques. S’il existe plusieurs pilotes de filtre de niveau inférieur, chacun de ces pilotes crée et attache son propre filtre DO.
Le pilote de fonction crée un FDO pour l’appareil.
Le gestionnaire PnP s’assure que le pilote de fonction pour l’appareil est chargé et appelle la routine AddDevice du pilote de fonction. Le pilote de fonction crée un FDO et l’attache à la pile de périphériques.
Les pilotes de filtre de niveau supérieur facultatifs créent un filtre DO pour chaque appareil qu’ils filtrent.
S’il existe des pilotes de filtre de niveau supérieur facultatifs pour l’appareil, le gestionnaire PnP s’assure qu’ils sont chargés après le pilote de fonction et appelle leurs routines AddDevice . Chaque pilote de filtre de ce type attache son objet de périphérique à la pile de périphériques.
En résumé, la pile de périphériques contient un objet de périphérique pour chaque pilote impliqué dans la gestion des E/S sur un appareil particulier. Le pilote de bus parent a un PDO, le pilote de fonction a un FDO et chaque pilote de filtre facultatif a un filtre DO.
Notez que tous les appareils, les adaptateurs/contrôleurs de bus et les appareils nonbus, ont un PDO et un FDO dans leur pile d’appareils. L’AOP d’un adaptateur/contrôleur de bus est créé par le pilote de bus pour le bus parent. Par exemple, si un adaptateur SCSI se branche à un bus PCI, le pilote de bus PCI crée une PDO pour l’adaptateur SCSI.
Si un appareil est utilisé en mode brut, il n’existe aucun pilote de fonction ou de filtre (aucun FDO ou DO de filtre). Il n’y a qu’un PDO pour le pilote de bus parent et zéro ou plusieurs DOS de filtre de bus.
Pour plus d’informations sur les routines de pilotes responsables de la création et de l’attachement d’objets d’appareil, consultez Création d’un objet device.
La pile d’appareils et quelques informations supplémentaires constituent le devnode d’un appareil. Le gestionnaire PnP conserve des informations dans le devnode d’un appareil, par exemple si l’appareil a été démarré et quels pilotes, le cas échéant, se sont inscrits pour la notification des modifications sur l’appareil. La commande du débogueur du noyau !devnode affiche des informations sur un devnode.