ZwFlushVirtualMemory 函数 (ntifs.h)
ZwFlushVirtualMemory 例程在指定进程的虚拟地址空间中刷新一系列虚拟地址,如果已修改,这些虚拟地址映射到数据文件,则回退到数据文件。
语法
NTSYSAPI NTSTATUS ZwFlushVirtualMemory(
[in] HANDLE ProcessHandle,
[in, out] PVOID *BaseAddress,
[in, out] PSIZE_T RegionSize,
[out] PIO_STATUS_BLOCK IoStatus
);
参数
[in] ProcessHandle
要刷新的页面驻留在其上下文中的进程的打开句柄。 使用 Ntddk.h 中定义的 NtCurrentProcess 宏指定当前进程。
[in, out] BaseAddress
指向虚拟地址范围的基址的指针。
在输入时,此参数指定指向要刷新的页区域基址的初始值的指针。
返回时,此参数提供指向将接收刷新区域的基址的变量的指针。
[in, out] RegionSize
虚拟地址范围的大小(以字节为单位)。
在输入时,此参数指定一个指针,指向要刷新到磁盘的页区域的大小的初始值(以字节为单位)。 此参数由 ZwFlushVirtualMemory 向上舍入到下一个主机页大小边界。 如果将此值指定为零,则会刷新从基址到范围末尾的映射范围。
返回时,此参数指定指向变量的指针,该变量将接收页面刷新区域的实际大小(以字节为单位)。
[out] IoStatus
指向 IO_STATUS_BLOCK 结构的指针。 在此结构中,上次尝试的 I/O 操作的 I/O 状态值存储在输出中。
返回值
ZwFlushVirtualMemory 返回STATUS_SUCCESS或错误状态代码。 可能的错误状态代码包括以下内容:
返回代码 | 说明 |
---|---|
STATUS_ACCESS_DENIED | 指定的 ProcessHandle 参数不是有效的进程句柄。 |
STATUS_INSUFFICIENT_RESOURCES | 此函数所需的其他资源不可用。 |
STATUS_INVALID_PARAMETER_2 | 指定的 BaseAddress 是虚拟地址空间中的无效地址,或者 RegionSize 无效。 |
STATUS_INVALID_HANDLE | 指定的 ProcessHandle 参数不是有效的进程句柄。 |
STATUS_NOT_MAPPED_VIEW | 无法为提供的 BaseAddress 找到虚拟地址空间描述符。 |
STATUS_PROCESS_IS_TERMINATING | 已删除进程和关联的虚拟地址空间。 |
STATUS_FILE_LOCK_CONFLICT | 文件系统遇到锁定冲突。 |
注解
此例程接受虚拟内存中映射数据文件的地址范围作为输入参数。 如果在将文件复制到内存后修改了此范围中的任何内存,则例程会将此内存刷新回数据文件。
有关内核模式驱动程序的内存管理支持的详细信息,请参阅 Windows 驱动程序的内存管理。
注意
如果在用户模式下调用 ZwFlushVirtualMemory 函数,则应使用名称“NtFlushVirtualMemory”而不是“ZwFlushVirtualMemory”。
对于来自内核模式驱动程序的调用,Windows 本机系统服务例程的 NtXxx 和 ZwXxx 版本在处理和解释输入参数的方式上的行为可能有所不同。 有关例程的 NtXxx 和 ZwXxx 版本之间的关系的详细信息,请参阅 使用本机系统服务例程的 Nt 和 Zw 版本。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP |
目标平台 | 通用 |
标头 | ntifs.h (包括 Ntifs.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |