Функция AllocateUserPhysicalPagesNuma (memoryapi.h)
Выделяет страницы физической памяти для сопоставления и отмены сопоставления в любой области расширений адресного окна (AWE) указанного процесса и задает узел NUMA для физической памяти.
Синтаксис
BOOL AllocateUserPhysicalPagesNuma(
[in] HANDLE hProcess,
[in, out] PULONG_PTR NumberOfPages,
[out] PULONG_PTR PageArray,
[in] DWORD nndPreferred
);
Параметры
[in] hProcess
Дескриптор процесса.
Функция выделяет память, которая впоследствии может быть сопоставлена в виртуальном адресном пространстве этого процесса. Дескриптор должен иметь право доступа PROCESS_VM_OPERATION . Дополнительные сведения см. в разделе Управление правами на доступ и безопасность процесса.
[in, out] NumberOfPages
Размер выделяемой физической памяти в страницах.
Чтобы определить размер страницы компьютера, используйте функцию GetSystemInfo . В выходных данных этот параметр получает количество фактически выделенных страниц, которое может быть меньше запрошенного числа.
[out] PageArray
Указатель на массив для хранения номеров кадров страницы выделенной памяти.
Размер выделенного массива должен быть по крайней мере равен NumberOfPages , кратным размеру ULONG_PTR типа данных.
[in] nndPreferred
Узел NUMA, где должна находиться физическая память.
Возвращаемое значение
Если функция выполнена успешно, возвращается значение TRUE.
Можно выделить меньше страниц, чем запрошено. Вызывающий объект должен проверка значение параметра NumberOfPages при возвращении, чтобы увидеть, сколько страниц выделено. Все выделенные номера кадров страниц последовательно помещаются в память, на которую указывает параметр PageArray .
Если функция завершается сбоем, возвращается значение FALSE и кадры не выделяются. Чтобы получить расширенные сведения об ошибке, вызовите функцию GetLastError .
Комментарии
Функция AllocateUserPhysicalPagesNuma используется для выделения физической памяти в узле NUMA, которая впоследствии может быть сопоставлена в виртуальном адресном пространстве процесса. В маркере вызывающего объекта должна быть включена привилегия SeLockMemoryPrivilege , в противном случае функция завершится сбоем с ERROR_PRIVILEGE_NOT_HELD. Дополнительные сведения см. в разделе Константы привилегий.
Память, выделенная этой функцией, должна физически присутствовать в системе. После выделения памяти она блокируется и становится недоступной для остальной части системы управления виртуальной памятью.
Физические страницы не могут одновременно сопоставляться по нескольким виртуальным адресам.
Физические страницы могут находиться по любому физическому адресу. Не следует делать никаких предположений относительно непрерывности физических страниц.
Чтобы скомпилировать приложение, использующее эту функцию, определите _WIN32_WINNT как 0x0600 или более поздней версии.
Требования
Минимальная версия клиента | Windows Vista [только классические приложения] |
Минимальная версия сервера | Windows Server 2008 [только классические приложения] |
Целевая платформа | Windows |
Header | memoryapi.h (включая Windows.h, Memoryapi.h) |
Библиотека | onecore.lib |
DLL | Kernel32.dll |