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”。
对于内核模式驱动程序的调用,NtXxx 和 ZwXxx 版本的 Windows 本机系统服务例程的行为方式可能以不同的方式处理和解释输入参数。 有关 NtXxx 与 ZwXxx 例程之间的关系的详细信息,请参阅 使用 Nt 和 Zw 版本的本机系统服务例程。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows XP |
目标平台 | 普遍 |
标头 | ntifs.h (include Ntifs.h) |
库 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |