Constantes de proteção de memória

Veja a seguir as opções de proteção de memória; você deve especificar um dos valores a seguir ao alocar ou proteger uma página na memória. Os atributos de proteção não podem ser atribuídos a uma parte de uma página; eles só podem ser atribuídos a uma página inteira.

Exemplo

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

Exemplo dele de exemplos clássicos do Windows no GitHub.

Constantes

Constante/valor Descrição
PAGE_EXECUTE
0x10
Habilita a execução de acesso à região confirmada de páginas. Uma tentativa de gravar na região confirmada resulta em uma violação de acesso.
Esse sinalizador não é compatível com a função CreateFileMapping .
PAGE_EXECUTE_READ
0x20
Habilita o acesso de execução ou somente leitura à região confirmada das páginas. Uma tentativa de gravar na região confirmada resulta em uma violação de acesso.
Windows Server 2003 e Windows XP: Esse atributo não é compatível com a função CreateFileMapping até o Windows XP com SP2 e Windows Server 2003 com SP1.
PAGE_EXECUTE_READWRITE
0x40
Habilita o acesso de execução, somente leitura ou leitura/gravação à região confirmada das páginas.
Windows Server 2003 e Windows XP: Esse atributo não é compatível com a função CreateFileMapping até o Windows XP com SP2 e Windows Server 2003 com SP1.
PAGE_EXECUTE_WRITECOPY
0x80
Habilita o acesso de execução, somente leitura ou cópia na gravação a uma exibição mapeada de um objeto de mapeamento de arquivo. Uma tentativa de gravar em uma página de cópia na gravação confirmada resulta em uma cópia privada da página que está sendo feita para o processo. A página privada é marcada como PAGE_EXECUTE_READWRITE e a alteração é gravada na nova página.
Esse sinalizador não tem suporte nas funções VirtualAlloc ou VirtualAllocEx . Windows Vista, Windows Server 2003 e Windows XP: Esse atributo não é compatível com a função CreateFileMapping até o Windows Vista com SP1 e Windows Server 2008.

PAGE_NOACCESS
0x01
Desabilita todo o acesso à região confirmada das páginas. Uma tentativa de ler, gravar ou executar a região confirmada resulta em uma violação de acesso.
Esse sinalizador não é compatível com a função CreateFileMapping .
PAGE_READONLY
0x02
Habilita o acesso somente leitura à região confirmada das páginas. Uma tentativa de gravar na região confirmada resulta em uma violação de acesso. Se a Prevenção de Execução de Dados estiver habilitada, uma tentativa de executar código na região confirmada resultará em uma violação de acesso.
PAGE_READWRITE
0x04
Habilita o acesso somente leitura ou leitura/gravação à região confirmada das páginas. Se a Prevenção de Execução de Dados estiver habilitada, tentar executar o código na região confirmada resultará em uma violação de acesso.
PAGE_WRITECOPY
0x08
Habilita o acesso somente leitura ou cópia na gravação a uma exibição mapeada de um objeto de mapeamento de arquivo. Uma tentativa de gravar em uma página de cópia na gravação confirmada resulta em uma cópia privada da página que está sendo feita para o processo. A página privada é marcada como PAGE_READWRITE e a alteração é gravada na nova página. Se a Prevenção de Execução de Dados estiver habilitada, tentar executar o código na região confirmada resultará em uma violação de acesso.
Esse sinalizador não tem suporte nas funções VirtualAlloc ou VirtualAllocEx .
PAGE_TARGETS_INVALID
0x40000000
Define todos os locais nas páginas como destinos inválidos para CFG. Usado junto com qualquer proteção de página de execução, como PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE e PAGE_EXECUTE_WRITECOPY. Qualquer chamada indireta para locais nessas páginas falhará nas verificações de CFG e o processo será encerrado. O comportamento padrão para páginas executáveis alocadas deve ser marcado como destinos de chamada válidos para CFG.
Esse sinalizador não tem suporte nas funções VirtualProtect ou CreateFileMapping .
PAGE_TARGETS_NO_UPDATE
0x40000000
As páginas na região não terão suas informações de CFG atualizadas enquanto a proteção for alterada para VirtualProtect. Por exemplo, se as páginas na região foram alocadas usando PAGE_TARGETS_INVALID, as informações inválidas serão mantidas enquanto a proteção de página for alterada. Esse sinalizador só é válido quando a proteção é alterada para um tipo executável como PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE e PAGE_EXECUTE_WRITECOPY. O comportamento padrão para a alteração da proteção virtualProtect para executável é marcar todos os locais como destinos de chamada válidos para CFG.

Veja a seguir modificadores que podem ser usados além das opções fornecidas na tabela anterior, exceto conforme observado.

Constante/valor Descrição
PAGE_GUARD
0x100
As páginas na região se tornam páginas de proteção. Qualquer tentativa de acessar uma página de proteção faz com que o sistema gere uma exceção STATUS_GUARD_PAGE_VIOLATION e desative a página de proteção status. Assim, as páginas de proteção atuam como um alarme de acesso único. Para obter mais informações, consulte Criando páginas de proteção.
Quando uma tentativa de acesso leva o sistema a desativar a página de proteção status, a proteção de página subjacente assume o controle.
Se ocorrer uma exceção de página de proteção durante um serviço do sistema, o serviço normalmente retornará uma falha status indicador.
Esse valor não pode ser usado com PAGE_NOACCESS.
Esse sinalizador não é compatível com a função CreateFileMapping .
PAGE_NOCACHE
0x200
Define todas as páginas como não em cache. Os aplicativos não devem usar esse atributo, exceto quando explicitamente necessários para um dispositivo. Usar as funções interligadas com memória mapeada com SEC_NOCACHE pode resultar em uma exceção EXCEPTION_ILLEGAL_INSTRUCTION .
O sinalizador PAGE_NOCACHE não pode ser usado com os sinalizadores PAGE_GUARD, PAGE_NOACCESS ou PAGE_WRITECOMBINE .
O sinalizador PAGE_NOCACHE só pode ser usado ao alocar memória privada com as funções VirtualAlloc, VirtualAllocEx ou VirtualAllocExNuma . Para habilitar o acesso à memória não armazenada em cache para memória compartilhada, especifique o sinalizador SEC_NOCACHE ao chamar a função CreateFileMapping .
PAGE_WRITECOMBINE
0x400
Define todas as páginas a serem combinadas com gravação.
Os aplicativos não devem usar esse atributo, exceto quando explicitamente necessários para um dispositivo. O uso das funções interligadas com memória mapeada como combinação de gravação pode resultar em uma exceção EXCEPTION_ILLEGAL_INSTRUCTION .
O sinalizador PAGE_WRITECOMBINE não pode ser especificado com os sinalizadores PAGE_NOACCESS, PAGE_GUARD e PAGE_NOCACHE .
O sinalizador PAGE_WRITECOMBINE só pode ser usado ao alocar memória privada com as funções VirtualAlloc, VirtualAllocEx ou VirtualAllocExNuma . Para habilitar o acesso à memória combinada de gravação para memória compartilhada, especifique o sinalizador SEC_WRITECOMBINE ao chamar a função CreateFileMapping .
Windows Server 2003 e Windows XP: Esse sinalizador não tem suporte até o Windows Server 2003 com SP1.

As constantes a seguir só podem ser usadas com a função com suporte quando você especifica um enclave que tem a arquitetura SGX (Extensões do Intel Software Guard).

Constante Descrição Função com suporte
PAGE_ENCLAVE_DECOMMIT
Indica que a página será protegida para impedir o uso adicional em um enclave.
Esse sinalizador não deve ser combinado com nenhum outro sinalizador.
Esse sinalizador só é válido para enclaves SGX2.
Virtualprotect
PAGE_ENCLAVE_THREAD_CONTROL
A página contém uma estrutura de controle de thread (TCS).
LoadEnclaveData
Virtualprotect
PAGE_ENCLAVE_UNVALIDATED
O conteúdo da página que você fornece é excluído da medida com a instrução EEXTEND do modelo de programação Intel SGX.
LoadEnclaveData

Requisitos

Requisito Valor
Cliente mínimo com suporte
Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte
Windows Server 2003 [somente aplicativos da área de trabalho]
Cabeçalho
WinNT.h (inclua Windows.h)

Confira também

Createfilemapping

Proteção de memória

Virtualalloc

VirtualAllocEx

LoadEnclaveData