Freigeben über


KsProbeStreamIrp-Funktion (ks.h)

Die KsProbeStreamIrp-Funktion nimmt die angegebenen Änderungen an den Eingabe- und Ausgabepuffern des angegebenen IRP basierend auf den übergebenen Flags vor und überprüft dann den Streamheader. Dies ist nützlich, wenn Sie die Ausnahmebehandlung lokalisieren oder asynchrone Arbeiten an einem IRP ausführen. Das resultierende IRP hat im Wesentlichen das METHOD_OUT_DIRECT- oder METHOD_IN_DIRECT-Format, mit der Ausnahme, dass der Zugriff auf den Datenpuffer IoModifyAccess sein kann, abhängig von den An diese Funktion übergebenen Flags oder den Flags im Streamheader.

Syntax

KSDDKAPI NTSTATUS KsProbeStreamIrp(
  [in, out]      PIRP  Irp,
  [in]           ULONG ProbeFlags,
  [in, optional] ULONG HeaderSize
);

Parameter

[in, out] Irp

Gibt den IRP an, dessen Eingabe- und Ausgabepuffer zugeordnet werden sollen. Der Anforderungsmodus des IRP wird verwendet, wenn die Puffer überprüft werden.

[in] ProbeFlags

Gibt Flags an, die angeben, wie die Streaming-IRP untersucht werden soll; Die Flags sind in der folgenden Tabelle aufgeführt.

[in, optional] HeaderSize

Gibt die Größe an, mit der die einzelnen Header überprüft werden sollen, die an diesen Client übergeben werden sollen, oder null, wenn keine Überprüfung durchgeführt werden soll. Bei Verwendung wird davon ausgegangen, dass der gesamte übergebene Puffer ein Vielfaches dieser Headergröße ist, es sei denn, der Puffer enthält stattdessen einen einzelnen Formatänderungsheader.

Rückgabewert

Die KsProbeStreamIrp-Funktion gibt bei erfolgreicher Ausführung STATUS_SUCCESS oder einen Speicher- oder Zugriffsfehler zurück.

Hinweise

Wenn die Funktion nur zum Zuordnen von MDLs und nicht zum Testen und Sperren der Adressen verwendet wird, muss der Aufrufer über eine Vervollständigungsroutine verfügen, um die MDL zu sauber. Für instance kann ein Just-In-Time-Sperrmechanismus die MDL-Liste zuordnen, aber nur arbeitsspeicher nach Bedarf sperren. Der Client muss Bereinigungscode bereitstellen, um die teilweise gesperrte MDL-Liste zu entfernen, bevor das IRP abgeschlossen wird, vermutlich in einer Vervollständigungsroutine.

Wenn die Header anscheinend bereits in einen Systempuffer kopiert wurden, wird sie nicht erneut überprüft. Im Allgemeinen ist das mehrfache Aufrufen der KsProbeStreamIrp-Funktion mit einem IRP nicht schädlich. Nach dem Aufrufen der Funktion sind die Streamheader in PIRP verfügbar. AssociatedIrp.SystemBuffer. Wenn die Datenstrompuffer-MDLs zugeordnet wurden, sind sie über den PIRP verfügbar. MdlAddress.

Die folgenden Definierten werden für die Variable ProbeFlags verwendet:

ProbeFlags Wert BESCHREIBUNG
KSPROBE_READ Gibt an, dass der Vorgang ein Datenstrom ist, der auf dem Gerät gelesen wird. Dies ist die Standardoption.
KSPROBE_WRITE Gibt an, dass der Vorgang ein Datenstromschreibvorgang auf dem Gerät ist.
KSPROBE_ALLOCATEMDL Gibt an, dass MDLs für die Streampuffer zugeordnet werden sollen, wenn sie noch nicht zugeordnet wurden. Wenn keine Streampuffer vorhanden sind, wird das Flag ignoriert. Wenn KSPROBE_PROBEANDLOCK nicht gleichzeitig mit diesem Flag angegeben wird, muss der Aufrufer über eine Vervollständigungsroutine verfügen, um MDLs zu sauber, wenn nicht alle MDLs erfolgreich getestet und gesperrt wurden.
KSPROBE_PROBEANDLOCK Wenn die KSPROBE_ALLOCATEMDL festgelegt ist, gibt an, dass der Arbeitsspeicher, auf den die MDLs für die Streampuffer verweisen, untersucht und gesperrt werden soll. Wenn das MDL-Zuordnungsflag nicht festgelegt ist, wird dieses Flag ignoriert, auch wenn die MDL-Zuordnung zuvor erfolgt ist. Die Methode der Untersuchung wird durch den Typ von IRP bestimmt, der übergeben wird. Für einen Schreibvorgang wird IoReadAccess verwendet. Für einen Lesevorgang wird IoWriteAccess verwendet. Wenn der Client, der die Daten gesendet hat, den nicht auslagerten Pool verwendet, werden die entsprechenden MDLs initialisiert, anstatt zu testen und zu sperren.
KSPROBE_SYSTEMADDRESS Ruft eine Systemadresse für jede MDL in der Kette ab, sodass der Aufrufer dies nicht in einem separaten Schritt ausführen muss. Dies wird ignoriert, wenn der Test und das Sperrflag nicht festgelegt sind, auch wenn die MDLs zuvor untersucht wurden.
KSPROBE_ALLOWFORMATCHANGE Bei einem Stream Write kann das KSSTREAM_HEADER_OPTIONSF_TYPECHANGED-Flag im Streamheader festgelegt werden. Dies bedeutet, dass der Streamheader keine erweiterte Länge hat, auch wenn eine erweiterte Headergröße angegeben wurde. Außerdem kann in diesem Fall nur ein Streamheader im IRP enthalten sein. Der diesem Header zugeordnete Puffer enthält das neue Datenformat. Bei Systemspeicherdatenströmen sollte der Puffer nicht von der ausgehandelten Zuweisung abgerufen worden sein, da er nicht Teil des Datenstroms ist.

Anforderungen

Anforderung Wert
Zielplattform Universell
Header ks.h (ks.h einschließen)
Bibliothek Ks.lib