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

要排清頁面所在的進程開啟句柄。 使用 NtCurrentProcess 宏,定義於 Ntddk.h 中,以指定目前的進程。

[in, out] BaseAddress

虛擬位址範圍的基位址指標。

在專案上,此參數會指定要排清之頁面區域之基位址初始值的指標。

傳回時,此參數會提供變數的指標,以接收已排清區域的基位址。

[in, out] RegionSize

虛擬位址範圍的大小,以位元組為單位。

在專案上,此參數會指定要排清至磁碟之頁面區域位元組大小初始值的指標。 這個自變數會四捨五入為 ZwFlushVirtualMemory 的下一個主頁面大小界限。 如果此值指定為零,則會排清從基位址到範圍結尾的對應範圍。

傳回時,此參數會指定變數的指標,該變數會以頁面排清區域的位元組為單位接收實際大小。

[out] IoStatus

IO_STATUS_BLOCK 結構的指標。 這個結構是最後一次嘗試 I/O 作業的 I/O 狀態值儲存在輸出的位置。

傳回值

ZwFlushVirtualMemory 會傳回STATUS_SUCCESS或錯誤狀態代碼。 可能的錯誤狀態代碼包括:

傳回碼 Description
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
目標平台 Universal
標頭 ntifs.h (包含 Ntifs.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe
IRQL PASSIVE_LEVEL

另請參閱

ZwAllocateVirtualMemory