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


Функция 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

Смещение от начала раздела.

Смещение должно быть выровнено в 64 кб.

[in] ViewSize

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

Размер всегда должен быть кратным размером страницы.

[in] AllocationType

Тип выделения памяти. Этот параметр может быть нулевым (0) или одним из следующих значений.

Ценность Значение
MEM_RESERVE
0x00002000
Сопоставляет зарезервированное представление.
MEM_REPLACE_PLACEHOLDER
0x00004000
Заменяет заполнитель сопоставленным представлением. Поддерживаются только представления разделов с поддержкой данных и pf (изображения, физическая память и т. д.). При замене заполнителя BaseAddress и ViewSize должны точно соответствовать заполнителю, а любая указанная MEM_ADDRESS_REQUIREMENTS структура должна состоять из всех нулей.

После замены заполнителя сопоставленным представлением, чтобы освободить сопоставленное представление обратно с заполнителем, см. параметр UnmapFlags параметра UnmapViewOfFileEx и UnmapViewOfFile2.

Заполнитель — это тип зарезервированной области памяти.

Требования к выравниванию 64k для смещения и BaseAddress не применяются при указании этого флага.

MEM_LARGE_PAGES
0x20000000
Сопоставляет представление большой страницы. Этот флаг указывает, что представление должно быть сопоставлено с помощью поддержки больших страниц. Размер представления должен быть кратным размером большой страницы, сообщаемой функцией GetLargePageMinimum, а объект сопоставления файлов должен быть создан с помощью параметра SEC_LARGE_PAGES. Если для параметра baseAddress задано значение, отличное от NULL, то значение должно быть несколько GetLargePageMinimum.

[in] PageProtection

Требуемая защита страницы.

Для объектов сопоставления файлов, созданных с помощью атрибута SEC_IMAGE, параметр PageProtection не действует и должен иметь допустимое значение, например PAGE_READONLY.

[in, out, optional] ExtendedParameters

Необязательный указатель на один или несколько расширенных параметров типа MEM_EXTENDED_PARAMETER. Каждое из этих расширенных значений параметров может иметь поле типа MemExtendedParameterAddressRequirements или MemExtendedParameterNumaNode. Если параметр MemExtendedParameterNumaNode расширенный параметр не указан, то поведение совпадает с поведением функций VirtualAlloc/MapViewOfFile (то есть предпочтительный узел NUMA для физических страниц определяется на основе идеального процессора потока, который сначала обращается к памяти).

[in] ParameterCount

Число расширенных параметров, на которые указывает ExtendedParameters.

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

Возвращает базовый адрес сопоставленного представления в случае успешного выполнения. В противном случае возвращает NULL и состояние расширенной ошибки доступно с помощью GetLastError.

Замечания

Этот API помогает поддерживать высокопроизводительные игры и серверные приложения, которые имеют определенные требования к управлению виртуальным адресным пространством. Например, сопоставление памяти на вершине ранее зарезервированного региона; это полезно для реализации автоматического буфера круговой оболочки. Выделение памяти с определенным выравниванием; Например, чтобы приложение зафиксировать крупные или огромные области, сопоставленные со страницами по требованию.

С помощью этой функции для новых выделений можно:

  • укажите диапазон виртуального адресного пространства и ограничение выравнивания 2
  • укажите произвольное число расширенных параметров
  • укажите предпочтительный узел NUMA для физической памяти в качестве расширенного параметра.
  • укажите операцию заполнителя (в частности, замену).

Чтобы указать узел NUMA, см. параметр ExtendedParameters.

Примеры

Пример кода см. в разделе "Сценарий 1" в VirtualAlloc2.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 10 версии 1803 [только классические приложения]
минимальный поддерживаемый сервер Windows Server 2016 [только классические приложения]
целевая платформа Виндоус
заголовка memoryapi.h (включая Windows.h)
библиотеки onecore.lib
DLL Kernel32.dll

См. также

VirtualAlloc2

MapViewOfFile

MapViewOfFile2

MapViewOfFileNuma2