Filterfabriken
Ein Audio-Adapter-Treiber bietet Filter-Fabriken, um die Instanziierung von Filtern zu verwalten. Jede Filterfabrik kann einen oder mehrere KS-Filter eines bestimmten Typs instanziieren. Wenn ein Filtertyp eine bestimmte Hardwarefunktion kapselt, ist die Anzahl der Filter dieses Typs, die die Factory instanziieren kann, durch die zugrunde liegenden Hardwareressourcen beschränkt.
Da eine Filterfabrik einen weitgehend autonomen Block von Hardwarefunktionalität verwaltet, kann jede Filterfabrik für sich genommen als ein eigenständiger Gerätetreiber betrachtet werden. Tatsächlich bezieht sich der Begriff Adaptertreiber, wie er im vorangegangenen Absatz verwendet wird, auf eine Sammlung verwandter Treiber - Filterfabriken -, die zusammengefügt werden, um die verschiedenen Hardwarefunktionen auf einer Adapterkarte zu verwalten.
Wie bei jedem anderen Microsoft Windows Driver Model (WDM)-Treiber übernimmt eine Filterfabrik die Energieverwaltung und die Einrichtungsfunktionen. Während der Installation werden in der INF-Datei für den Treiber ein oder mehrere Filtergerätenamen registriert (siehe Zeichenfolgen zur Geräteidentifizierung). Dieser Vorgang lädt die Namen in die Systemregistrierung und ordnet jede Filter-Factory einer oder mehreren KS-Filterkategorien zu, wie in Installieren von Geräteschnittstellen für einen Audioadapterbeschrieben. Alle Audiogeräte werden unter KSCATEGORY_AUDIO klassifiziert, aber ein Audiogerät kann auch unter zusätzliche Kategorien wie KSCATEGORY_RENDER (für ein Audiorenderinggerät) oder KSCATEGORY_CAPTURE (für ein Audioaufnahmegerät) klassifiziert werden. Der Treiber kündigt die allgemeinen Funktionen eines Geräts mithilfe der verschiedenen Kategorien an, unter denen er den Filter für dieses Gerät registriert. Wenn der SysAudio-Systemtreiberz. B. ein Audiogerät eines bestimmten Typs erfordert, sucht er in der Registrierung nach Geräten, die in die entsprechenden Kategorien fallen.
Das Betriebssystem verwendet die Setup-API, wie in Geräte- und Treiberinstallation, um alle KSCATEGORY_AUDIO-Filterfabriken in der Registrierung zu ermitteln und aufzuzählen. Der Registrierungseintrag für jede Fabrik gibt sowohl den Friendly Name der Filterfabrik als auch den Gerätenamen an, bei dem es sich um eine lange Zeichenfolge handelt, die ein Client an den create-file-Aufruf übergibt, der den Filter instanziiert. Dieser Aufruf könnte erfolgen an ZwCreateFile aus dem Kernel-Modus oder in den CreateFile aus dem Benutzermodus. Ein Filter ist ein Kernelmodusobjekt und wird durch ein Kernel-Handle identifiziert. Der Aufruf create-file gibt ein Instanz-Handle zurück, mit dem Clients auf den Filter verweisen können. Clients im Benutzermodus oder vorgelagerte Filter im Audiographen können dieses Handle verwenden, um IOCTL-Anfragen an den Filter zu senden oder weiterzuleiten. Weitere Informationen zu CreateFile-finden Sie in der Microsoft Windows SDK-Dokumentation.
Eine typische WDM-Audioadapterkarte kann sich beispielsweise auf einem PCI-Bus befinden und mehrere E/A-Anschlüsse zum Rendern oder Erfassen von Wellendaten enthalten. Ein einzelnes Audiogerät auf dieser Karte kann analoge Audio-Out-Buchsen für die Ansteuerung von Lautsprechern und ein Lineout-Kabel sowie analoge Audio-In-Buchsen für den Empfang von Signalen von einem Mikrofon und einem Linein-Kabel enthalten. Das WDM-Audiosystem stellt das Gerät als Filter dar und repräsentiert die Audiobuchsen als Pins an diesem Filter.
Der Filter für ein Audiogerät ist in Form von separaten Port- und Miniport-Treibern implementiert, die miteinander verbunden sind und gemeinsam agieren:
- Der Miniporttreiber enthält den hardwarespezifischen Code.
- Der Porttreiber enthält den generischen Code, der für alle Filter eines bestimmten Typs gilt.
Der Hersteller schreibt den Miniporttreiber, der den gesamten proprietären Code enthält, den der Filter zum Verwalten der Audiohardware benötigt. Das Betriebssystem stellt den Porttreiber bereit, der über den PortCls-Systemtreiber zugänglich ist (Portcls.sys; siehe Port Class Adapter Driver und PortCls System Driver). Die Aufteilung der Filterimplementierung in Port- und Miniporttreiber vereinfacht das Schreiben eines Treibers für ein proprietäres Gerät.
Wenn eine Filterfabrik einen Filter instanziiert, erstellt sie zuerst das Miniport-Treiberobjekt für den Filter. Die Filterfactory erstellt dann eine Instanz des entsprechenden Portobjekts und bindet das Miniporttreiberobjekt an diese Instanz, um einen voll funktionsfähigen Filter zu bilden. Das Codebeispiel in Subdevice Creation veranschaulicht diesen Prozess. Die Port- und Miniporttreiber kommunizieren über gut definierte Softwareschnittstellen miteinander. Weitere Informationen zu diesen Schnittstellen finden Sie unter Miniport-Schnittstellen und Ein Gerät unterstützen.
Ein Audiofilter stellt die Struktur des zugrunde liegenden Audiogeräts als eine Sammlung von Pin-Factories, Knoten und internen Verbindungen dar. Der Miniport-Treiber fasst diese Informationen in einem Filterdeskriptor zusammen, der eine Struktur vom Typ PCFILTER_DESCRIPTOR. Diese Struktur enthält wiederum individuelle Deskriptoren für die Pin-Fabriken, Knoten und internen Verbindungen des Filters. Diese Deskriptoren sind Strukturen der folgenden Typen:
Um den Filterdeskriptor vom Miniporttreiber zu erhalten, ruft der Porttreiber die IMiniport::GetDescription Methode.
Ein Beispiel dafür, wie ein Treiber seine PCFILTER_DESCRIPTOR-Struktur einrichtet, finden Sie im Sysvad-Beispieltreiber, der in Beispiel-Audio-Treiber.