Topologie-Miniporttreiber
Ein Topologie-Miniporttreiber verwaltet die verschiedenen Hardwaresteuerelemente (z. B. Lautstärke und Stummschaltung) in der Mixerschaltung des Audioadapters. Dieser Treiber listet die Steuerelemente als Knoten in der Mixertopologie auf, sodass Clients die Verbindungen zwischen Knoten ermitteln und die Steuerungsparameter auf jedem Knoten abfragen und festlegen können.
Der SysAudio-Systemtreiber untersucht die Topologie des Adapters, wenn er ein Audiofilterdiagramm erstellt. Die Mixer-API (beschrieben im Abschnitt Windows-Multimedia der Microsoft Windows SDK-Dokumentation) stellt die Topologieknoten als Mixerliniensteuerelemente dar und macht sie für Benutzermodusanwendungen wie SndVol32 verfügbar. Weitere Informationen finden Sie unter SysTray und SndVol32.
Ein Topologie-Miniporttreiber sollte eine Topologie-Miniportschnittstelle implementieren, die der Porttreiber zum Initialisieren des Miniporttreibers verwendet. Die Miniportschnittstelle IMiniportTopology erbt die Methoden in der IMiniport-Schnittstelle . Es stellt keine zusätzlichen Methoden bereit. Ein Audioadaptertreiber bildet einen Topologiefilter , indem er die IMiniportTopology-Schnittstelle eines Miniportobjekts an die IPortTopology-Schnittstelle eines Portobjekts bindet.
In der Regel umfasst ein Topologiefilter die meisten Topologieknoten eines Adapters, obwohl andere Geräte innerhalb des Adapters möglicherweise zusätzliche Topologieknoten enthalten. Beispielsweise kann ein Wellengerät, das als Wellenfilter dargestellt wird, DAC-Knoten (KSNODETYPE_DAC) und ADC (KSNODETYPE_ADC) enthalten.
Das Abfragen und Festlegen von Steuerelementparametern auf Topologieknoten erfolgt über Eigenschaftenanforderungen. Jeder Knotentyp ist einer bestimmten Eigenschaft oder einem bestimmten Satz von Eigenschaften zugeordnet. Ein Knoten unterstützt möglicherweise nur einen Steuerelementwert. Beispielsweise verfügt ein Volumeknoten (KSNODETYPE_VOLUME) über einen Wert, der seine aktuelle Volumeeinstellung angibt. Andere Knoten unterstützen möglicherweise mehrere Steuerelementwerte. Beispielsweise unterstützt ein 3D-Knoten (KSNODETYPE_3D_EFFECTS) eine Reihe von 3D-Puffer- und 3D-Listenereigenschaften. Ein Summenknoten (KSNODETYPE_SUM) weist hingegen keine Steuerungswerte auf.
Ein Topologieminiporttreiber verwendet einen Verbindungsdeskriptor (PCCONNECTION_DESCRIPTOR), um eine Verbindung zwischen zwei Topologieknoten zu beschreiben. Jede Verbindung wird weitergeleitet und gibt sowohl einen Von-Knoten als auch einen zu-Knoten an. Ein Knoten kann über mehrere Pins verfügen, und die von einem Pin ausgeführte Funktion kann sich von der der anderen Pins unterscheiden. Um einen Pin von einem anderen zu unterscheiden, nummeriert der Miniporttreiber die Pins auf einem Knoten. Diese Pinnummern werden in den Verbindungsdeskriptoren angezeigt. Beispielsweise kann ein Zustandsvariablenfilter über drei Ausgabestifte verfügen – jeweils einen für die hohen, mittleren und niedrigen Frequenzen – nummeriert 1, 2 und 3. Durch die Pinnummerierung können Clients des Miniporttreibers ermitteln, welche Verbindungen welchen Pins zugeordnet sind.
Ein Verbindungsdeskriptor verwendet einen distinguished node identifier ( PCFILTER_NODE), um eine Pin im Filter von einem Pin auf einem Knoten innerhalb des Filters zu unterscheiden. Jede der festverdrahteten Verbindungen der Mixerschaltung mit den Audiorender- und Aufnahmegeräten im Audioadapter wird als Pin im Topologiefilter dargestellt. Andere Topologiefilterpins stellen externe physische Verbindungen dar, z. B. eine Lineoutbuchse am Adapter Karte. Die Pins an einem Topologiefilter stellen physische, fest verdrahtete Verbindungen der Adapterhardware dar. Daher können die Pins keine explizite Kontrolle darüber bieten, ob eine Verbindung hergestellt wird, und sie können nicht zum Verwalten des Datenflusses über diese Verbindung verwendet werden.
Ein einzelner Verbindungsdeskriptor kann eine Verbindung zwischen zwei beliebigen Pintypen in einer Topologie beschreiben. Die Pins an den beiden Seiten einer Verbindung können sowohl Pins am Filter oder Pins auf Knoten innerhalb des Filters sein, oder die Verbindung kann einen Filterstift auf der einen Seite und einen Knotenstift auf der anderen Seite haben. Ein Miniporttreiber gibt seine Topologie als Array von Verbindungsdeskriptoren an. Ein einzelner Pin kann mehrere Verbindungen aufweisen, was bedeutet, dass derselbe Pin in mehr als einem Verbindungsdeskriptor im Array angezeigt werden kann.
Die Topologiebeschreibung, die ein Client von einem Miniporttreiber abruft, ist nicht so konzipiert, dass eine offene Ermittlung der Interpretation von Knotentypen, die dem Client unbekannt sind, unterstützt wird. Die Nummerierung von Knotenheften allein stellt dem Client nicht die Informationen bereit, die zum Ermitteln der Funktionen der Pins erforderlich sind. Obwohl der Miniporttreiber den Typ eines Knotens (mithilfe einer GUID) identifiziert, stellt er keine standardisierte Liste von Parametern bereit, um entweder den Knotentyp oder die vom Knotentyp unterstützten Pins zu beschreiben.
Wenn ein Client beispielsweise einen Knoten aufzählt, der die knotentyp-GUID KSNODETYPE_VOLUME verwendet, um sich selbst zu identifizieren, kann der Client den Knoten nur verwenden, wenn er die Konventionen für den Umgang mit Volumeknoten kennt. Gemäß der Konvention unterstützt ein Volumeknoten beispielsweise die eigenschaft KSPROPERTY_AUDIO_VOLUMELEVEL und weist dem Ausgabe-Pin (Quelle) bzw. dem Eingabe-Pin (Senke) die Knotenpinnummern 0 und 1 zu. Darüber hinaus führt ein Client, der einen Volumeknoten steuern kann, in der Regel eine gezielte Suche durch, die seine Untersuchung auf eine relativ kleine Anzahl von Knotentypen beschränkt (z. B. Volume- und Stummschaltknoten). Der Client untersucht in der Regel nur Teile eines Filterdiagramms, die wahrscheinlich Volumeknoten enthalten (z. B. Mischerlinien).
Die Miniportschnittstelle unterstützt die Übermittlung unerwünschter Änderungen des Steuerelementwerts vom Miniporttreiber an den Porttreiber. Dieses Feature eignet sich für Geräte mit Steuerknöpfen, Schiebereglern oder Schaltern, die vom Benutzer physisch bearbeitet werden können. Jedes Mal, wenn der Benutzer den Steuerungswert eines Knotens ändert, benachrichtigt ein Hardware-Interrupt den Porttreiber, dass ein Hardwareereignis aufgetreten ist.