Compartir a través de


Constantes de protección de memoria

A continuación se muestran las opciones de protección de memoria; Debe especificar uno de los valores siguientes al asignar o proteger una página en memoria. Los atributos de protección no se pueden asignar a una parte de una página; solo se pueden asignar a una página completa.

Ejemplo

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 );
}

Ejemplo de ejemplos clásicos de Windows en GitHub.

Constantes

Constante o valor Descripción
PAGE_EXECUTE
0x10
Habilita el acceso de ejecución a la región confirmada de páginas. Un intento de escribir en la región confirmada produce una infracción de acceso.
Esta marca no es compatible con la función CreateFileMapping .
PAGE_EXECUTE_READ
0x20
Habilita el acceso de ejecución o de solo lectura a la región confirmada de páginas. Un intento de escribir en la región confirmada produce una infracción de acceso.
Windows Server 2003 y Windows XP: La función CreateFileMapping no admite este atributo hasta Windows XP con SP2 y Windows Server 2003 con SP1.
PAGE_EXECUTE_READWRITE
0x40
Habilita el acceso de ejecución, de solo lectura o de lectura y escritura a la región confirmada de páginas.
Windows Server 2003 y Windows XP: La función CreateFileMapping no admite este atributo hasta Windows XP con SP2 y Windows Server 2003 con SP1.
PAGE_EXECUTE_WRITECOPY
0x80
Habilita el acceso de ejecución, de solo lectura o de copia en escritura a una vista asignada de un objeto de asignación de archivos. Un intento de escribir en una página de copia en escritura confirmada da como resultado una copia privada de la página que se realiza para el proceso. La página privada se marca como PAGE_EXECUTE_READWRITE y el cambio se escribe en la nueva página.
Esta marca no es compatible con las funciones VirtualAlloc o VirtualAllocEx . Windows Vista, Windows Server 2003 y Windows XP: La función CreateFileMapping no admite este atributo hasta Windows Vista con SP1 y Windows Server 2008.

PAGE_NOACCESS
0x01
Deshabilita todo el acceso a la región confirmada de páginas. Un intento de leer, escribir en o ejecutar la región confirmada produce una infracción de acceso.
Esta marca no es compatible con la función CreateFileMapping .
PAGE_READONLY
0x02
Habilita el acceso de solo lectura a la región confirmada de páginas. Un intento de escribir en la región confirmada produce una infracción de acceso. Si la prevención de ejecución de datos está habilitada, un intento de ejecutar código en la región confirmada produce una infracción de acceso.
PAGE_READWRITE
0x04
Permite el acceso de solo lectura o de lectura y escritura a la región confirmada de páginas. Si la prevención de ejecución de datos está habilitada, si se intenta ejecutar código en la región confirmada, se produce una infracción de acceso.
PAGE_WRITECOPY
0x08
Habilita el acceso de solo lectura o copia en escritura a una vista asignada de un objeto de asignación de archivos. Un intento de escribir en una página de copia en escritura confirmada da como resultado una copia privada de la página que se realiza para el proceso. La página privada se marca como PAGE_READWRITE y el cambio se escribe en la nueva página. Si la prevención de ejecución de datos está habilitada, si se intenta ejecutar código en la región confirmada, se produce una infracción de acceso.
Esta marca no es compatible con las funciones VirtualAlloc o VirtualAllocEx .
PAGE_TARGETS_INVALID
0x40000000
Establece todas las ubicaciones de las páginas como destinos no válidos para CFG. Se usa junto con cualquier protección de páginas de ejecución como PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE y PAGE_EXECUTE_WRITECOPY. Cualquier llamada indirecta a ubicaciones de esas páginas producirá un error en las comprobaciones de CFG y se finalizará el proceso. El comportamiento predeterminado de las páginas ejecutables asignadas es marcar los destinos de llamada válidos para CFG.
Esta marca no es compatible con las funciones VirtualProtect o CreateFileMapping .
PAGE_TARGETS_NO_UPDATE
0x40000000
Las páginas de la región no tendrán actualizada su información de CFG mientras cambia la protección de VirtualProtect. Por ejemplo, si las páginas de la región se asignaron mediante PAGE_TARGETS_INVALID, la información no válida se mantendrá mientras cambia la protección de páginas. Esta marca solo es válida cuando la protección cambia a un tipo ejecutable como PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE y PAGE_EXECUTE_WRITECOPY. El comportamiento predeterminado para el cambio de protección de VirtualProtect en el ejecutable es marcar todas las ubicaciones como destinos de llamada válidos para CFG.

Los siguientes son modificadores que se pueden usar además de las opciones proporcionadas en la tabla anterior, excepto como se indica.

Constante o valor Descripción
PAGE_GUARD
0x100
Las páginas de la región se convierten en páginas de protección. Cualquier intento de acceder a una página de protección hace que el sistema genere una excepción de STATUS_GUARD_PAGE_VIOLATION y desactive el estado de la página de protección. Las páginas de protección actúan como una alarma de acceso único. Para obtener más información, vea Creating Guard Pages (Crear páginas de protección).
Cuando un intento de acceso lleva al sistema a desactivar el estado de la página de protección, la protección de página subyacente se hace cargo.
Si se produce una excepción de página de protección durante un servicio del sistema, el servicio normalmente devuelve un indicador de estado de error.
Este valor no se puede usar con PAGE_NOACCESS.
Esta marca no es compatible con la función CreateFileMapping .
PAGE_NOCACHE
0x200
Establece que todas las páginas no sean accesibles. Las aplicaciones no deben usar este atributo, excepto cuando se requiera explícitamente para un dispositivo. El uso de las funciones interbloqueadas con memoria asignada con SEC_NOCACHE puede dar lugar a una excepción de EXCEPTION_ILLEGAL_INSTRUCTION .
La marca PAGE_NOCACHE no se puede usar con las marcas de PAGE_GUARD, PAGE_NOACCESS o PAGE_WRITECOMBINE .
La marca PAGE_NOCACHE solo se puede usar al asignar memoria privada con las funciones VirtualAlloc, VirtualAllocEx o VirtualAllocExNuma . Para habilitar el acceso a memoria no almacenada en caché para la memoria compartida, especifique la marca SEC_NOCACHE al llamar a la función CreateFileMapping .
PAGE_WRITECOMBINE
0x400
Establece todas las páginas que se van a combinar con escritura.
Las aplicaciones no deben usar este atributo, excepto cuando se requiera explícitamente para un dispositivo. El uso de las funciones interbloqueadas con memoria asignada como combinada de escritura puede dar lugar a una excepción de EXCEPTION_ILLEGAL_INSTRUCTION .
No se puede especificar la marca PAGE_WRITECOMBINE con las marcas PAGE_NOACCESS, PAGE_GUARD y PAGE_NOCACHE .
La marca PAGE_WRITECOMBINE solo se puede usar al asignar memoria privada con las funciones VirtualAlloc, VirtualAllocEx o VirtualAllocExNuma . Para habilitar el acceso a memoria combinada de escritura para memoria compartida, especifique la marca SEC_WRITECOMBINE al llamar a la función CreateFileMapping .
Windows Server 2003 y Windows XP: Esta marca no se admite hasta Windows Server 2003 con SP1.

Las constantes siguientes solo se pueden usar con la función admitida cuando se especifica un enclave que tiene la arquitectura intel Software Guard Extensions (SGX).

Constante Descripción Función admitida
PAGE_ENCLAVE_DECOMMIT
Indica que la página se protegerá para evitar su uso adicional en un enclave.
Esta marca no debe combinarse con ninguna otra marca.
Esta marca solo es válida para enclaves SGX2.
VirtualProtect
PAGE_ENCLAVE_THREAD_CONTROL
La página contiene una estructura de control de subprocesos (TCS).
LoadEnclaveData
VirtualProtect
PAGE_ENCLAVE_UNVALIDATED
El contenido de la página que proporcione se excluye de la medida con la instrucción EEXTEND del modelo de programación Intel SGX.
LoadEnclaveData

Requisitos

Requisito Value
Cliente mínimo compatible
Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible
Windows Server 2003 [solo aplicaciones de escritorio]
Encabezado
WinNT.h (incluye Windows.h)

Vea también

CreateFileMapping

Protección de la memoria

VirtualAlloc

VirtualAllocEx

LoadEnclaveData