Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der Minidriver stellt eine KSPIN_DESCRIPTOR Struktur für jeden Pintyp bereit, der instanziiert werden soll. Eine Pindeskriptorstruktur wird als Pin-Factory bezeichnet. Jede Pinfactory kann eine oder mehrere Pininstanzen eines bestimmten Typs instanziieren. Eine Pinfactory enthält mehrere Arrays, die den Typ der Pin beschreiben, die dieser Deskriptor instanziiert.
Der Minidriver gibt eine oder mehrere KS-Kategorien an, zu denen Pins, die von diesem Deskriptor erstellt wurden, im Element "Categories" von KSPIN_DESCRIPTOR gehören. KS verwendet Kategorien, um Pininstanzen zu verbinden, wenn ein Filterdiagramm erstellt wird. Die KSPROPERTY_TOPOLOGY_CATEGORIES-Eigenschaft fragt nach dem Array funktionaler Kategorien ab, die ein Treiber unterstützt.
Ein Minidriver stellt eine INF-Datei bereit, die einen oder mehrere Pin-Gerätenamen registriert. Bei der Installation lädt das Betriebssystem die Namen und die entsprechenden Kategorien in die Systemregistrierung. Clients können dann Create-File-Aufrufe mit diesen Gerätenamen tätigen, um Pins zu instanziieren.
Benutzermodusclients rufen die Win32-Funktion CreateFile mit dem Namen des Geräts auf. Beispielsweise könnte "\\.\filters\audio\default renderer" ein Link zu dem Audiogerät sein, das für die Standardausgabe konfiguriert wurde. Kernelmodusclients rufen ZwCreateFile aus dem Kernelmodus auf. Nachdem die CreateFile-Routine ein Dateihandle zurückgibt, kommunizieren KS-Clients über KS-Eigenschaften mit Pin-Instanzen.
In den Pindeskriptorstrukturen ordnet der Minidriver Arrays von KSPIN_INTERFACE-Strukturen und KSPIN_MEDIUM-Strukturen an, die die Schnittstellen und Medien angeben, die von dieser Pin-Fabrik unterstützt werden. KSPIN_DESCRIPTOR ist auch der Ort, an dem der Minidriver die gültigen Datenbereiche für die von dieser Fabrik erstellten Pins angibt. Dazu wird ein Zeiger auf ein Array von KSDATARANGE-Strukturen bereitgestellt. Der Minidriver gibt auch die Richtungen von Daten und Kommunikationsfluss für neue Pins an, die von dieser Pin-Factory erstellt wurden.
Ein Minidriver ermöglicht die Laufzeitermittlung von Pin-Fabriken, indem der KSPROPSETID_Pin Eigenschaftensatz unterstützt wird.
Rufen Sie zum Erstellen einer Pinverbindung die KsCreatePin-Routine auf. In diesem Aufruf übergibt der Minidriver einen Zeiger an eine Struktur vom Typ KSPIN_CONNECT , die die angeforderte Verbindung beschreibt. Wenn eine Pin erstellt wird, sieht der Filter den neuen Pin als Dateiobjekt, das dem Dateiobjekt für diesen Filter untergeordnet ist.
Der Minidriver ruft KsValidateConnectRequest mit den im resultierenden IRP_MJ_CREATE bereitgestellten Deskriptorstrukturen auf. Diese Routine überprüft diese Strukturen und gibt einen Zeiger auf die Verbindungsstruktur und das Stammdateiobjekt zurück.
Minidriver verwenden die DataFlow und Communication Mitglieder von KSPIN_DESCRIPTOR Strukturen, um die folgenden Pin-spezifischen Merkmale zu definieren:
IRP-Quell-Pin im Vergleich zum IRP-Senken-Pin
Ein IRP-Quell-Pin gibt IRPs aus; ein IRP-Senken-Pin empfängt sie. Ein Benutzermodus-Client sendet Eingabe-/Ausgabe-Anfragen direkt an einen IRP-Sink-Pin über den entsprechenden Datei-Handle. Clients verwenden KSPROPERTY_PIN_COMMUNICATION, um zu überprüfen, ob Daten in einen Pintyp hinein- oder aus ihm herausfließen.
Datenquellen-Pin im Vergleich zum Datensenke-Pin
Ein Datenquellen-Pin ist ein Ausgabe-Pin für einen Filter; ein Datensenken-Pin ist ein Eingabe-Pin. Die Eigenschaft, eine Datenquelle oder -senke zu sein, ist unabhängig davon, eine IRP-Quelle oder -senke zu sein. Beispielsweise kann der Client eine Datenquelle verbinden, IRP-Senken-Pin mit einer Datensenke, IRP-Quell-Pin. Clients verwenden KSPROPERTY_PIN_DATAFLOW, um zu überprüfen, ob Daten in oder aus einem Pintyp fließen.
Beim Beenden einer Verbindung muss das Handle der Quellnadel geschlossen werden, bevor das zugrunde liegende Dateiobjekt zerstört wird. Wenn der Quell-Pin auf Ressourcen angewiesen ist, die vom Senken-Pin bereitgestellt werden, liegt es in der Verantwortung des Senken-Pins, die Quelle zu benachrichtigen, wenn die Verbindung beendet wird.
Ein Client interagiert mit einem Kernel-Streaming-Pin, indem die DeviceIoControl-Routine (in der Microsoft Windows SDK-Dokumentation beschrieben) mit IRP_MJ_DEVICE_CONTROL aufgerufen wird. Der Aufrufer identifiziert seine Anforderung durch den E/A-Steuerelementcode, den er an der Position Parameters.DeviceIoControl.IoControlCode in der I/O-Stapelstruktur platziert.
Um Anfragen zu unterstützen, stellt der Minidriver einen Zeiger auf eine KSDISPATCH_TABLE Struktur in einem Aufruf von KsAllocateObjectHeader bereit.
Schreibanforderungen enthalten einen Zeiger auf ein Array von KSSTREAM_HEADER Strukturen, die wiederum Zeiger zum Streamen von Daten enthalten. Leseanforderungen enthalten einen Zeiger auf ein Array leerer Headerstrukturen, in dem die Lesedaten zurückgegeben werden sollen.