Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
The MmMapIoSpaceEx routine maps the given physical address range to non-paged system space using the specified page protection.
Syntax
PVOID MmMapIoSpaceEx(
[in] PHYSICAL_ADDRESS PhysicalAddress,
[in] SIZE_T NumberOfBytes,
[in] ULONG Protect
);
Parameters
[in] PhysicalAddress
Specifies the starting physical address of the I/O range to be mapped.
[in] NumberOfBytes
Specifies a value greater than zero, indicating the number of bytes to be mapped.
[in] Protect
Flag bits that specify the protection to use for the mapped range. The caller must set one of the following flag bits in the Protect parameter.
Flag bit | Meaning |
---|---|
PAGE_READONLY | The mapped range can only be read, not written. |
PAGE_READWRITE | The mapped range can be read or written. |
PAGE_EXECUTE | The mapped range can be executed, but not read or written. |
PAGE_EXECUTE_READ | The mapped range can be executed or read, but not written. |
PAGE_EXECUTE_READWRITE | The mapped range can be executed, read, or written. |
In addition, the caller can set one (but not both) of the following optional flag bits in the Protect parameter.
Flag bit | Meaning |
---|---|
PAGE_NOCACHE | Specifies non-cached memory. |
PAGE_WRITECOMBINE | Specifies write-combined memory (the memory should not be cached by the processor, but writes to the memory can be combined by the processor). |
Return value
MmMapIoSpaceEx returns the base virtual address that maps the base physical address for the range. If space for mapping the range is insufficient, it returns NULL.
Remarks
A driver must call this routine during device start-up if it receives translated resources of type CmResourceTypeMemory in a CM_PARTIAL_RESOURCE_DESCRIPTOR structure. MmMapIoSpaceEx maps the physical address returned in the resource list to a virtual address through which the driver can access device registers.
For example, drivers of PIO devices that allocate long-term I/O buffers can call this routine to make such buffers accessible or to make device memory accessible.
For more information about using this routine, see Mapping Bus-Relative Addresses to Virtual Addresses.
Requirements
Requirement | Value |
---|---|
Minimum supported client | Available starting with Windows 10. |
Target Platform | Universal |
Header | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <=DISPATCH_LEVEL |