Freigeben über


IRP_MJ_READ

Jeder Gerätetreiber, der Daten von seinem Gerät an das System überträgt, muss Leseanforderungen in einer DispatchRead - oder DispatchReadWrite-Routine verarbeiten, ebenso wie jeder Treiber auf höherer Ebene, der über einen solchen Gerätetreiber verfügt.

Sendebedingungen

Jederzeit nach dem erfolgreichen Abschluss einer Erstellungsanforderung.

Möglicherweise hat eine Benutzermodusanwendung oder Win32-Komponente mit einem Handle für das Dateiobjekt, das das Zielgeräteobjekt darstellt, eine Datenübertragung vom Gerät angefordert. Möglicherweise hat ein Treiber auf höherer Ebene die Lese-IRP erstellt und eingerichtet.

Eingabeparameter

Der E/A-Stapelspeicherort des Treibers im IRP gibt an, wie viele Bytes bei Parameters.Read.Length übertragen werden sollen.

Einige Treiber verwenden den Wert unter Parameters.Read.Key , um eingehende Leseanforderungen in einer vom Treiber bestimmten Reihenfolge in der Gerätewarteschlange oder in einer vom Treiber verwalteten internen Warteschlange von IRPs zu sortieren.

Bestimmte Treibertypen verwenden auch den Wert unter Parameters.Read.ByteOffset, der den Startoffset für den Übertragungsvorgang angibt. Weitere Informationen finden Sie beispielsweise im Thema IRP_MJ_READ in der Dokumentation zu Installierbares Dateisystem (IFS).

Ausgabeparameter

Je nachdem, ob der zugrunde liegende Gerätetreiber die Flags des Zielgeräteobjekts mit DO_BUFFERED_IO oder mit DO_DIRECT_IO einrichtet, werden die Daten in eine der folgenden Optionen übertragen:

  • Der Puffer bei Irp-AssociatedIrp.SystemBuffer>, wenn der Treiber gepufferte E/A verwendet.

  • Der puffer, der von der MDL unter Irp-MdlAddress> beschrieben wird, wenn der zugrunde liegende Gerätetreiber direkte E/A (DMA oder PIO) verwendet.

Vorgang

Nach Erhalt einer Leseanforderung richtet ein Treiber auf höherer Ebene den E/A-Stapelspeicherort im IRP für den nächstniedrigen Treiber ein, oder er erstellt und richtet zusätzliche IRPs für einen oder mehrere niedrigere Treiber ein. Es kann seine IoCompletion-Routine einrichten, die für die Eingabe-IRP optional ist, aber für vom Treiber erstellte IRPs erforderlich ist, indem IoSetCompletionRoutine aufgerufen wird. Anschließend übergibt der Treiber die Anforderung an den nächstniedrigen Treiber mit IoCallDriver.

Nach Erhalt einer Leseanforderung überträgt ein Gerätetreiber Daten von seinem Gerät in den Systemspeicher. Der Gerätetreiber legt das Feld Information des E/A-status-Blocks auf die Anzahl der Bytes fest, die bei Abschluss des IRP übertragen werden.

Anforderungen

Header

Wdm.h (einschließen Wdm.h, Ntddk.h oder Ntifs.h)

Weitere Informationen

DispatchRead

DispatchReadWrite

IoCallDriver

IoSetCompletionRoutine