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


Функция ZwMapViewOfSectionEx (wdm.h)

Подпрограмма ZwMapViewOfSectionEx сопоставляет представление раздела с виртуальным адресным пространством процесса субъекта.

Синтаксис

NTSYSAPI NTSTATUS ZwMapViewOfSectionEx(
  [in]                HANDLE                  SectionHandle,
  [in]                HANDLE                  ProcessHandle,
  [in, out]           PVOID                   *BaseAddress,
  [in, out, optional] PLARGE_INTEGER          SectionOffset,
  [in, out]           PSIZE_T                 ViewSize,
  [in]                ULONG                   AllocationType,
  [in]                ULONG                   PageProtection,
  [in, out, optional] PMEM_EXTENDED_PARAMETER ExtendedParameters,
  [in]                ULONG                   ExtendedParameterCount
);

Параметры

[in] SectionHandle

Дескриптор объекта section. Этот дескриптор создается путем успешного вызова ZwCreateSection или ZwOpenSection.

[in] ProcessHandle

Дескриптор объекта , представляющего процесс, с которым должно быть сопоставлено представление. Используйте макрос ZwCurrentProcess , чтобы указать текущий процесс. Дескриптор должен быть открыт с PROCESS_VM_OPERATION доступом.

[in, out] BaseAddress

Указатель на переменную, которая получает базовый адрес представления. Если значение этого параметра не равно NULL, представление выделяется, начиная с указанного виртуального адреса, округленного до следующей границы 64-килобайтового адреса.

[in, out, optional] SectionOffset

Указатель на переменную, получающую смещение в байтах от начала раздела до представления. Если этот указатель не равен NULL, смещение округляется до следующей границы размера распределения и детализации.

[in, out] ViewSize

Указатель на переменную SIZE_T. Если начальное значение этой переменной равно нулю, ZwMapViewOfSectionEx сопоставляет представление раздела, которое начинается с SectionOffset и продолжается до конца раздела. В противном случае начальное значение указывает размер представления в байтах. ZwMapViewOfSectionEx всегда округляет это значение до ближайшего значения, кратного PAGE_SIZE перед сопоставлением представления.

При возврате значение получает фактический размер представления (в байтах).

[in] AllocationType

Задает набор флагов, описывающий тип выделения, выполняемого для указанной области страниц. Допустимые флаги: MEM_RESERVE, MEM_TOP_DOWN, MEM_LARGE_PAGES, MEM_DIFFERENT_IMAGE_BASE_OK и MEM_REPLACE_PLACEHOLDER. Хотя MEM_COMMIT не допускается, оно подразумевается, если не указано MEM_RESERVE. Дополнительные сведения о флагах MEM_XXX см. в описании подпрограмм VirtualAlloc и MapViewOfFile3 .

[in] PageProtection

Указывает защиту страницы , применяемую к сопоставленным представлениям.

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

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

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

ZwMapViewOfSectionEx всегда задает тип кэша сопоставленных страниц в соответствии с типом кэша, предоставленным при создании объекта section. Например, если ZwCreateSection был вызван с флагом SEC_NOCACHE, ZwMapViewOfSectionEx будет сопоставлять некэшированные страницы независимо от того, включает ли параметр PageProtection флаг PAGE_NOCACHE или нет.

[in, out, optional] ExtendedParameters

Необязательный указатель на один или несколько расширенных параметров типа MEM_EXTENDED_PARAMETER. Дополнительные сведения о расширенных параметрах см. в описании подпрограммы MapViewOfFile3 .

[in] ExtendedParameterCount

Указывает количество элементов в массиве ExtendedParameters.

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

ZwMapViewOfSectionEx возвращает значение NTSTATUS. Возможные возвращаемые значения:

Код возврата Описание
STATUS_SUCCESS Подпрограмма успешно выполнила запрошенную операцию.
STATUS_CONFLICTING_ADDRESSES Указанный диапазон адресов конфликтует с диапазоном, который уже зарезервирован.
STATUS_INVALID_PAGE_PROTECTION Недопустимое значение, указанное для параметра PageProtection .
STATUS_SECTION_PROTECTION Значение, указанное для параметра PageProtection , несовместимо с защитой страницы, указанной при создании раздела.

Комментарии

Несколько различных представлений раздела можно одновременно сопоставить с виртуальным адресным пространством одного или нескольких процессов.

Не используйте ZwMapViewOfSectionEx для сопоставления диапазона памяти из \Device\PhysicalMemory в пользовательский режим, если драйвер не выделил диапазон памяти напрямую через MmAllocatePagesForMdlEx или другой метод, гарантирующий, что ни один другой системный компонент не сопоставил тот же диапазон памяти с другим значением MEMORY_CACHING_TYPE .

Пользовательские приложения не могут получить доступ к \Device\PhysicalMemory непосредственно, начиная с Windows Server 2003 с пакетом обновления 1 (SP1), и могут получить к нему доступ только в том случае, если драйвер передает дескриптор приложению.

Дополнительные сведения об объектах раздела см. в разделе Объекты раздела и представления.

Если вызов этой функции выполняется в пользовательском режиме, следует использовать имя "NtMapViewOfSectionEx" вместо "ZwMapViewOfSectionEx".

Для вызовов из драйверов режима ядра версии NtXxx и ZwXxx подпрограммы Собственные системные службы Windows могут вести себя по-разному, так как они обрабатывают и интерпретируют входные параметры. Дополнительные сведения о связи между версиями подпрограмм NtXxx и ZwXxx см. в разделе Использование версий NT и Zw подпрограмм собственных системных служб.

Требования

Требование Значение
Минимальная версия клиента Windows 11, версия 24H2
Верхняя часть wdm.h

См. также раздел

Использование версий nt и Zw собственных системных служб

ZwCreateSection

ZwOpenSection

ZwMapViewOfSection

ZwUnmapViewOfSection

MapViewOfFile3