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
PAGE_EXECUTE
0x10
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 .
PAGE_EXECUTE_READ
0x20
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.
PAGE_EXECUTE_READWRITE
0x40
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.
PAGE_EXECUTE_WRITECOPY
0x80
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.

PAGE_NOACCESS
0x01
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 .
PAGE_READONLY
0x02
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.
PAGE_READWRITE
0x04
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.
PAGE_WRITECOPY
0x08
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 .
PAGE_TARGETS_INVALID
0x40000000
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 .
PAGE_TARGETS_NO_UPDATE
0x40000000
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
PAGE_GUARD
0x100
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 .
PAGE_NOCACHE
0x200
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 .
PAGE_WRITECOMBINE
0x400
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
PAGE_ENCLAVE_DECOMMIT
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
PAGE_ENCLAVE_THREAD_CONTROL
Halaman berisi struktur kontrol utas (TCS).
LoadEnclaveData
VirtualProtect
PAGE_ENCLAVE_UNVALIDATED
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
WinNT.h (termasuk Windows.h)

Lihat juga

CreateFileMapping

Perlindungan Memori

VirtualAlloc

VirtualAllocEx

LoadEnclaveData