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
- 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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk