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

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

Синтаксис

NTSYSAPI NTSTATUS ZwMapViewOfSection(
  [in]                HANDLE          SectionHandle,
  [in]                HANDLE          ProcessHandle,
  [in, out]           PVOID           *BaseAddress,
  [in]                ULONG_PTR       ZeroBits,
  [in]                SIZE_T          CommitSize,
  [in, out, optional] PLARGE_INTEGER  SectionOffset,
  [in, out]           PSIZE_T         ViewSize,
  [in]                SECTION_INHERIT InheritDisposition,
  [in]                ULONG           AllocationType,
  [in]                ULONG           Win32Protect
);

Параметры

[in] SectionHandle

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

[in] ProcessHandle

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

[in, out] BaseAddress

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

[in] ZeroBits

Указывает число битов адресов высокого порядка, которые должны быть равны нулю в базовом адресе представления разделов. Значение этого параметра должно быть меньше 21 и используется только в том случае, если baseAddress имеет значение NULL, иными словами, когда вызывающий объект позволяет системе определить, где следует выделить представление.

[in] CommitSize

Задает размер (в байтах) изначально зафиксированной области представления. CommitSize имеет смысл только для разделов на основе файла подкачки и округляется до ближайшего, кратного PAGE_SIZE. (Для разделов, которые сопоставляют файлы, данные и изображение фиксируются во время создания раздела.)

[in, out, optional] SectionOffset

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

[in, out] ViewSize

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

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

[in] InheritDisposition

Указывает способ совместного использования представления с дочерними процессами. Вы можете выбрать

ViewShare

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

ViewUnmap

Представление не будет сопоставлено с дочерними процессами.

Драйверы обычно указывают ViewUnmap для этого параметра.

[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] Win32Protect

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

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

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

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

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

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

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

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

Комментарии

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

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

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

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

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

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

Требования

Требование Значение
Целевая платформа Универсальное
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Правила соответствия DDI HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm)

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

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

ZwCreateSection

ZwOpenSection

ZwMapViewOfSectionEx

ZwUnmapViewOfSection

MapViewOfFile3