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 本机系统服务例程的 NtXxxZwXxx 版本在处理和解释输入参数的方式上的行为可能有所不同。 有关例程的 NtXxxZwXxx 版本之间的关系的详细信息,请参阅 使用本机系统服务例程的 Nt 和 Zw 版本

要求

要求
最低受支持的客户端 Windows XP
目标平台 通用
标头 ntifs.h (包括 Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

另请参阅

ZwAllocateVirtualMemory