使用英语阅读

通过


mmMapIoSpaceEx 函数 (wdm.h)

MmMapIoSpaceEx 例程使用指定的页面保护将给定的物理地址范围映射到非分页系统空间。

语法

PVOID MmMapIoSpaceEx(
  [in] PHYSICAL_ADDRESS PhysicalAddress,
  [in] SIZE_T           NumberOfBytes,
  [in] ULONG            Protect
);

参数

[in] PhysicalAddress

指定要映射的 I/O 范围的起始物理地址。

[in] NumberOfBytes

指定大于零的值,指示要映射的字节数。

[in] Protect

标记指定要用于映射范围的保护的位。 调用方必须在 Protect 参数中设置以下标志位之一。

标记位 含义
PAGE_READONLY 映射的范围只能读取,不能写入。
PAGE_READWRITE 映射的范围可以读取或写入。
PAGE_EXECUTE 映射的范围可以执行,但不能读取或写入。
PAGE_EXECUTE_READ 映射的范围可以执行或读取,但不能写入。
PAGE_EXECUTE_READWRITE 映射的范围可以执行、读取或写入。
 

此外,调用方可以在 Protect 参数中设置一个 (但不能同时) 以下可选标志位。

标记位 含义
PAGE_NOCACHE 指定非缓存内存。
PAGE_WRITECOMBINE 指定写入组合内存 (内存不应由处理器缓存,但对内存的写入可由处理器) 合并。

返回值

MmMapIoSpaceEx 返回映射范围基本物理地址的基虚拟地址。 如果用于映射范围的空间不足,则返回 NULL

注解

如果驱动程序在CM_PARTIAL_RESOURCE_DESCRIPTOR结构中收到 CmResourceTypeMemory 类型的转换资源,则驱动程序必须在 设备 启动时调用此例程。 MmMapIoSpaceEx 将资源列表中返回的物理地址映射到驱动程序可以访问设备寄存器的虚拟地址。

例如,分配长期 I/O 缓冲区的 PIO 设备的驱动程序可以调用此例程,使此类缓冲区可访问或使设备内存可访问。

有关使用此例程的详细信息,请参阅 将 Bus-Relative 地址映射到虚拟地址

要求

要求
最低受支持的客户端 从Windows 10开始可用。
目标平台 通用
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <=DISPATCH_LEVEL

另请参阅

MmAllocateContiguousMemory

MmAllocateNonCachedMemory

MmMapLockedPages

MmUnmapIoSpace