查找和映射硬件资源

本主题介绍从版本 2 开始,Kernel-Mode Driver Framework (KMDF) 驱动程序或 User-Mode Driver Framework (UMDF) 驱动程序如何映射在其 EvtDevicePrepareHardware 回调函数中接收的已转换内存资源 (CmResourceTypeMemory) 。

UMDF 1.x 驱动程序还可以在其 IPnpCallbackHardware2::OnPrepareHardware 方法中接收此类资源。 有关详细信息,请参阅 在 UMDF 1.x 驱动程序中查找和映射硬件资源

驱动程序在其 EvtDevicePrepareHardware 回调函数的设备资源列表中接收硬件资源的原始和翻译版本。 驱动程序可以保存资源列表,该列表在框架调用驱动程序的 EvtDeviceReleaseHardware 回调函数之前有效。

通常,驱动程序从其 EvtDevicePrepareHardware 回调函数调用 WdfCmResourceListGetCount 以确定转换的资源列表中的资源描述符的数量,然后在循环中调用 WdfCmResourceListGetDescriptor 以标识内存映射的寄存器、I/O 端口和中断。

如果为驱动程序分配了转换的内存资源 (CmResourceTypeMemory) ,则必须将物理地址映射到可以访问设备寄存器的地址。

KMDF 驱动程序调用 MmMapIoSpace ,将给定的物理地址范围映射到非分页系统空间。 然后,它使用 HAL 库例程 读取和写入寄存器。

UMDF 驱动程序调用 WdfDeviceMapIoSpace 以将物理地址映射到伪基址,该地址可与 WDF 注册/端口访问函数 结合使用,以读取和写入寄存器和端口。

驱动程序通过从其 EvtDeviceReleaseHardware 回调函数调用 MmUnmapIoSpaceWdfDeviceUnmapIoSpace 来取消映射资源。

无需 (CmResourceTypePortCmResourceTypeInterruptCmResourceTypeDma) 映射 I/O 空间中的资源。

如果 UMDF 驱动程序调用 WdfDeviceMapIoSpace,则必须将 UmdfDirectHardwareAccess INF 指令设置为 AllowDirectHardwareAccess

有关显示驱动程序如何查找和映射内存映射寄存器资源的示例,请参阅 读取和写入设备寄存器