ZwQueryVirtualMemory 函数 (ntifs.h)
ZwQueryVirtualMemory 例程确定主题进程虚拟地址空间中页面区域的状态、保护和类型。
语法
NTSYSAPI NTSTATUS ZwQueryVirtualMemory(
[in] HANDLE ProcessHandle,
[in, optional] PVOID BaseAddress,
[in] MEMORY_INFORMATION_CLASS MemoryInformationClass,
[out] PVOID MemoryInformation,
[in] SIZE_T MemoryInformationLength,
[out, optional] PSIZE_T ReturnLength
);
参数
[in] ProcessHandle
要查询的页面所在的上下文的进程句柄。 使用 ZwCurrentProcess 宏指定当前进程。
[in, optional] BaseAddress
要查询的页区域的基址。 此值向下舍入到下一个主机页地址边界。
[in] MemoryInformationClass
要检索其相关信息的内存信息类。 目前,唯一受支持的 MEMORY_INFORMATION_CLASS 值为 MemoryBasicInformation。
[out] MemoryInformation
指向接收指定信息的缓冲区的指针。 缓冲区的格式和内容取决于 MemoryInformationClass 参数中指定的指定信息类。 当 MemoryBasicInformation 值传递到 MemoryInformationClass 时, MemoryInformation 参数值是 MEMORY_BASIC_INFORMATION 结构。
[in] MemoryInformationLength
指定内存信息缓冲区的长度(以字节为单位)。
[out, optional] ReturnLength
一个可选指针,如果指定,则接收放置在内存信息缓冲区中的字节数。
返回值
如果调用成功,则返回STATUS_SUCCESS。 如果调用失败,可能的错误代码包括:
返回代码 | 说明 |
---|---|
STATUS_INVALID_PARAMETER | 指定的基址超出了可访问地址的范围。 |
STATUS_ACCESS_DENIED | 调用方没有足够的访问权限来执行请求的操作。 |
STATUS_INFO_LENGTH_MISMATCH | MemoryInformation 缓冲区大于 MemoryInformationLength。 |
STATUS_INVALID_INFO_CLASS | MemoryBasicInformation 以外的值已传递到 MemoryInformationClass 参数。 |
注解
ZwQueryVirtualMemory 确定区域中第一页的状态,然后从基址向上扫描进程地址映射中的后续条目,直到扫描整个页面范围,或者直到遇到一组属性不匹配的页面。 将返回区域属性、具有匹配属性的页面区域长度以及相应的状态值。
如果整个页面区域没有匹配的属性集,则可以使用 ReturnLength 参数值来计算未扫描的页面区域的地址和长度。
NtQueryVirtualMemory 和 ZwQueryVirtualMemory 是同一 Windows 本机系统服务例程的两个版本。
对于来自内核模式驱动程序的调用,Windows 本机系统服务例程的 NtXxx**** 和 ZwXxx**** 版本在处理和解释输入参数的方式上的行为可能有所不同。 有关例程的 NtXxx 和 ZwXxx 版本之间的关系的详细信息,请参阅 使用本机系统服务例程的 Nt 和 Zw 版本。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 10 |
目标平台 | 通用 |
标头 | ntifs.h |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |