I/O-Request-Pakete
Die meisten Anfragen, die an Gerätetreiber gesendet werden, sind in I/O-Request-Paketen (IRPs) gepackt. Eine Betriebssystemkomponente oder ein Treiber sendet ein IRP an einen Treiber, indem er IoCallDriver aufruft, der zwei Parameter hat: einen Zeiger auf ein DEVICE_OBJECT und einen Zeiger auf ein IRP. Das DEVICE_OBJECT hat einen Zeiger auf ein zugehöriges DRIVER_OBJECT. Wenn eine Komponente IoCallDriver aufruft, sagen wir, dass die Komponente das IRP an das Geräteobjekt oder das IRP an den mit dem Geräteobjekt verbundenen Treiber sendet. Manchmal verwenden wir den Ausdruck gibt das IRP weiter oder leitet das IRP weiter anstelle von schickt das IRP.
Normalerweise wird ein IRP von mehreren Treibern verarbeitet, die in einem Stack angeordnet sind. Jeder Treiber im Stack ist mit einem Geräteobjekt verbunden. Weitere Informationen finden Sie unter Geräteknoten und Gerätestacks. Wenn ein IRP von einem Gerätestack verarbeitet wird, wird das IRP normalerweise zuerst an das oberste Geräteobjekt im Gerätestack gesendet. Wenn zum Beispiel ein IRP von dem in diesem Diagramm gezeigten Gerätestapel verarbeitet wird, wird das IRP zuerst an das Filter-Device-Objekt (Filter DO) an der Spitze des Gerätestacks gesendet.
Weitergabe einer IRP auf dem Gerätestack
Angenommen, der E/A-Manager sendet ein IRP an das Filter DO im Diagramm. Der mit dem Filter DO verbundene Treiber, AfterThought.sys, verarbeitet das IRP und gibt es dann an das Functional Device Object (FDO) weiter, das das nächst niedrigere Geräteobjekt im Gerätestack ist. Wenn ein Treiber ein IRP an das nächstniedrigere Geräteobjekt im Gerätestack weitergibt, sagen wir, dass der Treiber das IRP im Gerätestack nach unten weitergibt.
Einige IRPs werden den ganzen Weg über den Gerätestack bis zum Physical Device Object (PDO) weitergegeben. Andere IRPs erreichen das PDO nie, weil sie von einem der Treiber oberhalb des PDOs abgeschlossen werden.
IRPs sind in sich geschlossen
Die IRP-Struktur ist insofern in sich geschlossen, als sie alle Informationen enthält, die ein Treiber zur Bearbeitung einer E/A-Request benötigt. Einige Elemente der IRP-Struktur enthalten Informationen, die für alle beteiligten Treiber im Stack allgemein gelten. Andere Elemente der IRP enthalten Informationen, die für einen bestimmten Treiber im Stack spezifisch sind.