Функция 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 |