Поделиться через


Функция MmMapIoSpaceEx (wdm.h)

Подпрограмма MmMapIoSpaceEx сопоставляет заданный физический диапазон адресов с системным пространством без страниц, используя указанную защиту страницы.

Синтаксис

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

Параметры

[in] PhysicalAddress

Указывает начальный физический адрес диапазона операций ввода-вывода для сопоставления.

[in] NumberOfBytes

Задает значение больше нуля, указывающее количество сопоставляемых байтов.

[in] Protect

Биты флага, определяющие защиту, используемую для сопоставленного диапазона. Вызывающий объект должен задать один из следующих битов флага в параметре Protect .

Бит флага Значение
PAGE_READONLY Сопоставленный диапазон можно только считывать, а не записывать.
PAGE_READWRITE Сопоставленный диапазон можно считать или записать.
PAGE_EXECUTE Сопоставленный диапазон можно выполнять, но не читать или записывать.
PAGE_EXECUTE_READ Сопоставленный диапазон может выполняться или читаться, но не записываться.
PAGE_EXECUTE_READWRITE Сопоставленный диапазон можно выполнять, читать или записывать.
 

Кроме того, вызывающий объект может задать один (но не оба) из следующих необязательных битов флага в параметре Protect .

Бит флага Значение
PAGE_NOCACHE Указывает не кэшированную память.
PAGE_WRITECOMBINE Задает объединенную память для записи (память не должна кэшироваться процессором, но операции записи в память могут быть объединены процессором).

Возвращаемое значение

MmMapIoSpaceEx возвращает базовый виртуальный адрес, который сопоставляет базовый физический адрес для диапазона. Если места для сопоставления диапазона недостаточно, возвращается значение NULL.

Комментарии

Драйвер должен вызывать эту подпрограмму во время запуска устройства, если он получает переведенные ресурсы типа CmResourceTypeMemory в CM_PARTIAL_RESOURCE_DESCRIPTOR структуре. MmMapIoSpaceEx сопоставляет физический адрес, возвращенный в списке ресурсов, с виртуальным адресом, по которому драйвер может получить доступ к регистрам устройств.

Например, драйверы устройств piO, которые выделяют долгосрочные буферы ввода-вывода, могут вызывать эту процедуру, чтобы сделать такие буферы доступными или сделать доступной память устройства.

Дополнительные сведения об использовании этой процедуры см. в разделе Сопоставление адресов Bus-Relative с виртуальными адресами.

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 10.
Целевая платформа Универсальное
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <=DISPATCH_LEVEL

См. также раздел

MmAllocateContiguousMemory

MmAllocateNonCachedMemory

MmMapLockedPages

MmUnmapIoSpace