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 KB 地址边界。
[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 属性创建的 section 对象,PageProtection 参数不起作用,可以设置为任何有效值,例如PAGE_READONLY。
对于使用 SEC_IMAGE_NO_EXECUTE 属性创建的 section 对象,必须将 PageProtection 值设置为 PAGE_READONLY。
对于非图像部分,PageProtection 参数的值必须与调用 ZwCreateSection 时指定的节的页面保护兼容。
ZwMapViewOfSectionEx 始终设置映射页的缓存类型,以匹配创建节对象时提供的缓存类型。 例如,如果使用 SEC_NOCACHE 标志调用 ZwCreateSection,则无论 PageProtection 参数是否包含PAGE_NOCACHE标志, ZwMapViewOfSectionEx 都将映射未缓存的页面。
[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 值映射相同的内存范围。
用户应用程序不能从 Windows Server 2003 Service Pack 1 (SP1) 直接访问 \Device\PhysicalMemory ,并且仅当驱动程序将句柄传递给应用程序时才能访问它。
有关节对象的详细信息,请参阅 Section 对象和视图。
如果在用户模式下调用此函数,则应使用名称“NtMapViewOfSectionEx”而不是“ZwMapViewOfSectionEx”。
对于来自内核模式驱动程序的调用,Windows Native System Services 例程的 NtXxx 和 ZwXxx 版本在处理和解释输入参数的方式上的行为可能有所不同。 有关例程的 NtXxx 和 ZwXxx 版本之间的关系的详细信息,请参阅 使用本机系统服务例程的 Nt 和 Zw 版本。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 11,版本 24H2 |
标头 | wdm.h |