Share via


Suchen und Zuordnen von Hardwareressourcen

In diesem Thema wird beschrieben, wie ein KMDF-Treiber (Kernel-Mode Driver Framework) oder User-Mode Driver Framework(UMDF)-Treiber ab Version 2 eine übersetzte Speicherressource (CmResourceTypeMemory) ordnet, die er in seiner EvtDevicePrepareHardware-Rückruffunktion empfängt .

Ein UMDF 1.x-Treiber kann diesen Ressourcentyp auch in seiner IPnpCallbackHardware2::OnPrepareHardware-Methode empfangen. Weitere Informationen finden Sie unter Suchen und Zuordnen von Hardwareressourcen in UMDF 1.x-Treibern.

Ihr Treiber empfängt unformatierte und übersetzte Versionen von Hardwareressourcen in der Ressourcenliste des Geräts in seiner EvtDevicePrepareHardware-Rückruffunktion . Der Treiber kann die Ressourcenliste speichern, die gültig ist, bis das Framework die Rückruffunktion EvtDeviceReleaseHardware des Treibers aufruft.

In der Regel ruft der Treiber WdfCmResourceListGetCount von seiner EvtDevicePrepareHardware-Rückruffunktion auf, um die Anzahl der Ressourcendeskriptoren in der übersetzten Ressourcenliste zu bestimmen, und ruft dann WdfCmResourceListGetDescriptor in einer Schleife auf, um speicherbezogene Register, E/A-Ports und Interrupts zu identifizieren.

Wenn einem Treiber eine übersetzte Speicherressource (CmResourceTypeMemory) zugewiesen wird, muss er die physische Adresse einer Adresse zuordnen, über die er auf Geräteregister zugreifen kann.

Ein KMDF-Treiber ruft MmMapIoSpace auf, um den angegebenen physischen Adressbereich dem nicht auslagerten Systembereich zuzuordnen. Anschließend werden die HAL-Bibliotheksroutinen zum Lesen und Schreiben von Registern verwendet.

Ein UMDF-Treiber ruft WdfDeviceMapIoSpace auf, um die physische Adresse einer Pseudobasisadresse zuzuordnen, die er in Verbindung mit WDF-Registrierungs-/Portzugriffsfunktionen zum Lesen und Schreiben von Registern und Ports verwenden kann.

Der Treiber hebt die Zuordnung der Ressourcen auf, indem er MmUnmapIoSpace oder WdfDeviceUnmapIoSpace über seine EvtDeviceReleaseHardware-Rückruffunktion aufruft .

Sie müssen keine Ressourcen im E/A-Bereich (CmResourceTypePort, CmResourceTypeInterrupt, CmResourceTypeDma) zuordnen.

Wenn Ihr UMDF-Treiber WdfDeviceMapIoSpace aufruft, müssen Sie die Inf-Direktive UmdfDirectHardwareAccess auf AllowDirectHardwareAccess festlegen.

Ein Beispiel, das zeigt, wie ein Treiber speicherseitig zugeordnete Registerressourcen findet und ordnet, finden Sie unter Lesen und Schreiben in Geräteregister.