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


Функция MapUserPhysicalPagesScatter (winbase.h)

Сопоставляет ранее выделенные страницы физической памяти по указанному адресу в регионе расширений окна адресов (AWE).

64-разрядная версия Windows в системах на основе Itanium: Из-за разницы в размерах страниц MapUserPhysicalPagesScatter не поддерживается для 32-разрядных приложений.

Синтаксис

BOOL MapUserPhysicalPagesScatter(
  [in] PVOID      *VirtualAddresses,
  [in] ULONG_PTR  NumberOfPages,
  [in] PULONG_PTR PageArray
);

Параметры

[in] VirtualAddresses

Указатель на массив начальных адресов областей памяти для повторного сопоставления.

Каждая запись в VirtualAddresses должна находиться в диапазоне адресов, который функция VirtualAlloc возвращает при выделении области "Расширения окон адресов " (AWE). Значение в поле NumberOfPages указывает размер массива. Записи могут быть из нескольких регионов расширений адресных окон (AWE).

[in] NumberOfPages

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

Массив в VirtualAddresses указывает диапазон виртуальных адресов.

[in] PageArray

Указатель на массив значений, указывающий, как должна обрабатываться каждая соответствующая страница в VirtualAddresses .

Значение 0 (ноль) указывает, что соответствующая запись в VirtualAddresses должна быть несопоставлена, а все ненулевое значение должно быть сопоставлено.

Если этот параметр имеет значение NULL, то все адреса в массиве VirtualAddresses не сопоставляются.

Значение в поле NumberOfPages указывает размер массива.

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

Если функция выполнена успешно, возвращается значение TRUE.

Если функция завершается сбоем, возвращается значение FALSE, а функция не сопоставляется или не отображается — частично или иным образом. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Комментарии

Физические страницы могут быть несопоставимы, но не освобождены. Чтобы освободить физические страницы, необходимо вызвать метод FreeUserPhysicalPages .

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

Невозможно сопоставить страницы физической памяти за пределами диапазона, указанного в AllocateUserPhysicalPages. Можно сопоставить несколько регионов одновременно, но они не могут перекрываться.

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

В многопроцессорной среде эта функция поддерживает согласованность буфера аппаратного преобразования. При возвращении из этой функции все потоки на всех процессорах гарантированно увидят правильное сопоставление.

Чтобы скомпилировать приложение, использующее эту функцию, определите макрос _WIN32_WINNT как 0x0500 или более поздней версии. Дополнительные сведения см. в разделе Использование заголовков Windows.

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header winbase.h (включая Windows.h)
Библиотека Kernel32.lib
DLL Kernel32.dll

См. также

Расширения адресного окна

AllocateUserPhysicalPages

FreeUserPhysicalPages

MapUserPhysicalPages

Функции управления памятью