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或錯誤狀態代碼。 可能的錯誤狀態代碼包括下列專案:
傳回碼 | 描述 |
---|---|
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 原生系統服務例程,在處理和解譯輸入參數的方式上可能會有不同的行為。 如需 nt NtXxx 與 ZwXxx 例程之間關聯性的詳細資訊,請參閱 使用 Nt 和 Zw 版本的原生系統服務例程。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows XP |
目標平臺 | 普遍 |
標頭 | ntifs.h (include Ntifs.h) |
連結庫 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |