Функция 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 собственных процедур системных служб