E/A-Anforderungspakete

Die meisten Anforderungen, die an Gerätetreiber gesendet werden, werden in E/A-Anforderungspaketen (IRPs) verpackt. Eine Betriebssystemkomponente oder ein Treiber sendet einen IRP an einen Treiber, indem IoCallDriver aufgerufen wird, der zwei Parameter aufweist: einen Zeiger auf eine DEVICE_OBJECT und einen Zeiger auf eine IRP. Die DEVICE_OBJECT verfügt über einen Zeiger auf eine zugeordnete DRIVER_OBJECT. Wenn eine Komponente IoCallDriver aufruft, sagen wir, dass die Komponente den IRP an das Geräteobjekt sendet oder den IRP an den Treiber sendet, der dem Geräteobjekt zugeordnet ist. Manchmal verwenden wir den Ausdruck übergibt das IRP oder leitet das IRP weiter, anstatt das IRP zu senden.

In der Regel wird ein IRP von mehreren Treibern verarbeitet, die in einem Stapel angeordnet sind. Jeder Treiber im Stapel ist einem Geräteobjekt zugeordnet. Weitere Informationen finden Sie unter Geräteknoten und Gerätestapel. Wenn ein IRP von einem Gerätestapel verarbeitet wird, wird der IRP normalerweise zuerst an das oberste Geräteobjekt im Gerätestapel gesendet. Wenn beispielsweise ein IRP von dem in diesem Diagramm dargestellten Gerätestapel verarbeitet wird, wird die IRP zuerst an das Filtergeräteobjekt (Filter DO) am oberen Rand des Gerätestapels gesendet.

Diagramm eines Geräteknotens und seines Gerätestapels.

Übergeben eines IRP im Gerätestapel

Angenommen, der E/A-Manager sendet einen IRP an die Filter-DO im Diagramm. Der Treiber, der dem Filter DO zugeordnet ist, AfterThought.sys, verarbeitet die IRP und übergibt es dann an das Funktionale Geräteobjekt (Functional Device Object, FDO), das das nächstniedrigene Geräteobjekt im Gerätestapel ist. Wenn ein Treiber ein IRP an das nächstniedrene Geräteobjekt im Gerätestapel übergibt, wird davon aus, dass der Treiber das IRP im Gerätestapel weitergibt.

Einige IRPs werden über den gesamten Gerätestapel an das physische Geräteobjekt (PDO) übergeben. Andere IRPs erreichen die pDO nie, da sie von einem der Treiber über dem PDO abgeschlossen werden.

IRPs sind eigenständig

Die IRP-Struktur ist in dem Sinne eigenständig, dass sie alle Informationen enthält, die ein Treiber zum Verarbeiten einer E/A-Anforderung benötigt. Einige Teile der IRP-Struktur enthalten Informationen, die allen beteiligten Treibern im Stapel gemeinsam sind. Andere Teile des IRP enthalten Informationen, die für einen bestimmten Treiber im Stapel spezifisch sind.