Konstanta Perlindungan Memori
Berikut ini adalah opsi perlindungan memori; Anda harus menentukan salah satu nilai berikut saat mengalokasikan atau melindungi halaman dalam memori. Atribut perlindungan tidak dapat ditetapkan ke sebagian halaman; mereka hanya dapat ditetapkan ke seluruh halaman.
Contoh
STDMETHODIMP CExtBuffer::FInit
(
ULONG cItemMax, //@parm IN | Maximum number of items ever
ULONG cbItem, //@parm IN | Size of each item, in bytes
ULONG cbPage //@parm IN | Size of system page size (from SysInfo)
)
{
BYTE *pb;
m_cbReserved = ((cbItem *cItemMax) / cbPage + 1) *cbPage;
m_rgItem = (BYTE *) VirtualAlloc( NULL, m_cbReserved, MEM_RESERVE, PAGE_READWRITE );
if (m_rgItem == NULL)
return ResultFromScode( E_OUTOFMEMORY );
m_cbItem = cbItem;
m_dbAlloc = (cbItem / cbPage + 1) *cbPage;
pb = (BYTE *) VirtualAlloc( m_rgItem, m_dbAlloc, MEM_COMMIT, PAGE_READWRITE );
if (pb == NULL)
{
VirtualFree((VOID *) m_rgItem, 0, MEM_RELEASE );
m_rgItem = NULL;
return ResultFromScode( E_OUTOFMEMORY );
}
m_cbAlloc = m_dbAlloc;
return ResultFromScode( S_OK );
}
Contohnya dari sampel klasik Windows di GitHub.
Konstanta
Konstanta/nilai | Deskripsi |
---|---|
|
Memungkinkan eksekusi akses ke wilayah halaman yang diterapkan. Upaya untuk menulis ke wilayah yang berkomitmen menghasilkan pelanggaran akses. Bendera ini tidak didukung oleh fungsi CreateFileMapping . |
|
Memungkinkan akses eksekusi atau baca-saja ke wilayah halaman yang diterapkan. Upaya untuk menulis ke wilayah yang berkomitmen menghasilkan pelanggaran akses. Windows Server 2003 dan Windows XP: Atribut ini tidak didukung oleh fungsi CreateFileMapping hingga Windows XP dengan SP2 dan Windows Server 2003 dengan SP1. |
|
Memungkinkan akses eksekusi, baca-saja, atau baca/tulis ke wilayah halaman yang berkomitmen. Windows Server 2003 dan Windows XP: Atribut ini tidak didukung oleh fungsi CreateFileMapping hingga Windows XP dengan SP2 dan Windows Server 2003 dengan SP1. |
|
Memungkinkan akses eksekusi, baca-saja, atau salin-saat-tulis ke tampilan yang dipetakan dari objek pemetaan file. Upaya untuk menulis ke halaman copy-on-write yang diterapkan menghasilkan salinan pribadi halaman yang dibuat untuk proses tersebut. Halaman privat ditandai sebagai PAGE_EXECUTE_READWRITE, dan perubahan ditulis ke halaman baru. Bendera ini tidak didukung oleh fungsi VirtualAlloc atau VirtualAllocEx . Windows Vista, Windows Server 2003, dan Windows XP: Atribut ini tidak didukung oleh fungsi CreateFileMapping hingga Windows Vista dengan SP1 dan Windows Server 2008. |
|
Menonaktifkan semua akses ke wilayah halaman yang diterapkan. Upaya untuk membaca dari, menulis ke, atau menjalankan wilayah yang berkomitmen menghasilkan pelanggaran akses. Bendera ini tidak didukung oleh fungsi CreateFileMapping . |
|
Mengaktifkan akses baca-saja ke wilayah halaman yang diterapkan. Upaya untuk menulis ke wilayah yang berkomitmen menghasilkan pelanggaran akses. Jika Pencegahan Eksekusi Data diaktifkan, upaya untuk mengeksekusi kode di wilayah yang diterapkan menghasilkan pelanggaran akses. |
|
Mengaktifkan akses baca-saja atau baca/tulis ke wilayah halaman yang diterapkan. Jika Pencegahan Eksekusi Data diaktifkan, upaya untuk mengeksekusi kode di wilayah yang diterapkan menghasilkan pelanggaran akses. |
|
Mengaktifkan akses baca-saja atau salin-saat-tulis ke tampilan yang dipetakan dari objek pemetaan file. Upaya untuk menulis ke halaman copy-on-write yang diterapkan menghasilkan salinan pribadi halaman yang dibuat untuk proses tersebut. Halaman privat ditandai sebagai PAGE_READWRITE, dan perubahan ditulis ke halaman baru. Jika Pencegahan Eksekusi Data diaktifkan, upaya untuk mengeksekusi kode di wilayah yang diterapkan menghasilkan pelanggaran akses. Bendera ini tidak didukung oleh fungsi VirtualAlloc atau VirtualAllocEx . |
|
Mengatur semua lokasi di halaman sebagai target yang tidak valid untuk CFG. Digunakan bersama dengan perlindungan halaman eksekusi seperti PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE , dan PAGE_EXECUTE_WRITECOPY. Setiap panggilan tidak langsung ke lokasi di halaman tersebut akan gagal pemeriksaan CFG dan prosesnya akan dihentikan. Perilaku default untuk halaman yang dapat dieksekusi yang dialokasikan adalah ditandai sebagai target panggilan yang valid untuk CFG. Bendera ini tidak didukung oleh fungsi VirtualProtect atau CreateFileMapping . |
|
Halaman di wilayah tersebut tidak akan memperbarui informasi CFG mereka saat perlindungan berubah untuk VirtualProtect. Misalnya, jika halaman di wilayah dialokasikan menggunakan PAGE_TARGETS_INVALID, informasi yang tidak valid akan dipertahankan saat perlindungan halaman berubah. Bendera ini hanya valid ketika perlindungan berubah menjadi jenis yang dapat dieksekusi seperti PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE , dan PAGE_EXECUTE_WRITECOPY. Perilaku default untuk perlindungan VirtualProtect berubah menjadi dapat dieksekusi adalah menandai semua lokasi sebagai target panggilan yang valid untuk CFG. |
Berikut ini adalah pengubah yang dapat digunakan selain opsi yang disediakan dalam tabel sebelumnya, kecuali seperti yang disebutkan.
Konstanta/nilai | Deskripsi |
---|---|
|
Halaman di wilayah tersebut menjadi halaman penjaga. Setiap upaya untuk mengakses halaman penjaga menyebabkan sistem menaikkan pengecualian STATUS_GUARD_PAGE_VIOLATION dan menonaktifkan status halaman penjaga. Halaman penjaga dengan demikian bertindak sebagai alarm akses satu kali. Untuk informasi selengkapnya, lihat Membuat Halaman Penjaga. Ketika upaya akses mengarahkan sistem untuk menonaktifkan status halaman penjaga, perlindungan halaman yang mendasar mengambil alih. Jika pengecualian halaman penjaga terjadi selama layanan sistem, layanan biasanya mengembalikan indikator status kegagalan. Nilai ini tidak dapat digunakan dengan PAGE_NOACCESS. Bendera ini tidak didukung oleh fungsi CreateFileMapping . |
|
Mengatur semua halaman agar tidak dapat di-cache. Aplikasi tidak boleh menggunakan atribut ini kecuali ketika secara eksplisit diperlukan untuk perangkat. Menggunakan fungsi yang saling di-interlock dengan memori yang dipetakan dengan SEC_NOCACHE dapat menghasilkan pengecualian EXCEPTION_ILLEGAL_INSTRUCTION . Bendera PAGE_NOCACHE tidak dapat digunakan dengan bendera PAGE_GUARD, PAGE_NOACCESS, atau PAGE_WRITECOMBINE . Bendera PAGE_NOCACHE hanya dapat digunakan saat mengalokasikan memori privat dengan fungsi VirtualAlloc, VirtualAllocEx, atau VirtualAllocExNuma . Untuk mengaktifkan akses memori yang tidak di-cache untuk memori bersama, tentukan bendera SEC_NOCACHE saat memanggil fungsi CreateFileMapping . |
|
Mengatur semua halaman yang akan digabungkan dengan penulisan. Aplikasi tidak boleh menggunakan atribut ini kecuali ketika secara eksplisit diperlukan untuk perangkat. Menggunakan fungsi yang saling mengunci dengan memori yang dipetakan sebagai gabungan tulis dapat menghasilkan pengecualian EXCEPTION_ILLEGAL_INSTRUCTION . Bendera PAGE_WRITECOMBINE tidak dapat ditentukan dengan bendera PAGE_NOACCESS, PAGE_GUARD, dan PAGE_NOCACHE . Bendera PAGE_WRITECOMBINE hanya dapat digunakan saat mengalokasikan memori privat dengan fungsi VirtualAlloc, VirtualAllocEx, atau VirtualAllocExNuma . Untuk mengaktifkan akses memori gabungan tulis untuk memori bersama, tentukan bendera SEC_WRITECOMBINE saat memanggil fungsi CreateFileMapping . Windows Server 2003 dan Windows XP: Bendera ini tidak didukung sampai Windows Server 2003 dengan SP1. |
Konstanta berikut hanya dapat digunakan dengan fungsi yang didukung saat Anda menentukan enklave yang memiliki arsitektur Intel Software Guard Extensions (SGX).
Terus-menerus | Deskripsi | Fungsi yang didukung |
---|---|---|
|
Menunjukkan bahwa halaman akan dilindungi untuk mencegah penggunaan lebih lanjut dalam enklave. Bendera ini tidak boleh digabungkan dengan bendera lain. Bendera ini hanya berlaku untuk enklave SGX2. |
VirtualProtect |
|
Halaman berisi struktur kontrol utas (TCS). |
LoadEnclaveData VirtualProtect |
|
Konten halaman yang Anda berikan dikecualikan dari pengukuran dengan instruksi EEXTEND dari model pemrograman Intel SGX. |
LoadEnclaveData |
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung |
Windows XP [hanya aplikasi desktop] |
Server minimum yang didukung |
Windows Server 2003 [hanya aplikasi desktop] |
Header |
|