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


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

Сопоставляет представление сопоставления файлов с адресным пространством вызывающего приложения Магазина Windows.

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

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

Синтаксис

PVOID MapViewOfFile3FromApp(
  [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

Требуемый базовый адрес представления. Адрес округляется до ближайшей границы 64 КБ.

              If this parameter is <b>NULL</b>, the system picks the base
              address.

Если 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.

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

MEM_LARGE_PAGES
0x20000000
Сопоставляет большое представление страницы. См. поддержку больших страниц.

[in] PageProtection

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

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

[in, out, optional] ExtendedParameters

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

[in] ParameterCount

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

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

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

Комментарии

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

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

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

Вы можете успешно запросить защиту исполняемого файла, только если ваше приложение имеет возможность codeGeneration .

Примеры

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

Требования

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

См. также

CreateFileMapping

Создание представления файлов

DuplicateHandle

GetSystemInfo

MapViewOfFile3

MapViewOfFileEx

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

OpenFileMapping

SYSTEM_INFO

UnmapViewOfFile