Einführung in die Portklasse
Die meisten Hardwaretreiber für PCI- und DMA-basierte Audiogeräte basieren auf der Portklassenbibliothek, auf die über den PortCls-Systemtreiber (Portcls.sys) zugegriffen werden kann. PortCls ist ein Audioport-Klassentreiber, den Microsoft als Teil des Betriebssystems einschließt. PortCls stellt eine Reihe von Porttreibern bereit, die die meisten KS-Filterfunktionen (Generic Kernel Streaming) implementieren. Daher vereinfacht PortCls die Aufgabe des Audiotreiberentwicklers. Der Hardwarehersteller muss nur eine Reihe von Miniporttreibern bereitstellen, um die hardwarespezifischen Funktionen eines Audioadapters zu verarbeiten.
Obwohl Hardwarehersteller die Möglichkeit haben, eigene KS-Filter für ihre Audiogeräte zu implementieren, ist diese Option für typische Audiogeräte sowohl schwierig als auch unnötig. Sie können einen KS-Filter entwickeln, der entweder Stream.sys, dem Stream-Klassentreiber oder Avstream.sys dem AVStream-Klassentreiber entspricht. Ein KS-Filter, der auf Stream.sys basiert, kann jedoch nicht die Verbesserungen nutzen, die nur in AVStream verfügbar sind. Weitere Informationen zu KS-Filtern und PortCls finden Sie unter Erste Schritte mit WDM-Audiotreibern.
Die interne Implementierung von PortCls kann weiterentwickelt werden, um die Kernelstreamingverbesserungen in aufeinander folgenden Windows-Releases zu nutzen, während die Kompatibilität mit vorhandenen Treibern beibehalten wird.
PortCls wird in der Portcls.sys Systemdatei als Exporttreiber (eine Kernelmodus-DLL) implementiert und enthält die folgenden Elemente:
Eine Reihe von Hilfsfunktionen, die vom Adaptertreiber aufgerufen werden können
Eine Sammlung von Audioporttreibern
Es liegt in der Verantwortung des Hardwareherstellers eines Audiogeräts, einen Adaptertreiber bereitzustellen. Der Adaptertreiber enthält Initialisierungs- und Miniporttreiberverwaltungscode (einschließlich der DriverEntry-Funktion ) sowie eine Sammlung von Audio-Miniporttreibern .
Wenn das Betriebssystem den Adaptertreiber lädt, erstellt der Adaptertreiber eine Reihe von Miniporttreiberobjekten und fordert den PortCls-Systemtreiber auf, einen entsprechenden Satz von Porttreiberobjekten zu erstellen. (Das Codebeispiel in der Untergeräteerstellung veranschaulicht diesen Prozess.) Diese Porttreiber sind in der Regel eine Teilmenge der in der Portcls.sys-Datei verfügbaren Treiber. Jeder Miniporttreiber bindet sich an einen übereinstimmenden Porttreiber aus Portcls.sys, um einen vollständigen Untergerätetreiber zu bilden. Die Kombination von Port-und Miniport-Untergerätetreibern ist ein KS-Filter (siehe Audiofilter). Ein typischer Adaptertreiber kann beispielsweise drei Miniporttreiber enthalten: WaveRT, DMusUART und Topologie (mit IMiniportWaveRT-, IMiniportDMus- und IMiniportTopology-Schnittstellen ). Während der Initialisierung sind diese Miniporttreiber an die WaveRT-, DMus- und Topologieporttreiber gebunden (mit IPortWaveRT-, IPortDMus- und IPortTopology-Schnittstellen ), die in der Portcls.sys-Datei enthalten sind. Jeder dieser drei Untergerätetreiber hat die Form eines KS-Filters. Die drei Filter zusammen machen die vollständige Funktionalität des Audioadapters verfügbar.
In der Regel stellen die Porttreiber den Großteil der Funktionalität für jede Klasse von Audiountergeräte bereit. Beispielsweise übernimmt der WaveRT-Porttreiber die meiste Arbeit, die zum Streamen von Audiodaten an ein DMA-basiertes Audiogerät erforderlich ist, während der Miniporttreiber gerätespezifische Details wie die DMA-Adresse und den Gerätenamen bereitstellt.
Audioadaptertreiber und Miniporttreiber werden in der Regel in Microsoft C++ geschrieben und nutzen umfangreiche COM-Schnittstellen. Die Port-Miniport-Treiberarchitektur fördert den modularen Aufbau. Miniport-Treiberschreiber sollten ihren Treiber als C++-Klasse implementieren, die von der IMiniport-Schnittstelle abgeleitet ist, die in der Headerdatei Portcls.h definiert ist. Die Hardwareinitialisierung erfolgt zur Ladezeit des Treibers- in der Regel in der Init-Methode der von IMiniport abgeleiteten Klasse (z. B . IMiniportWaveRT::Init). Weitere Informationen zu COM-Implementierungen von Audio-Miniporttreibern finden Sie unter COM im Kernel.
Das folgende Diagramm veranschaulicht die Beziehung zwischen Port- und Miniporttreibern und deren Position im Audiostapel.
Im vorherigen Diagramm ist die KSEndpoint-Komponente eine vom System bereitgestellte Datei, die mit Windows Vista und höheren Versionen von Windows bereitgestellt wird. Diese Komponente wird in Form einer DLL (Audiokse.dll) bereitgestellt. KSEndpoint abstrahiert den Kernelmodus-Geräteendpunkt und ermöglicht der Audio-Engine den Zugriff auf den abstrahierten Endpunkt. Weitere Informationen zur Audio-Engine finden Sie unter Erkunden der Windows Vista-Audio-Engine.
Die Legende im vorherigen Diagramm zeigt die Felder, die Treiberkomponenten darstellen, die der Anbieter bereitstellt. Beachten Sie, dass der obere Rand jedes Miniporttreibers an den unteren Rand jedes Porttreibers angibt. Der WaveRT-Porttreiber macht beispielsweise eine IPortWaveRT-Schnittstelle für den WaveRT-Miniporttreiber verfügbar, wodurch eine IMiniportWaveRT-Schnittstelle für den Porttreiber verfügbar gemacht wird. Diese Schnittstellen werden manchmal als Ober- und Unterrandschnittstellen bezeichnet.
Die Portklasse und die AVStream-Klassentreiber sind insofern ähnlich, als sie beide WDM-Treiber sind und beide die WDM-Kernelstreamingarchitektur unterstützen. Portklassentreiber unterscheiden sich jedoch von AVStream-Klassentreibern in den Bereichen Multiprozessorhandling und Reentrancy. Portklassentreiber führen folgendes aus:
Verwenden Sie einen dreistufigen Ansatz, der die Klassentreiber, Porttreiber und vom Anbieter bereitgestellten Miniporttreiber kombiniert.
Sie verfügen über eine begrenzte Anzahl von Audiofunktionen, sodass Miniporttreiber näher an der Audiohardware arbeiten können.
Zulassen, dass mehrere Port- oder Miniporttreiber für ein bestimmtes Gerät verknüpft werden. Dieses Feature ermöglicht eine bessere Unterstützung für Multifunktionskarten.
Externe Busse (z. B. USB) werden nicht unterstützt. Alle Porttreiber unterstützen Geräte, die sich in den Systembussen befinden (PCMCIA und PCI).
Die Terminologie für die Beschreibung von WDM-Audioports und Miniporttreibern unterscheidet sich in einigen Punkten von den Begriffen, die für andere Klassen von Windows-Treibern verwendet werden. Diese Unterschiede werden in DER WDM-Audioterminologie erläutert.
In diesem Abschnitt werden die folgenden Themen erläutert: