Treiberstapel

Die meisten Anforderungen, die an Gerätetreiber gesendet werden, sind in E/A-Anforderungspakete (IRPs) verpackt. Jedes Gerät wird durch einen Geräteknoten dargestellt, und jeder Geräteknoten verfügt über einen Gerätestapel. Weitere Informationen finden Sie unter Geräteknoten und Gerätestapel. Um eine Lese-, Schreib- oder Steuerungsanforderung an ein Gerät zu senden, sucht der E/A-Manager den Geräteknoten für das Gerät und sendet dann eine IRP an den Gerätestapel dieses Knotens. Manchmal sind mehr als ein Gerätestapel an der Verarbeitung einer E/A-Anforderung beteiligt. Unabhängig davon, wie viele Gerätestapel beteiligt sind, wird die Gesamtsequenz der Treiber, die an einer E/A-Anforderung teilnehmen, als Treiberstapel für die Anforderung bezeichnet. Wir verwenden auch den Begriff Treiberstapel , um sich auf den mehrstufigen Satz von Treibern für eine bestimmte Technologie zu beziehen.

E/A-Anforderungen, die von mehreren Gerätestapeln verarbeitet werden

In einigen Fällen ist mehr als ein Gerätestapel an der Verarbeitung eines IRP beteiligt. Das folgende Diagramm veranschaulicht einen Fall, in dem vier Gerätestapel an der Verarbeitung eines einzelnen IRP beteiligt sind.

Diagramm von vier Geräteknoten mit jeweils einem Gerätestapel.

Hier sehen Sie, wie das IRP in jeder nummerierten Phase im Diagramm verarbeitet wird:

  1. Das IRP wird von Disk.sys erstellt. Dabei handelt es sich um den Funktionstreiber im Gerätestapel für den Knoten Mein USB-Speichergerät. Disk.sys übergibt den IRP im Gerätestapel an Usbstor.sys.

  2. Beachten Sie, dass Usbstor.sys der PDO-Treiber für den Knoten "Mein USB-Speichergerät" und der FDO-Treiber für den Knoten USB-Massenspeichergerät ist. An diesem Punkt ist es nicht wichtig zu entscheiden, ob das IRP dem Paar (PDO, Usbstor.sys) oder dem Paar (FDO, Usbstor.sys) gehört. Der IRP gehört dem Treiber, Usbstor.sys, und der Treiber hat Zugriff auf die PDO und die FDO.

  3. Wenn Usbstor.sys die Verarbeitung des IRP abgeschlossen hat, übergibt er das IRP an Usbhub.sys. Usbhub.sys ist der PDO-Treiber für den USB Mass Storage Device-Knoten und der FDO-Treiber für den USB-Root Hub-Knoten. Es ist nicht wichtig zu entscheiden, ob das IRP dem Paar (PDO, Usbhub.sys) oder dem Paar (FDO, Usbhub.sys) gehört. Der IRP gehört dem Treiber, Usbhub.sys, und der Treiber hat Zugriff auf die PDO und die FDO.

  4. Wenn Usbhub.sys die Verarbeitung des IRP abgeschlossen hat, übergibt er den IRP an das Paar (Usbuhci.sys, Usbport.sys).

    Usbuhci.sys ist ein Miniporttreiber, und Usbport.sys ist ein Porttreiber. Das Paar (Miniport, Port) spielt die Rolle eines einzelnen Treibers. In diesem Fall werden sowohl der Miniporttreiber als auch der Porttreiber von Microsoft geschrieben. Das Paar (Usbuhci.sys, Usbport.sys) ist der PDO-Treiber für den USB-Root Hub-Knoten, und das (Usbuhci.sys, Usbport.sys) Paar ist auch der FDO-Treiber für den USB Host Controller-Knoten. Das Paar (Usbuhci.sys, Usbport.sys) führt die eigentliche Kommunikation mit der Hostcontrollerhardware durch, die wiederum mit dem physischen USB-Speichergerät kommuniziert.

Der Treiberstapel für eine E/A-Anforderung

Betrachten Sie die Sequenz von vier Treibern, die an der E/A-Anforderung teilgenommen haben, die im vorherigen Diagramm dargestellt ist. Wir können eine weitere Ansicht der Sequenz erhalten, indem wir uns auf die Treiber und nicht auf die Geräteknoten und deren einzelne Gerätestapel konzentrieren. Das folgende Diagramm zeigt die Treiber nacheinander von oben nach unten. Beachten Sie, dass Disk.sys einem Geräteobjekt zugeordnet ist, jeder der anderen drei Treiber jedoch zwei Geräteobjekten zugeordnet ist.

Diagramm eines Treiberstapels, der den obersten Treiber zeigt, der nur einem fdo zugeordnet ist, und die anderen drei Treiber, die einem pdo und einem fdo zugeordnet sind.

Die Sequenz von Treibern, die an einer E/A-Anforderung teilnehmen, wird als Treiberstapel für die E/A-Anforderung bezeichnet. Um einen Treiberstapel für eine E/A-Anforderung zu veranschaulichen, zeichnen wir die Treiber von oben nach unten in der Reihenfolge, in der sie an der Anforderung teilnehmen.

Beachten Sie, dass sich der Treiberstapel für eine E/A-Anforderung deutlich vom Gerätestapel für einen Geräteknoten unterscheidet. Beachten Sie auch, dass der Treiberstapel für eine E/A-Anforderung nicht unbedingt in einem Branch der Gerätestruktur verbleibt.

Technologietreiberstapel

Betrachten Sie den Treiberstapel für die E/A-Anforderung, die im vorherigen Diagramm dargestellt ist. Wenn wir jedem Treiber einen Anzeigenamen geben und einige geringfügige Änderungen am Diagramm vornehmen, haben wir ein Blockdiagramm, das vielen in der WdK-Dokumentation (Windows Driver Kit) ähnelt.

Diagramm eines Treiberstapels mit Anzeigenamen für die Treiber: Datenträgerklassentreiber oben gefolgt vom USB-Speicherporttreiber und dann USB-Hubtreiber und Treiber (USB 2-Miniport, USB-Port).

Im Diagramm ist der Treiberstapel in drei Abschnitte unterteilt. Wir können uns vorstellen, dass jeder Abschnitt zu einer bestimmten Technologie oder zu einer bestimmten Komponente oder einem bestimmten Teil des Betriebssystems gehört. Beispielsweise könnte man sagen, dass der erste Abschnitt oben im Treiberstapel zum Volume-Manager gehört, der zweite Abschnitt zur Speicherkomponente des Betriebssystems und der dritte Abschnitt zum KERN-USB-Teil des Betriebssystems.

Berücksichtigen Sie die Treiber im dritten Abschnitt. Diese Treiber sind eine Teilmenge einer größeren Reihe von USB-Kerntreibern, die Microsoft für die Verarbeitung verschiedener Arten von USB-Anforderungen und USB-Hardware bereitstellt. Das folgende Diagramm zeigt, wie das gesamte USB-Kernblockdiagramm aussehen könnte.

Diagramm, das den Technologietreiberstapel für einen möglichen USB-Kernblock zeigt.

Ein Blockdiagramm, das alle Treiber für eine bestimmte Technologie oder eine bestimmte Komponente oder einen Teil des Betriebssystems zeigt, wird als Technologietreiberstapel bezeichnet. In der Regel erhalten Technologietreiberstapel Namen wie usb Core Driver Stack, Storage Stack, 1394 Driver Stack und Audio Driver Stack.

Hinweis Das USB-Kernblockdiagramm in diesem Thema zeigt eine von mehreren Möglichkeiten, die Technologietreiberstapel für USB 1.0 und 2.0 zu veranschaulichen. Die offiziellen Diagramme der USB 1.0-, 2.0- und 3.0-Treiberstapel finden Sie unter USB Driver Stack Architecture.

Geräteknoten und Gerätestapel

Minidriver- und Treiberpaare

Konzepte für alle Treiberentwickler