Share via


Wie USB-Geräte Container-IDs zugewiesen werden

Für ein Gerät, das über usb (Universal Serial Bus) mit dem Computer verbunden ist, zeigt das folgende Flussdiagramm die Heuristik, die zum Zuweisen einer Container-ID zu einem USB-Geräteknoten (devnode) verwendet wird.

Flussdiagramm, das die Container-ID-Heuristik für USB-Devnodes veranschaulicht.

Diese Heuristik verwendet Informationen aus mehreren Quellen, um zu bestimmen, ob eine der folgenden Punkte für einen USB-Devnode zutrifft:

  • Stellt der Devnode ein neues Gerät auf dem USB-Bus dar? Wenn dies zutrifft, erhält der Devnode eine neue Container-ID.

  • Ist der devnode ein untergeordneter Devnode eines vorhandenen Geräts? Wenn dies der Fall ist, erbt der devnode die Container-ID des übergeordneten Devnodes.

Eine Container-ID für ein USB-Gerät wird auf verschiedene Arten generiert. Diese Entscheidung basiert auf Informationen, die im Gerät enthalten sind. Diese Informationen werden aus den ACPI-Einstellungen, dem USB-Bustreiber und dem USB-Hub abgerufen.

Diese Heuristik führt diese Schritte für jeden Devnode aus, den der Plug & Play-Manager (PnP) auf dem USB-Bus aufzählt.

  1. Wenn es vom USB-Bustreiber abgefragt wird, kann das USB-Gerät eine Container-ID über den ContainerID-Deskriptor des Microsoft-Betriebssystems (OS) melden.

    Ab Windows 7 unterstützt das Betriebssystem den Microsoft OS ContainerID-Deskriptor . Durch diesen Deskriptor kann der unabhängige Hardwareanbieter (Independent Hardware Vendor, IHV) die Container-ID für ein Gerät präzise angeben. Daher ist die Container-ID des Geräts eindeutig und ändert sich nicht auf jedem Computer, auf dem das Gerät installiert ist. Wenn außerdem ein Microsoft OS ContainerID-Deskriptor gemeldet wird, gibt das Gerät dem Betriebssystem an, dass alle aufgezählten Devnodes Teil desselben physischen Geräts sind.

    Der Microsoft OS ContainerID-Deskriptor ist für die Verwendung auf Geräten vorgesehen, die die gleichzeitige Verbindung des Geräts über mehrere Systembusse unterstützen. Beispielsweise kann ein Drucker gleichzeitige USB- und IP-Netzwerkverbindungen mithilfe von Plug & Play Extensions (PnP-X) unterstützen. Bei Verwendung eines einzelnen Microsoft OS ContainerID-Deskriptors wird dieselbe Container-ID für beide Transporte gemeldet. Daher stellt der PnP-Manager fest, dass die von jedem Bus aufgezählten Devnodes Teil desselben physischen Geräts sind.

    Weitere Informationen zum Microsoft OS ContainerID-Deskriptor finden Sie unter Microsoft OS-Deskriptoren.

  2. Wenn das USB-Gerät keinen Microsoft OS ContainerID-Deskriptor meldet, fragt der USB-Hubtreiber ACPI ab, um zu ermitteln, ob das Gerät an einen externen Port angeschlossen ist.

    Das Betriebssystem versucht, ein ACPI-Adressobjekt (_ADR) zu suchen, das der Adresse des USB-Ports entspricht, an den das Gerät angeschlossen ist. Wenn ein übereinstimmende Adressobjekt gefunden wird, führt das Betriebssystem die folgenden Schritte aus:

    • Das Objekt USB-Portfunktionen (_UPC) wird abgefragt, und der PortIsConnectable-Wert wird überprüft. Wenn PortIsConnectable den Wert "nonzero" von 0xFF aufweist, kann der Port zum Verbinden externer Geräte verwendet werden. Daher muss sich jedes gerät, das an diesen Port angeschlossen ist, außerhalb des Computers befinden.

    • Wenn der Computer ACPI 3.0 implementiert und das PortIsConnectable-Byte nichtzero ist, fragt das Betriebssystem zusätzlich das Objekt der Beschreibung des physischen Speicherorts (_PLD) ab. Das Betriebssystem überprüft, ob das UserVisible-Bit (Bit 64) für das _PLD-Objekt festgelegt ist. Dies wird als zusätzliche Überprüfung ausgeführt, um sicherzustellen, dass der Port sowohl anschließbar als auch extern für den Benutzer sichtbar ist.

    Wenn die von ACPI erfassten Informationen darauf hindeuten, dass das Gerät extern ist, generiert der PnP-Manager eine Container-ID für das Gerät. Der ContainedID-Wert ist entweder ein Hash der USB-Seriennummer des Geräts oder ein zufällig generierter Wert. Dem devnode wird diese Container-ID zugewiesen.

    Hinweis Wenn das Betriebssystem feststellt, dass das Gerät intern für den Computer ist, erbt der devnode die Container-ID des übergeordneten Devnodes, bei dem es sich (in diesem Fall) um die Container-ID des Computers selbst handelt.

  3. Wenn ACPI kein _ADR-Objekt zurückgibt, das mit der USB-Portadresse übereinstimmt, mit der das Gerät verbunden ist, generiert der PnP-Manager eine Container-ID basierend auf dem austauschbaren status des Devnodes.

    Der USB-Hubtreiber fragt den USB RemoveAndPowerMask-Deskriptor vom Hub ab und überprüft, ob das DeviceRemovable-Bit für den Port festgelegt ist, an den das Gerät angeschlossen ist. Wenn das DeviceRemovable-Bit festgelegt ist, können geräte, die an den Port angeschlossen sind, vom Hub entfernt werden. Wenn das DeviceRemovable-Bit nicht festgelegt ist, können geräte, die an den Port angeschlossen sind, nicht vom Hub entfernt werden.

    Der USB-Bustreiber meldet den austauschbaren/nicht entfernbaren Port status an den PnP-Manager, der mithilfe der folgenden Schritte eine ContainerId für den Devnode generiert:

    • Wenn der Hub angibt, dass geräte, die an den angegebenen Port angeschlossen sind, vom Hub entfernt werden können, stellt der PnP-Manager fest, dass geräte, die an diesen Port angeschlossen sind, extern für den Computer sind. Die Container-ID, die für den Devnode generiert wird, ist entweder ein Hash der USB-Seriennummer des Geräts oder ein zufällig generierter Wert.

    • Wenn der Hub angibt, dass geräte, die an den angegebenen Port angeschlossen sind, nicht vom Hub entfernt werden können, stellt der PnP-Manager fest, dass an diesen Port angeschlossene Geräte Unterfunktionen eines Multifunktionsgeräts sind. In diesem Fall erbt der Devnode die Container-ID des übergeordneten Devnodes.

Weitere Informationen zur ACPI 3.0-Schnittstelle finden Sie unter Advanced Configuration and Power Interface Specification Revision 3.0b.