virtualQuery 函式 (memoryapi.h)
擷取呼叫進程虛擬位址空間中某個頁面範圍的相關信息。
若要擷取另一個進程位址空間中某個頁面範圍的相關信息,請使用 VirtualQueryEx 函 式。
語法
SIZE_T VirtualQuery(
[in, optional] LPCVOID lpAddress,
[out] PMEMORY_BASIC_INFORMATION lpBuffer,
[in] SIZE_T dwLength
);
參數
[in, optional] lpAddress
要查詢之頁面區域的基位址指標。 此值會進位至下一個頁面界限。 若要判斷主計算機上的頁面大小,請使用 GetSystemInfo 函式。
如果 lpAddress 指定進程可存取的最高記憶體位址上方的位址,則函式會失敗並 ERROR_INVALID_PARAMETER。
[out] lpBuffer
MEMORY_BASIC_INFORMATION 結構的指標,其中會傳回指定之頁面範圍的相關信息。
[in] dwLength
lpBuffer 參數所指向的緩衝區大小,以位元組為單位。
傳回值
傳回值是信息緩衝區中傳回的實際位元組數目。
如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。 可能的錯誤值包括 ERROR_INVALID_PARAMETER。
備註
VirtualQuery 提供連續頁面區域的相關信息,從共用下列屬性的指定地址開始:
- 所有頁面的狀態都相同 (MEM_COMMIT、MEM_RESERVE、MEM_FREE、MEM_PRIVATE、MEM_MAPPED或MEM_IMAGE) 。
- 如果初始頁面沒有可用,區域中的所有頁面都是由單一呼叫 VirtualAlloc、MapViewOfFile 或下列其中一個擴充版本的這些函式所建立的相同初始配置頁面:VirtualAllocEx、VirtualAllocExNuma、MapViewOfFileEx、MapViewOfFileExNuma。
- 授與所有頁面的存取權是相同的 (PAGE_READONLY、PAGE_READWRITE、PAGE_NOACCESS、PAGE_WRITECOPY、PAGE_EXECUTE、PAGE_EXECUTE_READ、PAGE_EXECUTE_READWRITE、PAGE_EXECUTE_WRITECOPY、PAGE_GUARD或PAGE_NOCACHE) 。
函式會決定區域中第一頁的屬性,然後掃描後續頁面,直到掃描整個頁面範圍,或直到遇到具有一組不相符屬性的頁面為止。 函式會以位元組為單位傳回具有相符屬性的頁面區域屬性和大小。 例如,如果可用記憶體的頁面上有 40 MB (MB) 區域,而且在 10 MB 的區域中呼叫 VirtualQuery ,則函式會取得 MEM_FREE 狀態,且大小為 30 MB。
如果修改了寫入時共用複本頁面,它就會變成修改頁面的程式私用。 不過,VirtualQuery 函式會繼續針對數據檢視 ) MEM_MAPPED ( 或可執行檔影像檢視) MEM_IMAGE (等頁面,而不是MEM_PRIVATE。 若要偵測特定頁面是否已發生寫入複製,請使用 VirtualLock 函式來存取頁面,或使用 VirtualLock 函式鎖定頁面,以確定頁面位於記憶體中,然後使用 QueryWorkingSetEx 函式來檢查頁面擴充工作集資訊中的 共用 位。 如果 共用 位已清除,則頁面為私人。
此函式會報告呼叫進程記憶體中頁面的區域,而 VirtualQueryEx 函式會報告指定進程記憶體中頁面的區域。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows Server 2003 [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | memoryapi.h (包括 Windows.h、Memoryapi.h) |
程式庫 | onecore.lib |
DLL | Kernel32.dll |