Packet-Driven E/A mit wiederverwendbaren IRPs

Der E/A-Manager, Plug & Play-Manager und Power Manager verwenden E/A-Anforderungspakete (IRPs), um mit Kernelmodustreibern zu kommunizieren und Treibern die Kommunikation untereinander zu ermöglichen.

Der E/A-Manager führt die folgenden Schritte aus:

  • Akzeptiert E/A-Anforderungen, die normalerweise von Anwendungen im Benutzermodus stammen.

  • Erstellt IRPs zur Darstellung der E/A-Anforderungen.

  • Leitet die IRPs an die entsprechenden Treiber weiter.

  • Verfolgt die IRPs nach, bis sie abgeschlossen sind.

  • Gibt die status an den ursprünglichen Anforderer jedes E/A-Vorgangs zurück.

Ein IRP kann an mehrere Treiber weitergeleitet werden. Beispielsweise kann eine Anforderung zum Öffnen einer Datei auf einem Datenträger zuerst an einen Dateisystemtreiber, über einen zwischengeschalteten Spiegel Treiber und letztendlich an einen Datenträgertreiber und möglicherweise an einen PnP-Hardwarebustreiber weitergeleitet werden. Dieser Treibersatz wird als Treiberstapel bezeichnet.

Daher verfügt jede IRP über einen festen Teil sowie einen treiberspezifischen E/A-Stapelspeicherort für jeden Treiber, der das Gerät steuert:

  • Im festen Teil (oder Header) verwaltet der E/A-Manager Informationen zur ursprünglichen Anforderung, z. B. die Thread-ID und Parameter des Aufrufers, die Adresse des Geräteobjekts, auf dem eine Datei geöffnet ist usw. Der fixe Teil enthält auch einen E/A-status-Block, in dem Treiber Informationen über die status des angeforderten E/A-Vorgangs festlegen.

  • In der E/A-Stapelposition des Treibers der obersten Ebene legt der E/A-Manager, Plug & Play-Manager oder Power-Manager treiberspezifische Parameter fest, z. B. den Funktionscode des angeforderten Vorgangs und den Kontext, den der entsprechende Treiber verwendet, um zu bestimmen, was er tun soll. Im Gegenzug richtet jeder Treiber den E/A-Stapelspeicherort des nächstniedrigen Treibers im Treiberstapel ein.

Da jeder Treiber eine IRP verarbeitet, kann er auf seinen E/A-Stapelspeicherort im IRP zugreifen und so den IRP in jeder Phase des Betriebs des Treibers wiederverwenden. Darüber hinaus können Treiber auf höherer Ebene IRPs erstellen (oder wiederverwenden), um Anforderungen an noch niedrigere Treiber zu senden.

Eine ausführliche Erläuterung der IRPs finden Sie unter Behandeln von IRPs.