Função VirtualProtect (memoryapi.h)

Altera a proteção em uma região de páginas confirmadas no espaço de endereço virtual do processo de chamada.

Para alterar a proteção de acesso de qualquer processo, use a função VirtualProtectEx .

Sintaxe

BOOL VirtualProtect(
  [in]  LPVOID lpAddress,
  [in]  SIZE_T dwSize,
  [in]  DWORD  flNewProtect,
  [out] PDWORD lpflOldProtect
);

Parâmetros

[in] lpAddress

O endereço da página inicial da região de páginas cujos atributos de proteção de acesso devem ser alterados.

Todas as páginas na região especificada devem estar dentro da mesma região reservada alocada ao chamar a função VirtualAlloc ou VirtualAllocEx usando MEM_RESERVE. As páginas não podem abranger regiões reservadas adjacentes alocadas por chamadas separadas para VirtualAlloc ou VirtualAllocEx usando MEM_RESERVE.

[in] dwSize

O tamanho da região cujos atributos de proteção de acesso devem ser alterados, em bytes. A região das páginas afetadas inclui todas as páginas que contêm um ou mais bytes no intervalo do parâmetro lpAddress até (lpAddress+dwSize). Isso significa que um intervalo de 2 bytes que atravessa um limite de página faz com que os atributos de proteção de ambas as páginas sejam alterados.

[in] flNewProtect

A opção de proteção de memória. Esse parâmetro pode ser uma das constantes de proteção de memória.

Para exibições mapeadas, esse valor deve ser compatível com a proteção de acesso especificada quando a exibição foi mapeada (consulte MapViewOfFile, MapViewOfFileEx e MapViewOfFileExNuma).

[out] lpflOldProtect

Um ponteiro para uma variável que recebe o valor de proteção de acesso anterior da primeira página na região de páginas especificada. Se esse parâmetro for NULL ou não apontar para uma variável válida, a função falhará.

Valor retornado

Se a função for bem-sucedida, o valor retornado será diferente de zero.

Se a função falhar, o valor retornado será zero. Para obter informações de erro estendidas, chame GetLastError.

Comentários

Você pode definir o valor de proteção de acesso somente em páginas confirmadas. Se o estado de qualquer página na região especificada não for confirmado, a função falhará e retornará sem modificar a proteção de acesso de nenhuma página na região especificada.

O modificador de proteção PAGE_GUARD estabelece páginas de proteção. As páginas de proteção atuam como alarmes de acesso único. Para obter mais informações, consulte Criando páginas de proteção.

É melhor evitar usar o VirtualProtect para alterar as proteções de página em blocos de memória alocados por GlobalAlloc, HeapAlloc ou LocalAlloc, pois vários blocos de memória podem existir em uma única página. O gerenciador de heap pressupõe que todas as páginas no heap concedam pelo menos acesso de leitura e gravação.

Ao proteger uma região que será executável, o programa de chamada é responsável por garantir a coerência do cache por meio de uma chamada apropriada para FlushInstructionCache depois que o código for definido em vigor. Caso contrário, as tentativas de executar o código fora da região executável recentemente podem produzir resultados imprevisíveis.

Requisitos

   
Cliente mínimo com suporte Windows XP [aplicativos da área de trabalho | aplicativos UWP]
Servidor mínimo com suporte Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho memoryapi.h (inclua Windows.h, Memoryapi.h)
Biblioteca onecore.lib
DLL Kernel32.dll

Confira também

Funções de gerenciamento da memória

Constantes de proteção de memória

Funções de memória virtual

Virtualalloc

VirtualProtectEx

APIs Vertdll disponíveis em enclaves de VBS