Compartilhar via


Função VirtualProtectEx (memoryapi.h)

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

Sintaxe

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

Parâmetros

[in] hProcess

Um identificador para o processo cuja proteção de memória deve ser alterada. O identificador deve ter o acesso de PROCESS_VM_OPERATION correto. Para obter mais informações, consulte Direitos de Acesso e Segurança do Processo.

[in] lpAddress

Um ponteiro para o endereço base 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 são 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 a 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

O valor da proteção de acesso só pode ser definido 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 VirtualProtectEx para alterar 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

Requisito Valor
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

Virtualprotect

VirtualQueryEx