Bagikan melalui


Fungsi VirtualProtectEx (memoryapi.h)

Mengubah perlindungan pada wilayah halaman yang diterapkan di ruang alamat virtual dari proses tertentu.

Sintaks

BOOL VirtualProtectEx(
  [in]  HANDLE hProcess,
  [in]  LPVOID lpAddress,
  [in]  SIZE_T dwSize,
  [in]  DWORD  flNewProtect,
  [out] PDWORD lpflOldProtect
);

Parameter

[in] hProcess

Handel untuk proses yang perlindungan memorinya akan diubah. Handel harus memiliki hak akses PROCESS_VM_OPERATION . Untuk informasi selengkapnya, lihat Keamanan Proses dan Hak Akses.

[in] lpAddress

Penunjuk ke alamat dasar 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 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 perlindungan akses sebelumnya dari halaman pertama di wilayah halaman yang ditentukan. Jika parameter ini NULL atau tidak menunjuk ke variabel yang valid, fungsi gagal.

Nilai kembali

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

Nilai perlindungan akses hanya dapat diatur 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 VirtualProtectEx 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

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

Fungsi Manajemen Memori

Konstanta Perlindungan Memori

Fungsi Memori Virtual

VirtualAlloc

Perlindungan Virtual

VirtualQueryEx