System-Wide eindeutige Geräte-IDs
Ein Treiber für einen typischen Audioadapter sollte problemlos in der Lage sein, mehrere Instanzen desselben Audioadapters Karte in einem System zu unterstützen. Fast alle Datenstrukturen, die ein Treiber verwaltet, werden im Geräteerweiterungspuffer gespeichert (siehe Beschreibung des DeviceExtension-Felds der DEVICE_OBJECT-Struktur). Wenn mehrere Instanzen eines Treibers jedoch globale Daten gemeinsam nutzen, sollten diese Instanzen ihren Zugriff auf diese Daten synchronisieren.
Eine zusätzliche Anforderung besteht darin, dass jedes Untergerät auf einem bestimmten instance eines Adapters Karte über eine Geräte-ID-Zeichenfolge verfügen muss, die das Untergerät über alle Instanzen desselben Adapters Karte im System eindeutig identifiziert.
Die einfachste Möglichkeit besteht darin, die einzelnen Untergeräte auf dem Adapter Karte als logisch eindeutiges Gerät für den Plug & Play-Manager verfügbar zu machen. Dies wird als Option (1) in Multifunktionsaudiogeräten angezeigt.
Ein zweiter Ansatz besteht darin, den vom System bereitgestellten Multifunktionsbustreiber zu verwenden, um die Untergeräte auf dem Adapter Karte zu verwalten. Der MF-Bustreiber weist jedem Untergerät eine Geräte-ID zu, die im gesamten System garantiert eindeutig ist, auch wenn das System mehrere Instanzen desselben Adapters Karte enthält. Der MF-Bustreiber eignet sich für Designs, bei denen die Untergeräte einen gemeinsamen Satz von Konfigurationsregistern verwenden, aber jedes Untergeräte über einen eigenen Satz von PCI-Basisadressenregistern verfügt. Die Untergeräte sollten keine versteckten Abhängigkeiten voneinander aufweisen und gleichzeitig arbeiten können, ohne sich gegenseitig oder mit anderen Geräten im System zu stören. Dies ist die Option (2) in Multifunktionsaudiogeräten.
Ein dritter Ansatz besteht darin, einen proprietären Bustreiber zu verwenden, um die Untergeräte auf einem Adapter Karte zu verwalten. Dies ist häufig erforderlich, wenn die Untergeräte ü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önnen eine Karte-Ressource gemeinsam nutzen. 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 das erste Untergerät gestartet wird.
Ein Entwurfsfehler kann zu einer Abhängigkeit zwischen Untergeräte führen. Beispielsweise kann es für einen Entwurfsfehler erforderlich sein, dass die Untergeräte in einer bestimmten Sequenz hoch- oder heruntergefahren werden.
Wenn ein Abhängigkeitstyp vorhanden ist, ist ein proprietärer Bustreiber fast immer eine bessere Lösung, als die Untergeräte direkt dem Plug & Play-Manager zu präsentieren und zu versuchen, die Abhängigkeit auszublenden.
Wenn Sie einen eigenen Bustreiber für einen Adapter Karte bereitstellen, sollten Sie sicherstellen, dass die Geräte-IDs, die Ihr Bustreiber zuweist, systemübergreifend eindeutig sind.
Ein Bustreiber stellt eine Geräte-ID für eines seiner untergeordneten Elemente als Reaktion auf eine IRP_MN_QUERY_ID Abfrage des Plug & Play-Managers bereit. Die ID kann auf 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 TRUE oder FALSE festgelegt wird:
Uniqueid = STIMMT
Dies bedeutet, dass der Name des untergeordneten Elements garantiert im gesamten System eindeutig ist. Die Geräte-ID-Zeichenfolge enthält eine Geräte-ID sowie eine instance-ID, bei der es sich um eine Seriennummer handelt, die die Hardware instance eindeutig identifiziert.
Uniqueid = FALSE
Dies bedeutet, dass der Name des untergeordneten Elements nur in Bezug auf das übergeordnete Element eindeutig ist. Die meisten Geräte verwenden dieses Identifizierungsmittel. In diesem Fall erweitert der Plug & Play-Manager die empfangene Geräte-ID-Zeichenfolge, um sie über das System eindeutig zu machen. Die erweiterte Zeichenfolge ist eine Funktion der eindeutigen ID des übergeordneten Geräts.
Alle Audiobustreiber sollten UniqueID = FALSE für ihre Kinder festlegen. Dies bewirkt, dass der Plug & Play-Manager die Geräte-ID-Zeichenfolge des untergeordneten Elements erweitert, indem Er Informationen zum übergeordneten Gerät hinzufügt, um die ID auf dem Computer eindeutig zu machen.