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_COMMITMEM_RESERVE、MEM_FREEMEM_PRIVATEMEM_MAPPEDMEM_IMAGE)
  • 如果初始頁面沒有可用,區域中的所有頁面都是由單一呼叫 VirtualAlloc、MapViewOfFile 或下列其中一個擴充版本的這些函式所建立的相同初始配置頁面:VirtualAllocEx、VirtualAllocExNumaMapViewOfFileExMapViewOfFileExNuma
  • 授與所有頁面的存取權是相同的 (PAGE_READONLYPAGE_READWRITEPAGE_NOACCESSPAGE_WRITECOPY、PAGE_EXECUTEPAGE_EXECUTE_READ、PAGE_EXECUTE_READWRITEPAGE_EXECUTE_WRITECOPYPAGE_GUARDPAGE_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

另請參閱

GetSystemInfo

MEMORY_BASIC_INFORMATION

MapViewOfFile

記憶體管理功能

虛擬記憶體函式

VirtualQueryEx

VBS 記憶體保護區中可用的 Vertdll API