Comment les périphériques USB sont attribués aux ID de conteneur

Pour un appareil connecté à l’ordinateur via le bus USB (Universal Serial Bus), l’organigramme suivant montre l’heuristique utilisée pour affecter un ID de conteneur à un nœud de périphérique USB (devnode).

organigramme illustrant l’id de conteneur heuristic pour les devnodes usb.

Cette heuristique utilise des informations provenant de plusieurs sources pour déterminer si l’une des conditions suivantes est vraie à propos d’un devnode USB :

  • Le devnode représente-t-il un nouvel appareil sur le bus USB ? Si cela est vrai, le devnode reçoit un nouvel ID de conteneur.

  • Le devnode est-il un devnode enfant d’un appareil existant ? Si cela est vrai, le devnode hérite de l’ID de conteneur du devnode parent.

Un ID de conteneur pour un périphérique USB est généré de plusieurs façons. Cette décision est basée sur les informations contenues dans l’appareil. Ces informations sont récupérées à partir des paramètres ACPI, du pilote de bus USB et du hub USB.

Cette heuristique suit ces étapes pour chaque devnode énuméré par le gestionnaire Plug-and-Play (PnP) sur le bus USB.

  1. Lorsqu’il est interrogé par le pilote de bus USB, le périphérique USB peut signaler un ID de conteneur via le descripteur ContainerID du système d’exploitation (OS) Microsoft.

    À compter de Windows 7, le système d’exploitation prend en charge le descripteur ContainerID du système d’exploitation Microsoft. Grâce à ce descripteur, le fournisseur de matériel indépendant (IHV) peut spécifier précisément l’ID de conteneur d’un appareil. Par conséquent, l’ID de conteneur de l’appareil est unique et ne change pas sur chaque ordinateur sur lequel l’appareil est installé. En outre, s’il signale un descripteur Microsoft OS ContainerID , l’appareil indique au système d’exploitation que tous les devnodes énumérés font partie du même appareil physique.

    Le descripteur Microsoft OS ContainerID est destiné à être utilisé dans les appareils qui prennent en charge la connexion simultanée de l’appareil via plusieurs bus système. Par exemple, une imprimante peut prendre en charge des connexions réseau USB et IP simultanées à l’aide d’extensions Plug-and-Play (PnP-X). À l’aide d’un seul descripteur ContainerID de système d’exploitation Microsoft, le même ID de conteneur est signalé sur les deux transports. Par conséquent, le gestionnaire PnP détermine que les devnodes énumérés par chaque bus font partie du même appareil physique.

    Pour plus d’informations sur le descripteur Microsoft OS ContainerID , consultez les descripteurs de système d’exploitation Microsoft.

  2. Si le périphérique USB ne signale pas de descripteur ContainerID de système d’exploitation Microsoft, le pilote du hub USB interroge ACPI pour déterminer si le périphérique est attaché à un port externe.

    Le système d’exploitation tente de localiser un objet d’adresse ACPI (_ADR) qui correspond à l’adresse du port USB auquel l’appareil est connecté. Si un objet d’adresse correspondant est trouvé, le système d’exploitation effectue les étapes suivantes :

    • L’objet Fonctionnalités de port USB (_UPC) est interrogé et la valeur PortIsConnectable est vérifiée. Si PortIsConnectable a une valeur différente de zéro 0xFF, le port peut être utilisé pour connecter des appareils externes. Par conséquent, tout appareil connecté à ce port doit être externe à l’ordinateur.

    • Si l’ordinateur implémente ACPI 3.0 et que l’octet PortIsConnectable est différent de zéro, le système d’exploitation interroge également l’objet de description d’emplacement physique (_PLD). Le système d’exploitation vérifie si le bit UserVisible (bit 64) est défini sur l’objet _PLD . Il le fait en tant que case activée supplémentaire pour s’assurer que le port est à la fois connectable et visible de l’extérieur pour l’utilisateur.

    Si les informations collectées à partir d’ACPI indiquent que l’appareil est externe, le gestionnaire PnP génère un ID de conteneur pour l’appareil. La valeur ContainedID est un hachage du numéro de série USB de l’appareil ou une valeur générée de manière aléatoire. Cet ID de conteneur est affecté au devnode.

    Note Si le système d’exploitation détermine que l’appareil est interne à l’ordinateur, le devnode hérite de l’ID de conteneur du devnode parent, qui (dans ce cas) est l’ID de conteneur de l’ordinateur lui-même.

  3. Si ACPI ne retourne pas d’objet _ADR qui correspond à l’adresse de port USB à laquelle l’appareil est connecté, le gestionnaire PnP génère un ID de conteneur basé sur l’status amovible du devnode.

    Le pilote du hub USB interroge le descripteur USB RemoveAndPowerMask à partir du hub et vérifie si le bit DeviceRemovable est défini pour le port auquel l’appareil est connecté. Si le bit DeviceRemovable est défini, les appareils attachés au port sont amovibles du hub. Si le bit DeviceRemovable n’est pas défini, les appareils attachés au port ne sont pas amovibles du hub.

    Le pilote de bus USB signale le port amovible/non amovible status au gestionnaire PnP, qui génère un ContainerId pour le devnode en procédant comme suit :

    • Si le hub indique que les appareils attachés au port donné sont amovibles du hub, le gestionnaire PnP détermine que les appareils attachés à ce port sont externes à l’ordinateur. L’ID de conteneur qu’il génère pour le devnode est soit un hachage du numéro de série USB de l’appareil, soit une valeur générée de manière aléatoire.

    • Si le hub indique que les appareils attachés au port donné ne sont pas amovibles du hub, le gestionnaire PnP détermine que les appareils attachés à ce port sont des sous-fonctions d’un appareil multifonction. Dans ce cas, le devnode hérite de l’ID de conteneur du devnode parent.

Pour plus d’informations sur l’interface ACPI 3.0, consultez Advanced Configuration and Power Interface Specification Revision 3.0b.