IRP-Hauptfunktionscodes

Jeder treiberspezifische E/A-Stapelspeicherort (IO_STACK_LOCATION) für jede IRP enthält einen Hauptfunktionscode (IRP_MJ_XXX), der dem Treiber mitteilt, welchen Vorgang er oder der zugrunde liegende Gerätetreiber ausführen soll, um die E/A-Anforderung zu erfüllen. Jeder Kernelmodustreiber muss Dispatchroutinen für die wichtigsten Funktionscodes bereitstellen, die er unterstützen muss.

Die spezifischen Vorgänge, die ein Treiber für einen bestimmten IRP_MJ_XXX-Code ausführt, hängen etwas vom zugrunde liegenden Gerät ab, insbesondere für IRP_MJ_DEVICE_CONTROL - und IRP_MJ_INTERNAL_DEVICE_CONTROL-Anforderungen . Beispielsweise unterscheiden sich die an einen Tastaturtreiber gesendeten Anforderungen notwendigerweise etwas von denen, die an einen Datenträgertreiber gesendet werden. Der E/A-Manager definiert jedoch die Parameter und den Inhalt der E/A-Stapelposition für jeden systemdefinierten Hauptfunktionscode.

Jeder Treiber auf höherer Ebene muss den entsprechenden E/A-Stapelspeicherort in IRPs für den nächstniedrigen Treiber einrichten und IoCallDriver aufrufen, entweder mit jedem Eingabe-IRP oder mit einem vom Treiber erstellten IRP (wenn der Treiber der höheren Ebene an der Eingabe-IRP festhält). Folglich muss jeder Zwischentreiber eine Dispatchroutine für jeden Hauptfunktionscode bereitstellen, den der zugrunde liegende Gerätetreiber verarbeitet. Andernfalls "durchbricht ein neuer Zwischentreiber die Kette", wenn eine Anwendung oder noch ein höherer Treiber versucht, eine E/A-Anforderung an den zugrunde liegenden Gerätetreiber zu senden.

Dateisystemtreiber und Legacy-Dateisystemfiltertreiber verarbeiten auch eine erforderliche Teilmenge systemdefinierter IRP_MJ_XXX-Funktionscodes , einige mit untergeordneten IRP_MN_XXX-Funktionscodes . Weitere Informationen zum Umgang mit diesen IRPs finden Sie unter IRP-Hauptfunktionscodes für Dateisystemtreiber und ältere FS-Filtertreiber.

Treiber verarbeiten IRPs, die mit einigen oder allen der folgenden Hauptfunktionscodes festgelegt sind:

IRP_MJ_CLEANUP

IRP_MJ_CLOSE

IRP_MJ_CREATE

IRP_MJ_DEVICE_CONTROL

IRP_MJ_FILE_SYSTEM_CONTROL

IRP_MJ_FLUSH_BUFFERS

IRP_MJ_INTERNAL_DEVICE_CONTROL

IRP_MJ_PNP

IRP_MJ_POWER

IRP_MJ_QUERY_INFORMATION

IRP_MJ_READ

IRP_MJ_SET_INFORMATION

IRP_MJ_SHUTDOWN

IRP_MJ_SYSTEM_CONTROL

IRP_MJ_WRITE

Die in diesem Abschnitt beschriebenen Eingabe- und Ausgabeparameter sind die funktionsspezifischen Parameter im IRP.

Weitere Informationen zu IRPs finden Sie unter Behandeln von IRPs.