IRP_MJ_WRITE

Jeder Gerätetreiber, der Daten vom System auf sein Gerät überträgt, muss Schreibanforderungen in einer DispatchWrite - 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ätobjekt darstellt, eine Datenübertragung an das Gerät angefordert. Möglicherweise hat ein Treiber auf höherer Ebene die Schreib-IRP erstellt und eingerichtet.

Eingabeparameter

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

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

Bestimmte Typen von Treibern verwenden auch den Wert unter Parameters.Write.ByteOffset, der den Startoffset für den Übertragungsvorgang angibt. Weitere Informationen finden Sie beispielsweise im Thema IRP_MJ_WRITE in der IfS-Dokumentation (Installable File System).

Je nachdem, ob der zugrunde liegende Gerätetreiber die Flags des Zielgeräteobjekts mit DO_BUFFERED_IO oder mit DO_DIRECT_IO einrichtet, werden Daten von einem der folgenden Objekte ü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.

Ausgabeparameter

Keine

Vorgang

Nach Erhalt einer Schreibanforderung 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 Eingang einer Schreibanforderung überträgt ein Gerätetreiber Daten aus dem Systemspeicher auf sein Gerät. 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

DispatchReadWrite

DispatchWrite

IoCallDriver

IoCompletion

IoSetCompletionRoutine