Функция 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) или одному из следующих значений.
Значение | Значение |
---|---|
|
Сопоставляет зарезервированное представление. |
|
Заменяет заполнитель сопоставленным представлением. Поддерживаются только представления разделов с поддержкой данных и pf (без изображений, физической памяти и т. д.). При замене заполнителя BaseAddress и ViewSize должны точно соответствовать заполнителю, а любая предоставленная структура MEM_ADDRESS_REQUIREMENTS должна состоять из всех нулей.
После замены заполнителя сопоставленным представлением, чтобы освободить это сопоставленное представление обратно с заполнителем, см. параметр UnmapFlagsдля UnmapViewOfFileEx и UnmapViewOfFile2. Заполнитель — это тип зарезервированной области памяти. |
|
Сопоставляет большое представление страницы. См. поддержку больших страниц. |
[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 |