Freigeben über


Übersicht über den Synthesizer-Miniport-Treiber

Sowohl ein Synth als auch eine Senke sind für die DirectMusic-Unterstützung erforderlich. Standardimplementierungen jeder werden mit DirectMusic bereitgestellt. Der Microsoft Software Synthesizer im Benutzermodus wird als Standardsynth bereitgestellt, und DirectSound ist die Standardwellensenke. Diese bieten eine vollständige Hardwareemulation, aber weitere Leistungsverbesserungen können in der Regel mit Software- oder Hardwareimplementierungen im Kernelmodus erreicht werden.

Wenn Sie Unterstützung für Hardware implementieren, besteht die einzige Möglichkeit darin, einen Kernelmodustreiber zu schreiben. Im Kernelmodus wird die Wellensenke vom DMus-Porttreiber in PortCls bereitgestellt und sollte nicht durch benutzerdefinierte Implementierungen ersetzt werden müssen (wie dies manchmal im Benutzermodus der Fall ist).

Für DirectMusic-Treiber im Kernelmodus ist die wichtigste Headerdatei dmusicks.h. Sie enthält die Standard Kernelmodusschnittstellen, die Sie zum Implementieren Des Miniporttreibers benötigen. Diese Schnittstellen sind:

IMiniportDMus

ISynthSinkDMus

IMXF

IAllocatorMXF

IMasterClock

IPortDMus

Die letzten drei dieser Schnittstellen werden in PortCls.sys implementiert.

Zwei weitere Headerdateien, die von Interesse sind, sind dmusprop.h, die DirectMusic-Eigenschaftselemente enthält, und dmusbuff.h, die die Standard IRP-Struktur enthält, DMUS_EVENTHEADER.

Das folgende Diagramm zeigt die Beziehung zwischen dem IHV-Adaptertreiber und dem Rest des DirectMusic-Systems.

Diagramm zur Veranschaulichung der Beziehung zwischen dem Adaptertreiber und dem DirectMusic-System.

Auf der obersten Ebene wird der Treiber über einen DirectMusic-Porttreiber (eine IDirectMusicPort-Schnittstelle instance) verfügbar gemacht. So kommuniziert eine Anwendung mit DirectMusic. Dieser Porttreiber kommuniziert über standardmäßige Kernelstreamingaufrufe über die DeviceIoControl-Funktion (beschrieben in der Microsoft Windows SDK-Dokumentation) nach unten mit einem Pin-instance.

Beachten Sie, dass der Begriff "Port" in der obigen Abbildung zwei widersprüchliche Bedeutungen aufweist. Vermeiden Sie es, die Verwendung des Begriffs Port durch die DirectMusic-API im obigen Benutzermodus mit dem DMus-Porttreiber im Kernelmodus zu verwechseln. Die Begriffe haben in den beiden Kontexten ähnliche, aber etwas unterschiedliche Bedeutungen. Beachten Sie insbesondere, dass die IDirectMusicPort-Schnittstelle oben in der Abbildung eine Abstraktion eines einzelnen Pins instance darstellt, die der DMus-Porttreiber in der unteren Hälfte der Abbildung implementiert.

Jedes Miniporttreiberobjekt ist mit einem übereinstimmenden Porttreiberobjekt verbunden. Das Porttreiberobjekt stellt grundlegende Dienste für den Miniporttreiber bereit. Jeder Pin instance, der einem geöffneten instance des Geräts zugeordnet ist, verfügt über Dienste wie Formatkonvertierung, Sequenzierung und "Drosselung" (eine Erläuterung der Drosselung finden Sie in der Beschreibung der IDirectMusicThru-Schnittstelle in der Windows SDK-Dokumentation). Pins können Ziele oder Quellen sein und mehrere Datenformate und -bereiche unterstützen. Jeder Pin instance gibt das Ziel oder die Quelle an und gibt an, welches Datenformat und welcher Bereich unterstützt wird.

Das Miniporttreiberobjekt wird vom Adaptertreiber des IHV erstellt. Es gibt zwar einen Pin instance und Sequencer pro geöffneter instance des Treibers, aber es gibt nur ein Port-Miniport-Treiberpaar pro Hardwarestück (oder geladener Kernelsoftwaresynthesizer). Die Kommunikation mit dem Miniporttreiber erfolgt über einen Datenstrom von Ereignissen, der an den Miniporttreiber übergeben wird, und über Eigenschaftselemente, die vom Miniporttreiber unterstützt werden.

Im Abschnitt DirectMusic Miniport Driver Interface werden die Details einer DirectMusic-Miniporttreiberimplementierung vorgestellt.