Функция AllocateUserPhysicalPages (memoryapi.h)

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

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

Синтаксис

BOOL AllocateUserPhysicalPages(
  [in]      HANDLE     hProcess,
  [in, out] PULONG_PTR NumberOfPages,
  [out]     PULONG_PTR PageArray
);

Параметры

[in] hProcess

Дескриптор процесса.

Функция выделяет память, которая впоследствии может быть сопоставлена в виртуальном адресном пространстве этого процесса. Дескриптор должен иметь право доступа PROCESS_VM_OPERATION . Дополнительные сведения см. в разделе Обработка прав на безопасность и доступ.

[in, out] NumberOfPages

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

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

[out] PageArray

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

Размер выделенного массива должен быть не меньше , чем NumberOfPages , раз больше размера ULONG_PTR типа данных.

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

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

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

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

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

Комментарии

Функция AllocateUserPhysicalPages используется для выделения физической памяти, которая впоследствии может быть сопоставлена в виртуальном адресном пространстве процесса. Привилегия SeLockMemoryPrivilege должна быть включена в маркере вызывающего объекта, иначе функция завершится сбоем с ERROR_PRIVILEGE_NOT_HELD. Дополнительные сведения см. в разделе Константы привилегий.

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

Физические страницы не могут одновременно сопоставляться по нескольким виртуальным адресам.

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

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

Функция AllocateUserPhysicalPages2, добавленная в пакет SDK в более позднем выпуске, аналогична функции AllocateUserPhysicalPages , но добавляет параметры ExtendedParameters и ExtendedParameterCount .

Примеры

Пример см. в разделе Пример AWE.

Требования

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

См. также

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

AllocateUserPhysicalPagesNuma

FreeUserPhysicalPages

MapUserPhysicalPages

MapUserPhysicalPagesScatter

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

AllocateUserPhysicalPages2