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”。

对于内核模式驱动程序的调用,NtXxxZwXxx 版本的 Windows 本机系统服务例程的行为方式可能以不同的方式处理和解释输入参数。 有关 NtXxxZwXxx 例程之间的关系的详细信息,请参阅 使用 Nt 和 Zw 版本的本机系统服务例程

要求

要求 价值
最低支持的客户端 Windows XP
目标平台 普遍
标头 ntifs.h (include Ntifs.h)
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

另请参阅

ZwAllocateVirtualMemory