Einführung in Hardwareressourcen

Die Hardwareressourcen eines Systems sind die E/A-Ports, Interruptvektoren, DMA-Kanäle (Direct Memory Access) und andere Kommunikationspfade, die jedem Gerät zugewiesen werden müssen, das mit dem System verbunden ist. In den Themen in diesem Abschnitt wird beschrieben, wie Kernel-Mode Treiber für das Treiberframework (KMDF) die Hardwareressourcenanforderungen für ein Gerät aushandeln, die vorgeschlagene Ressourcenliste überprüfen und dann die zugewiesenen Ressourcen erhalten. In diesem Abschnitt wird auch erläutert, wie sowohl KMDF- als auch User-Mode Driver Framework-Treiber (UMDF) auf zugewiesene Ressourcen zugreifen und diese zuordnen.

Nachdem ein Benutzer ein PnP-Gerät verbunden hat, erstellt der Treiber, der das Gerät aufzählt , in der Regel eine oder mehrere logische Konfigurationen, bei denen es sich um Kombinationen von Hardwareressourcen handelt, die das Gerät verwenden kann. Diese Konfigurationen umfassen Folgendes:

  • Eine Startkonfiguration , die die Hardwareressourcen auflistet, die das Gerät beim Starten des Systems benötigt. (Für PnP-Geräte werden diese Informationen vom BIOS bereitgestellt.)

  • Zusätzliche Konfigurationen, in denen das Gerät betrieben werden kann. Der Treiber gruppiert diese zusätzlichen Konfigurationen in einer Ressourcenanforderungsliste. Der PnP-Manager wählt schließlich Ressourcen aus dieser Liste aus, die dem Gerät zugewiesen werden sollen.

Nachdem der Treiber die logischen Konfigurationen erstellt hat, sendet er sie an das Framework, und das Framework sendet sie an den PnP-Manager.

Als Nächstes bestimmt der PnP-Manager, welche Treiber das Gerät benötigt, und lädt sie, wenn sie noch nicht geladen sind. Der PnP-Manager sendet die Liste der Hardwareanforderungen des Geräts zur Überprüfung an die Treiber des Geräts. Funktions- und Filtertreiber können diese Liste ändern und an den PnP-Manager zurücksenden.

Der PnP-Manager untersucht die Liste der geänderten Hardwareanforderungen und bestimmt, welche der angegebenen Ressourcen tatsächlich auf dem System verfügbar sind. Wenn das Gerät Ressourcen benötigt, die der PnP-Manager zuvor einem anderen Gerät zugewiesen hatte, versucht der PnP-Manager möglicherweise, Ressourcen auf die Geräte des Systems umzuverteilen .

Als Nächstes erstellt der PnP-Manager eine Ressourcenliste, bei der es sich um eine Liste der Ressourcen handelt, die der PnP-Manager dem Gerät zuweisen möchte. Der PnP-Manager sendet diese Liste zur Überprüfung an die Treiber des Geräts. An diesem Punkt können die Funktions- und Filtertreiber Ressourcen aus der Liste entfernen, aber sie können ihr keine Ressourcen hinzufügen.

Schließlich weist der PnP-Manager dem Gerät Ressourcen zu. Das Framework übergibt die Ressourcenliste an die Funktions- und Filtertreiber des Geräts, und der Funktionstreiber des Geräts führt alle erforderlichen Initialisierungen durch, damit das Gerät und der Treiber auf die Ressourcen zugreifen können.

In den folgenden Schritten wird der Prozess ausführlicher beschrieben:

  1. Ein Benutzer fügt ein Gerät an.

  2. Ein Bustreiber erkennt das Gerät und listet es auf .

  3. Das Framework ruft die Rückruffunktion EvtDeviceResourcesQuery des Bustreibers auf, die eine Ressourcenliste erstellt , die die Startkonfiguration des Geräts beschreibt.

  4. Das Framework ruft die Rückruffunktion EvtDeviceResourceRequirerementsQuery des Bustreibers auf, die eine Ressourcenanforderungenliste für das Gerät erstellt.

  5. Der PnP-Manager bestimmt, welche Treiber das Gerät benötigt, und lädt sie, falls sie noch nicht geladen sind, um einen Treiberstapel für das Gerät zu erstellen.

  6. Der PnP-Manager sendet die Liste der Ressourcenanforderungen des Geräts zur Überprüfung an den Treiberstapel. Wenn die Liste den Treiberstapel hinunter bewegt, ruft das Framework jede Funktion auf und filtert die Rückruffunktion EvtDeviceFilterRemoveResourceRequirequirements des Treibers . Während die Liste den Stapel zurückgibt, ruft das Framework jede Funktion und jede Filtertreiber-Rückruffunktion EvtDeviceFilterAddResourceRequirements auf. Beide Rückruffunktionen können die Liste der Ressourcenanforderungen ändern.

  7. Der PnP-Manager erstellt eine Ressourcenliste für das Gerät und sendet sie zur Überprüfung an den Treiberstapel. Das Framework ruft jede Funktion und die EvtDeviceRemoveResources-Rückruffunktion des Treibers auf, wodurch Ressourcen entfernt werden, die die Rückruffunktion EvtDeviceFilterAddResourceRequirements des Treibers hinzugefügt haben, sodass der Bustreiber nicht versucht, sie zu verwenden.

  8. Das Framework empfängt die endgültige Ressourcenliste vom PnP-Manager und speichert sie.

  9. Wenn ein Treiber WdfInterruptCreate aufruft , um Interruptobjekte zu erstellen, findet das Framework Interruptressourcen in der Ressourcenliste und weist sie den Interruptobjekten zu.

  10. Nachdem das Gerät in einen nicht initialisierten D0-Zustand eingetreten ist, ruft das Framework die EvtDevicePrepareHardware-Rückruffunktion jedes Treibers auf und übergibt unformatierte und übersetzte Versionen der Ressourcenliste des Geräts als Eingabeargument. Der Treiber kann die Ressourcenliste speichern. Dies ist gültig, bis das Framework die Rückruffunktion EvtDeviceReleAseHardware des Treibers aufruft.