Функция MapViewOfFile3 (memoryapi.h)
Сопоставляет представление файла или раздела, поддерживаемого файлом страницы, в адресное пространство указанного процесса.
Синтаксис
PVOID MapViewOfFile3(
[in] HANDLE FileMapping,
[in] HANDLE Process,
[in, optional] PVOID BaseAddress,
[in] ULONG64 Offset,
[in] SIZE_T ViewSize,
[in] ULONG AllocationType,
[in] ULONG PageProtection,
[in, out, optional] MEM_EXTENDED_PARAMETER *ExtendedParameters,
[in] ULONG ParameterCount
);
Параметры
[in] FileMapping
HANDLE с разделом, который необходимо сопоставить с адресным пространством указанного процесса.
[in] Process
HANDLE процессу, в котором будет сопоставлен раздел.
[in, optional] BaseAddress
Требуемый базовый адрес представления (адрес округляется до ближайшей границы 64k).
Если этот параметр null, система выбирает базовый адрес.
Если BaseAddress не null, то все предоставленные MEM_ADDRESS_REQUIREMENTS должны состоять из всех нулей.
[in] Offset
Смещение от начала раздела.
Смещение должно быть выровнено или выровнено до GetLargePageMinimum, если MEM_LARGE_PAGES используется в AllocationType. Кроме того, смещение должно быть выровнено по размеру страницы, предоставленному VirtualAlloc2 при использовании MEM_REPLACE_PLACEHOLDER в AllocationType.
[in] ViewSize
Количество байтов для сопоставления. Значение нуля (0) указывает, что весь раздел должен быть сопоставлен.
Размер всегда должен быть кратным размером страницы.
[in] AllocationType
Тип выделения памяти. Этот параметр может быть нулевым (0) или одним из следующих значений.
Ценность | Значение |
---|---|
|
Сопоставляет зарезервированное представление. |
|
Заменяет заполнитель сопоставленным представлением. Поддерживаются только представления разделов с поддержкой данных и pf (изображения, физическая память и т. д.). При замене заполнителя BaseAddress и ViewSize должны точно соответствовать заполнителю, а любая указанная MEM_ADDRESS_REQUIREMENTS структура должна состоять из всех нулей.
После замены заполнителя сопоставленным представлением, чтобы освободить сопоставленное представление обратно с заполнителем, см. параметр UnmapFlags параметра UnmapViewOfFileEx и UnmapViewOfFile2. Заполнитель — это тип зарезервированной области памяти. Требования к выравниванию 64k для смещения и BaseAddress не применяются при указании этого флага. |
|
Сопоставляет представление большой страницы. Этот флаг указывает, что представление должно быть сопоставлено с помощью поддержки больших страниц. Размер представления должен быть кратным размером большой страницы, сообщаемой функцией GetLargePageMinimum, а объект сопоставления файлов должен быть создан с помощью параметра SEC_LARGE_PAGES. Если для параметра Требования к выравниванию 64k для смещения не применяются при указании этого флага. |
[in] PageProtection
Требуемая защита страницы.
Для объектов сопоставления файлов, созданных с помощью атрибута SEC_IMAGE, параметр PageProtection не действует и должен иметь допустимое значение, например PAGE_READONLY.
[in, out, optional] ExtendedParameters
Необязательный указатель на один или несколько расширенных параметров типа MEM_EXTENDED_PARAMETER. Каждое из этих расширенных значений параметров может иметь поле типа
[in] ParameterCount
Число расширенных параметров, на которые указывает ExtendedParameters.
Возвращаемое значение
Возвращает базовый адрес сопоставленного представления в случае успешного выполнения. В противном случае возвращает NULL и состояние расширенной ошибки доступно с помощью GetLastError.
Замечания
Этот API помогает поддерживать высокопроизводительные игры и серверные приложения, которые имеют определенные требования к управлению виртуальным адресным пространством. Например, сопоставление памяти на вершине ранее зарезервированного региона; это полезно для реализации автоматического буфера круговой оболочки. Выделение памяти с определенным выравниванием; Например, чтобы приложение зафиксировать крупные или огромные области, сопоставленные со страницами по требованию.
С помощью этой функции для новых выделений можно:
- укажите диапазон виртуального адресного пространства и ограничение выравнивания 2
- укажите произвольное число расширенных параметров
- укажите предпочтительный узел NUMA для физической памяти в качестве расширенного параметра.
- укажите операцию заполнителя (в частности, замену).
Чтобы указать узел NUMA, см. параметр
Примеры
Пример кода см. в разделе "Сценарий 1" в VirtualAlloc2.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows 10 версии 1803 [только классические приложения] |
минимальный поддерживаемый сервер | Windows Server 2016 [только классические приложения] |
целевая платформа | Виндоус |
заголовка | memoryapi.h (включая Windows.h) |
библиотеки |
onecore.lib |
DLL | Kernel32.dll |