Fungsi VirtualProtectFromApp (memoryapi.h)

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

Sintaks

BOOL VirtualProtectFromApp(
  [in]  PVOID  Address,
  [in]  SIZE_T Size,
  [in]  ULONG  NewProtection,
  [out] PULONG OldProtection
);

Parameter

[in] Address

Penunjuk alamat yang menjelaskan 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, VirtualAllocFromApp, atau VirtualAllocEx menggunakan MEM_RESERVE. Halaman tidak dapat menjangkau wilayah cadangan yang berdekatan yang dialokasikan oleh panggilan terpisah ke VirtualAlloc, VirtualAllocFromApp, atau VirtualAllocEx menggunakan MEM_RESERVE.

[in] Size

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 Alamat hingga (Address+Size). Ini berarti bahwa rentang 2-byte yang terdampar pada batas halaman menyebabkan atribut perlindungan kedua halaman diubah.

[in] NewProtection

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).

Konstanta berikut menghasilkan kesalahan:

  • PAGE_EXECUTE_READWRITE
  • PAGE_EXECUTE_WRITECOPY
Konstanta berikut hanya diizinkan untuk aplikasi yang memiliki kemampuan codeGeneration :
  • PAGE_EXECUTE
  • PAGE_EXECUTE_READ

[out] OldProtection

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.

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

Anda dapat memanggil VirtualProtectFromApp dari aplikasi Windows Store dengan kemampuan just-in-time (JIT) untuk menggunakan fungsionalitas JIT. Aplikasi harus menyertakan kemampuan codeGeneration dalam file manifes aplikasi untuk menggunakan kemampuan JIT.

Anda hanya dapat mengatur nilai perlindungan akses pada halaman yang diterapkan. Jika status halaman mana 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 menetapkan halaman penjaga. Halaman penjaga bertindak sebagai alarm akses satu bidikan. Untuk informasi selengkapnya, lihat Membuat Halaman Penjaga.

Yang terbaik adalah menghindari penggunaan VirtualProtectFromApp 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 heap memberikan setidaknya akses baca dan tulis.

VirtualProtectFromApp memungkinkan Anda menandai halaman sebagai dapat dieksekusi, tetapi tidak memungkinkan Anda untuk mengatur izin tulis dan eksekusi secara bersamaan.

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 dapat dieksekusi dapat menghasilkan hasil yang tidak dapat diprediksi.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 10 [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows Server 2016 [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header memoryapi.h (termasuk Windows.h)
Pustaka WindowsApp.lib
DLL Kernel32.dll

Lihat juga

Fungsi Manajemen Memori

Fungsi Memori Virtual

VirtualAllocFromApp

VirtualProtect

VirtualProtectEx