Fungsi VirtualProtect (memoryapi.h)
Mengubah perlindungan pada wilayah halaman yang diterapkan di ruang alamat virtual proses panggilan.
Untuk mengubah perlindungan akses dari proses apa pun, gunakan fungsi VirtualProtectEx .
Sintaks
BOOL VirtualProtect(
[in] LPVOID lpAddress,
[in] SIZE_T dwSize,
[in] DWORD flNewProtect,
[out] PDWORD lpflOldProtect
);
Parameter
[in] lpAddress
Alamat halaman awal wilayah halaman yang atribut perlindungan aksesnya akan diubah.
Semua halaman di wilayah yang ditentukan harus berada dalam wilayah cadangan yang sama yang dialokasikan saat memanggil fungsi VirtualAlloc atau VirtualAllocEx menggunakan MEM_RESERVE. Halaman tidak dapat mencakup wilayah cadangan yang berdekatan yang dialokasikan oleh panggilan terpisah ke VirtualAlloc atau VirtualAllocEx menggunakan MEM_RESERVE.
[in] dwSize
Ukuran wilayah yang atribut perlindungan aksesnya akan diubah, dalam byte. Wilayah halaman yang terpengaruh mencakup semua halaman yang berisi satu atau beberapa byte dalam rentang dari parameter lpAddress ke (lpAddress+dwSize)
. Ini berarti bahwa rentang 2-byte yang terdampar pada batas halaman menyebabkan atribut perlindungan kedua halaman diubah.
[in] flNewProtect
Opsi perlindungan memori. Parameter ini bisa menjadi salah satu konstanta perlindungan memori.
Untuk tampilan yang dipetakan, nilai ini harus kompatibel dengan perlindungan akses yang ditentukan saat tampilan dipetakan (lihat MapViewOfFile, MapViewOfFileEx, dan MapViewOfFileExNuma).
[out] lpflOldProtect
Penunjuk ke variabel yang menerima nilai perlindungan akses sebelumnya dari halaman pertama di wilayah halaman yang ditentukan. Jika parameter ini NULL atau tidak menunjuk ke variabel yang valid, fungsi gagal.
Menampilkan nilai
Jika fungsi berhasil, nilai yang dikembalikan bukan nol.
Jika fungsi gagal, nilai yang dikembalikan adalah nol. Untuk mendapatkan informasi kesalahan yang diperluas, hubungi GetLastError.
Keterangan
Anda hanya dapat mengatur nilai perlindungan akses pada halaman yang diterapkan. Jika status halaman apa pun di wilayah yang ditentukan tidak diterapkan, fungsi gagal dan kembali tanpa mengubah perlindungan akses halaman apa pun di wilayah yang ditentukan.
Pengubah perlindungan PAGE_GUARD membuat halaman penjaga. Halaman penjaga bertindak sebagai alarm akses satu bidikan. Untuk informasi selengkapnya, lihat Membuat Halaman Penjaga.
Yang terbaik adalah menghindari penggunaan VirtualProtect untuk mengubah perlindungan halaman pada blok memori yang dialokasikan oleh GlobalAlloc, HeapAlloc, atau LocalAlloc, karena beberapa blok memori dapat ada pada satu halaman. Manajer timbunan mengasumsikan bahwa semua halaman dalam tumpukan memberikan setidaknya akses baca dan tulis.
Saat melindungi wilayah yang akan dapat dieksekusi, program panggilan bertanggung jawab untuk memastikan koherensi cache melalui panggilan yang sesuai ke FlushInstructionCache setelah kode ditetapkan. Jika tidak, upaya untuk mengeksekusi kode dari wilayah yang baru dieksekusi dapat menghasilkan hasil yang tidak dapat diprediksi.
Persyaratan
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 |