Übersicht über Container-IDs

In der Windows-Betriebssystemfamilie sind Geräte im Grunde eine Sammlung funktionaler Geräteinstanzen, die jeweils einen funktionalen Endpunkt darstellen, der eine Form der Kommunikation mit dem Gerät ermöglicht.

Der Begriff Geräteknoten (devnode) bezieht sich auf den Treiberstapel für einen solchen funktionalen Endpunkt zusätzlich zu den Eigenschaften, die den Endpunkt und den zugeordneten Zustand beschreiben. Beispielsweise kann ein Multifunktionsgerät, das Drucker-, Scanner- und Faxfunktionen unterstützt, über mehrere Devnodes verfügen, einen für jeden funktionalen Endpunkt im Gerät.

Vor Windows 7 verfügte jeder funktionsbezogene Endpunkt über einen Devnode, der diesem zugeordnet ist. Windows-Plattformkomponenten und Anwendungen von Drittanbietern können Devnodes nach Geräte-status und Informationen abfragen und über Schnittstellen, die von funktionalen Endpunkten verfügbar gemacht werden, mit Gerätehardware kommunizieren.

Bei einem Einzelfunktionsgerät enthält ein einzelner Devnode alle Informationen, die sich auf den funktionalen Endpunkt des Geräts beziehen. In ähnlicher Weise verfügt ein Multifunktionsgerät über mehrere Devnodes, die jedem funktionalen Endpunkt des Geräts zugeordnet sind. Windows kann jedoch nicht erkennen, dass eine Gruppe von Devnodes vom gleichen physischen Gerät stammt. Jeder Devnode, der zum gleichen Multifunktionsgerät gehört, enthält keine Identifikationsinformationen, die es dem Plug & Play-Manager (PnP) ermöglichen, mehrere Devnodes als ein einzelnes Gerät zu gruppieren. Daher ist es nicht möglich, eine ganzheitliche Sicht auf das Gerät und die Funktionen zu haben, die ein einzelnes physisches Gerät bereitstellt.

Ab Windows 7 verwendet das Betriebssystem eine neue ID (Container-ID), um einen oder mehrere Devnodes zu gruppieren, die von jedem instance eines bestimmten physischen Geräts stammen und zu diesen gehören. Die Container-ID ist eine Eigenschaft jedes Devnodes und wird durch einen GUID-Wert (Globally Unique Identifier) angegeben.

Jede instance eines physischen Geräts, das auf dem Computer installiert ist, verfügt über eine eindeutige Container-ID. Alle Devnodes, die eine Funktion für diese instance des physischen Geräts darstellen, verwenden dieselbe Container-ID. Die folgende Abbildung zeigt ein Beispiel für diese Beziehung.

Diagramm, das Container-IDs für die Devnodes eines Multifunktionsgeräts veranschaulicht.

Es gibt eine Container-ID mit einer besonderen Bedeutung für Bustreiber: NULL_GUID die als definiert ist: {00000000-0000-0000-0000-000000000000}.

Geben Sie im Allgemeinen beim Melden einer Container-ID nicht als Standardfall NULL_GUID zurück. Behandeln Sie stattdessen nicht IRP_MN_QUERY_ID für den Fall BusQueryContainerIDs, und lassen Sie PnP die Standardlogik anwenden.

Wenn NULL_GUID als Container-ID zurückgegeben wird, erklärt ein Bustreiber PnP, dass das Gerät nicht Teil eines Containers sein darf. Daher ist die Rückgabe NULL_GUID nur in ganz besonderen Fällen angebracht. Beispielsweise kann ein Devnode wie ein Volumegerät mehrere Datenträger in mehreren Containern umfassen, aber nicht zu einem Container gehören. Ein solches Gerät verfügt über eine DEVPKEY_Device_BaseContainerId gleich NULL_GUID, und es hat überhaupt keine DEVPKEY_Device_ContainerId .

Abgesehen von sehr speziellen Fällen sollte ein Bustreiber nie NULL_GUID zurückgeben, wenn er ein Hardwaregerät meldet, und Bustreiber sollten sich vor fehlerhafter Hardware schützen, die einen NULL_GUID Wert von ihrem Bus meldet. In diesen Fällen sollte der Bustreiber dies entweder als Gerätefehler behandeln oder so behandeln, als ob das Gerät keinen Wert gemeldet hat.