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 |
---|---|
|
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 . |
|
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. |
|
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. |
|
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. |
|
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 . |
|
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. |
|
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. |
|
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 . |
|
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 . |
|
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 |
---|---|
|
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 . |
|
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 . |
|
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 |
---|---|---|
|
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 |
|
A página contém uma estrutura de controle de thread (TCS). |
LoadEnclaveData Virtualprotect |
|
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 |
|