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 原生系統服務例程的 NtXxx 和 ZwXxx 版本在處理和解譯輸入參數的方式可能會有不同的行為。 如需例程 NtXxx 和 ZwXxx 版本之間的關聯性詳細資訊,請參閱 使用 Nt 和 Zw 版本的原生系統服務例程。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP |
目標平台 | Universal |
標頭 | ntifs.h (包含 Ntifs.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應