Bagikan melalui


Fungsi VirtualQuery (memoryapi.h)

Mengambil informasi tentang rentang halaman di ruang alamat virtual proses panggilan.

Untuk mengambil informasi tentang rentang halaman di ruang alamat proses lain, gunakan fungsi VirtualQueryEx .

Sintaks

SIZE_T VirtualQuery(
  [in, optional] LPCVOID                   lpAddress,
  [out]          PMEMORY_BASIC_INFORMATION lpBuffer,
  [in]           SIZE_T                    dwLength
);

Parameter

[in, optional] lpAddress

Penunjuk ke alamat dasar wilayah halaman yang akan dikueri. Nilai ini dibulatkan ke bawah ke batas halaman berikutnya. Untuk menentukan ukuran halaman di komputer host, gunakan fungsi GetSystemInfo .

Jika lpAddress menentukan alamat di atas alamat memori tertinggi yang dapat diakses oleh proses, fungsi gagal dengan ERROR_INVALID_PARAMETER.

[out] lpBuffer

Penunjuk ke struktur MEMORY_BASIC_INFORMATION di mana informasi tentang rentang halaman yang ditentukan dikembalikan.

[in] dwLength

Ukuran buffer yang diacu oleh parameter lpBuffer , dalam byte.

Nilai kembali

Nilai yang dikembalikan adalah jumlah aktual byte yang dikembalikan dalam buffer informasi.

Jika fungsi gagal, nilai yang dikembalikan adalah nol. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError. Kemungkinan nilai kesalahan termasuk ERROR_INVALID_PARAMETER.

Keterangan

VirtualQuery menyediakan informasi tentang wilayah halaman berturut-turut yang dimulai pada alamat tertentu yang berbagi atribut berikut:

  • Status semua halaman sama (MEM_COMMIT, MEM_RESERVE, MEM_FREE, MEM_PRIVATE, MEM_MAPPED, atau MEM_IMAGE).
  • Jika halaman awal tidak gratis, semua halaman di wilayah tersebut adalah bagian dari alokasi awal halaman yang sama yang dibuat oleh satu panggilan ke VirtualAlloc, MapViewOfFile, atau salah satu versi fungsi yang diperluas berikut: VirtualAllocEx, VirtualAllocExNuma, MapViewOfFileEx, MapViewOfFileExNuma.
  • Akses yang diberikan ke semua halaman sama (PAGE_READONLY, PAGE_READWRITE, PAGE_NOACCESS, PAGE_WRITECOPY, PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE, PAGE_EXECUTE_WRITECOPY, PAGE_GUARD, atau PAGE_NOCACHE).

Fungsi menentukan atribut halaman pertama di wilayah tersebut lalu memindai halaman berikutnya hingga memindai seluruh rentang halaman atau sampai menemukan halaman dengan sekumpulan atribut yang tidak cocok. Fungsi mengembalikan atribut dan ukuran wilayah halaman dengan atribut yang cocok, dalam byte. Misalnya, jika ada wilayah memori bebas 40 megabyte (MB), dan VirtualQuery dipanggil pada halaman yang 10 MB ke wilayah tersebut, fungsi akan mendapatkan status MEM_FREE dan ukuran 30 MB.

Jika halaman salin-tulis bersama dimodifikasi, halaman tersebut menjadi privat untuk proses yang memodifikasi halaman. Namun, fungsi VirtualQuery akan terus melaporkan halaman seperti MEM_MAPPED (untuk tampilan data) atau MEM_IMAGE (untuk tampilan gambar yang dapat dieksekusi) daripada MEM_PRIVATE. Untuk mendeteksi apakah copy-on-write telah terjadi untuk halaman tertentu, akses halaman atau kunci menggunakan fungsi VirtualLock untuk memastikan halaman berada dalam memori, lalu gunakan fungsi QueryWorkingSetEx untuk memeriksa bit Bersama di informasi set kerja yang diperluas untuk halaman tersebut. Jika bit Bersama jelas, halaman bersifat privat.

Fungsi ini melaporkan wilayah halaman dalam memori proses panggilan, dan fungsi VirtualQueryEx melaporkan wilayah halaman dalam memori proses yang ditentukan.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows XP [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows Server 2003 [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header memoryapi.h (termasuk Windows.h, Memoryapi.h)
Pustaka onecore.lib
DLL Kernel32.dll

Lihat juga

GetSystemInfo

MEMORY_BASIC_INFORMATION

MapViewOfFile

Fungsi Manajemen Memori

Fungsi Memori Virtual

VirtualQueryEx

Api Vertdll tersedia di enklave VBS