Freigeben über


Beispiel für WDM-Geräteobjekte

Die folgende Abbildung veranschaulicht die Geräteobjekte, die die Tastatur- und Mausgeräte darstellen, die zuvor in der Abbildung zur Veranschaulichung von Tastatur- und Maushardwarekonfigurationen dargestellt sind. Die Tastatur- und Maustreiber, die in der Abbildung zur Veranschaulichung der Tastatur- und Maustreiberebenen dargestellt sind, erstellen diese Geräteobjekte, indem sie eine E/A-Unterstützungsroutine (IoCreateDevice) aufrufen.

Tastatur- und Mausgeräteobjekte.

Für Tastatur- und Mausgeräte erstellen sowohl der jeweilige Port- als auch der Klassentreiber Geräteobjekte. Der Porttreiber erstellt ein physisches Geräteobjekt (PDO), das den physischen Port darstellt. Jeder Klassentreiber erstellt ein eigenes funktionales Geräteobjekt (Functional Device Object, FDO), um das Tastatur- oder Mausgerät als Ziel für E/A-Anforderungen darzustellen.

Jeder Klassentreiber ruft eine E/A-Unterstützungsroutine auf, um einen Zeiger auf das Geräteobjekt des nächstniedrigen Treibers zu erhalten, sodass sich der Klassentreiber über diesem Treiber verketten kann, d. h. der Porttreiber. Anschließend kann der Klassentreiber E/A-Anforderungen an den Porttreiber für die Ziel-PDO senden, die sein physisches Gerät darstellt.

Ein optionaler Filtertreiber, der der Konfiguration hinzugefügt wurde, würde ein Filtergeräteobjekt (Filter DO) erstellen. Wie der Klassentreiber verkettet sich ein optionaler Filtertreiber mit dem nächstniedrigen Treiber im Gerätestapel und sendet E/A-Anforderungen für den Ziel-PDO an den nächstniedrigen Treiber.

Wie zuvor in der Abbildung Tastatur- und Maustreiberebenen gezeigt, ist jeder Porttreiber ein Bustreiber (unterste Ebene), sodass jeder Porttreiber eines Geräts, das Interrupts generiert, Interruptobjekte einrichten und eine ISR registrieren muss.

Ein Dual-Device-Porttreiber wie der i8042-Treiber für die Tastatur und den in der Abbildung Tastatur- und Maushardwarekonfigurationen gezeigten Hilfsgerätecontroller muss gerätespezifische Interruptobjekte einrichten, wenn jedes Gerät einen anderen Interruptvektor verwendet. Beim Schreiben eines solchen Treibers können Sie entweder separate ISRs für jedes Gerät implementieren oder eine einzelne ISR für beide Geräte implementieren.