Share via


VirtualQueryEx 函式 (memoryapi.h)

擷取指定進程之虛擬位址空間內頁面範圍的相關資訊。

語法

SIZE_T VirtualQueryEx(
  [in]           HANDLE                    hProcess,
  [in, optional] LPCVOID                   lpAddress,
  [out]          PMEMORY_BASIC_INFORMATION lpBuffer,
  [in]           SIZE_T                    dwLength
);

參數

[in] hProcess

查詢其記憶體資訊的處理常式控制碼。 控制碼必須以 PROCESS_QUERY_INFORMATION 存取權限開啟,讓使用控制碼從進程物件讀取資訊。 如需詳細資訊,請參閱 處理安全性和存取權限

[in, optional] lpAddress

要查詢之頁面區域的基底位址指標。 這個值會四捨五入至下一個頁面界限。 若要判斷主機電腦上的頁面大小,請使用 GetSystemInfo 函式。

如果 lpAddress 指定進程可存取的最高記憶體位址上方的位址,則函式會失敗, 並ERROR_INVALID_PARAMETER

[out] lpBuffer

傳回指定頁面範圍相關資訊 之MEMORY_BASIC_INFORMATION 結構的指標。

[in] dwLength

lpBuffer參數所指向的緩衝區大小,以位元組為單位。

傳回值

傳回值是資訊緩衝區中傳回的實際位元組數目。

如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。 可能的錯誤值包括 ERROR_INVALID_PARAMETER

備註

VirtualQueryEx 提供連續頁面區域的相關資訊,從共用下列屬性的指定位址開始:

  • 所有頁面的狀態都相同 (MEM_COMMITMEM_RESERVEMEM_FREE、MEM_PRI加值稅EMEM_MAPPEDMEM_IMAGE)
  • 如果初始頁面沒有可用,區域中的所有頁面都是由單一呼叫 VirtualAlloc、MapViewOfFile或下列其中一個擴充版本的這些函式所建立之頁面的相同初始配置:VirtualAllocExVirtualAllocExNumaMapViewOfFileEx、MapViewOfFileExNuma
  • 授與所有頁面的存取權相同 (PAGE_READONLY、PAGE_READWRITEPAGE_NOACCESSPAGE_WRITECOPYPAGE_EXECUTE、PAGE_EXECUTE_READ、PAGE_EXECUTE_READWRITE、PAGE_EXECUTE_WRITECOPY、PAGE_GUARDPAGE_NOCACHE)
VirtualQueryEx函式會決定區域中第一頁的屬性,然後掃描後續的頁面,直到掃描整個頁面範圍,或直到遇到具有非相符屬性集的頁面為止。 函式會以位元組為單位傳回具有相符屬性的頁面區域屬性和大小。 例如,如果可用記憶體的 40 MB (MB) 區域,且 VirtualQueryEx 會在 10 MB 的頁面上呼叫,則函式會取得 MEM_FREE 狀態,且大小為 30 MB。

如果修改了共用寫入時複製頁面,它就會變成修改頁面的程式私用。 不過,VirtualQueryEx函式會繼續針對資料檢視) MEM_MAPPED (或MEM_IMAGE (來報告可執行影像檢視) 而不是MEM_PRI加值稅E等頁面。 若要偵測特定頁面是否已發生寫入複製,請使用VirtualLock函式存取頁面或將其鎖定,以確定頁面位於記憶體中,然後使用QueryWorkingSet 或 QueryWorkingSetEx函式檢查頁面延伸工作集資訊中的共用位。 如果 共用 位清楚,則頁面為私用。

需求

   
最低支援的用戶端 Windows XP [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2003 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 memoryapi.h (包括 Windows.h、Memoryapi.h)
程式庫 onecore.lib
DLL Kernel32.dll

另請參閱

GetSystemInfo

MEMORY_BASIC_INFORMATION

MapViewOfFileEx

記憶體管理功能

虛擬記憶體函式

VirtualAllocEx

VirtualProtectEx