Функция 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_LARGE_PAGES, MEM_RESERVE и MEM_TOP_DOWN. Хотя MEM_COMMIT не допускается, оно подразумевается, если не указано MEM_RESERVE. Дополнительные сведения о флагах MEM_XXX см . в описании подпрограммы VirtualAlloc .

[in] Win32Protect

Указывает тип защиты для области изначально зафиксированных страниц. Драйверы устройств и промежуточных водителей должны установить для этого значения значение PAGE_READWRITE.

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

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

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

Комментарии

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

Если указанный раздел не существует или запрошенный доступ запрещен, функция ZwMapViewOfSection возвращает ошибку.

Не используйте ZwMapViewOfSection для сопоставления диапазона памяти из \Device\PhysicalMemory в режим пользователя, если драйвер не выделил диапазон памяти напрямую с помощью MmAllocatePagesForMdl или другого метода, гарантирующего, что ни один другой системный компонент не сопоставил тот же диапазон памяти с другим значением 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)

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

MEMORY_CACHING_TYPE

MmAllocatePagesForMdl

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

VirtualAlloc

ZwCurrentProcess

ZwOpenSection

ZwUnmapViewOfSection