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 |
---|---|
|
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 . |
|
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. |
|
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. |
|
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. |
|
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 . |
|
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. |
|
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. |
|
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 . |
|
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 . |
|
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 |
---|---|
|
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 . |
|
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 . |
|
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 |
---|---|---|
|
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 |
|
La página contiene una estructura de control de subprocesos (TCS). |
LoadEnclaveData VirtualProtect |
|
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 |
|