Comment les ID de conteneur sont générés à partir de la fonctionnalité d’appareil amovible
Si un pilote de bus ne peut pas fournir un ID de conteneur pour un nœud de périphérique (devnode) qu’il énumére, le gestionnaire de Plug-and-Play (PnP) utilise la fonctionnalité de périphérique amovible pour générer un ID de conteneur pour tous les devnodes énumérés pour l’appareil. Pour plus d’informations sur la fonctionnalité d’appareil amovible, consultez Vue d’ensemble de la fonctionnalité d’appareil amovible.
L’heuristique suivante décrit comment les ID de conteneur sont générés à partir de la fonctionnalité d’appareil amovible :
Si la fonctionnalité d’appareil amovible est définie sur TRUE pour le devnode, générez un nouvel ID de conteneur pour le devnode.
Si la fonctionnalité d’appareil amovible du devnode est définie sur FALSE, héritez de l’ID de conteneur de son devnode parent.
Un devnode ne peut pas énumérer les devnodes enfants tant qu’il n’est pas initialisé et que sa pile de pilotes est démarrée. Dès que son ID de conteneur est attribué lors de l’initialisation, le devnode est prêt à propager son ID de conteneur à l’un de ses enfants non amovibles au fur et à mesure qu’ils sont énumérés.
Un devnode avec la fonctionnalité d’appareil amovible définie sur TRUE est considéré comme le devnode le plus haut (parent) pour l’appareil, et un ID de conteneur est généré pour ce devnode.
Tous les enfants de ce devnode parent héritent du même ID de conteneur, sauf s’ils ont eux-mêmes leur capacité d’appareil amovible définie sur TRUE. Dans ce cas, un devnode enfant amovible se voit attribuer un ID de conteneur différent et devient le devnode parent de cet appareil amovible. Tous les enfants de ce devnode héritent du même ID de conteneur.
Par exemple, supposons qu’une souris à fonction unique soit connectée à l’ordinateur via usb. Dans ce cas, le pilote de bus USB détecte un nouveau périphérique et détecte qu’il s’agit d’un périphérique d’interface humaine (HID) USB. Le pilote de bus USB crée ensuite un devnode HID USB pour l’appareil. Le devnode HID détecte également que l’appareil HID est une souris et crée un devnode enfant pour une souris compatible HID
L’application de cette heuristique à cet exemple entraîne les actions suivantes :
Le devnode HID USB est créé. La fonctionnalité d’appareil amovible est définie sur TRUE sur ce devnode, car son hub USB parent devnode a reconnu qu’il était branché à un port USB externe.
Un ID de conteneur est créé pour ce devnode, car il s’agit du devnode le plus haut d’un appareil amovible. Par conséquent, ce devnode est considéré comme le devnode parent pour l’appareil amovible.
Le devnode de souris compatible HID est créé. La fonctionnalité d’appareil amovible est définie sur FALSE sur ce devnode, car son devnode USB HID parent signale tous ses enfants comme non amovibles. Dans ce cas, le devnode de souris compatible HID hérite de l’ID de conteneur du devnode parent.
Grâce à cette heuristique, le même ID de conteneur est affecté à chaque devnode qui appartient à la souris. Le gestionnaire PnP a correctement regroupé les devnodes dans un appareil logique, même s’il n’existe aucun identificateur unique pour l’appareil.
Notes
La réussite de cette heuristique repose sur un pilote de bus spécifique qui signale correctement la fonctionnalité d’appareil amovible pour chaque devnode qu’il énumère. Le pilote de bus doit s’assurer que le devnode parent de l’appareil doit être défini comme amovible, et que ses devnodes enfants ne doivent pas être définis comme amovibles.