Freigeben über


System-Wide eindeutige Geräte-IDs

Ein Treiber für einen typischen Audioadapter sollte in der Lage sein, mehrere Instanzen derselben Audioadapterkarte in einem System zu unterstützen. Nahezu alle Datenstrukturen, die ein Treiber verwaltet, werden im Geräteerweiterungspuffer gespeichert (siehe Beschreibung des Felds "DeviceExtension" der DEVICE_OBJECT Struktur). Wenn mehrere Instanzen eines Treibers globale Daten gemeinsam nutzen, sollten diese Instanzen jedoch ihren Zugriff auf diese Daten synchronisieren.

Eine zusätzliche Anforderung besteht darin, dass jede Unterinstanz einer Adapterkarte über eine Geräte-ID-Zeichenfolge verfügen sollte, die das Unterdevice in allen Instanzen derselben Adapterkarte im System eindeutig identifiziert.

Die einfachste Möglichkeit, dies zu erreichen, besteht darin, jedes Untergerät auf der Adapterkarte als logisch unterschiedliches Gerät dem Plug-and-Play-Manager darzustellen. Dies wird als Option (1) in Multifunktionsaudiogeräten dargestellt.

Ein zweiter Ansatz besteht darin, den vom System bereitgestellten Multifunktionsbustreiber zu verwenden, um die Unterfunktionen auf der Adapterkarte zu verwalten. Der MF-Bustreiber weist jedem Unterteil eine Geräte-ID zu, die garantiert im gesamten System eindeutig ist, auch wenn das System mehrere Instanzen derselben Adapterkarte enthält. Der MF-Bustreiber unterstützt Designs, bei denen die Subgeräte gemeinsame Konfigurationsregister nutzen, wobei jedes Subgerät über einen eigenen Satz an PCI-Basisadressenregistern verfügt. Die Untergeräte sollten keine verborgenen Abhängigkeiten voneinander aufweisen und gleichzeitig funktionieren können, ohne sich gegenseitig oder andere Geräte im System zu stören. Dies ist option (2) in Multifunktionsaudiogeräten.

Ein dritter Ansatz besteht darin, einen proprietären Bustreiber zu verwenden, um die Untergeräte auf einer Adapterkarte zu verwalten. Dies ist häufig erforderlich, wenn die Unterdevices über gegenseitige Abhängigkeiten verfügen, die zentral verwaltet werden müssen. Solche Abhängigkeiten können auf verschiedene Arten auftreten:

  • Die Untergeräte könnten sich einige Ressourcen auf der Karte teilen. Wenn die Untergeräte beispielsweise einen digitalen Signalprozessor (Digital Signal Processor, DSP) gemeinsam nutzen, muss der Bustreiber möglicherweise das proprietäre Betriebssystem herunterladen, das auf dem DSP ausgeführt wird, bevor er die erste Untergruppe startet.

  • Ein Entwurfsfehler kann zu einer Abhängigkeit zwischen Unterfunktionen führen. Ein Entwurfsfehler kann erfordern, dass die Untergeräte in einer bestimmten Reihenfolge ein- oder ausgeschaltet werden.

Wenn eine der Arten von Abhängigkeiten vorhanden ist, ist ein proprietärer Bustreiber fast immer eine bessere Lösung als die Darstellung der Unterfunktionen direkt an den Plug and Play-Manager und den Versuch, die Abhängigkeit auszublenden.

Wenn Sie Ihren eigenen Bustreiber für eine Adapterkarte bereitstellen, sollten Sie sicherstellen, dass die Geräte-IDs, die Ihr Bustreiber zuweist, im gesamten System eindeutig sind.

Ein Bustreiber stellt eine Geräte-ID für eines seiner Kinder als Reaktion auf eine IRP_MN_QUERY_ID-Abfrage vom Plug-and-Play-Manager bereit. Die ID kann auf eine von zwei Arten angegeben werden, die der Bustreiber in seiner Antwort auf eine IRP_MN_QUERY_CAPABILITIES Abfrage angibt, indem das UniqueID-Feld der DEVICE_CAPABILITIES Struktur auf WAHR oder FALSCH festgelegt wird:

  • UniqueID = WAHR

    Dies bedeutet, dass der Name des Kindes garantiert im gesamten System eindeutig ist. Die Geräte-ID-Zeichenfolge enthält eine Geräte-ID sowie eine Instanz-ID, bei der es sich um eine Seriennummer handelt, die die Hardwareinstanz eindeutig identifiziert.

  • UniqueID = FALSCH

    Dies bedeutet, dass der Name des Kindes nur in Bezug auf das Elternteil eindeutig ist. Die meisten Geräte verwenden diese Identifikationsmittel. In diesem Fall erweitert der Plug-and-Play-Manager die Geräte-ID-Zeichenfolge, die er empfängt, um sie im gesamten System eindeutig zu machen. Die erweiterte Zeichenfolge ist eine Funktion der eindeutigen Kennung des übergeordneten Geräts.

Alle Audiobustreiber sollten "UniqueID = FALSE" für ihre Kinder festlegen. Dies bewirkt, dass der Plug-and-Play-Manager die Geräte-ID-Zeichenfolge des Kinds erweitert, indem Informationen zum übergeordneten Gerät hinzugefügt werden, um die ID auf dem Computer eindeutig zu machen.