Função VirtualProtectFromApp (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.
Sintaxe
BOOL VirtualProtectFromApp(
[in] PVOID Address,
[in] SIZE_T Size,
[in] ULONG NewProtection,
[out] PULONG OldProtection
);
Parâmetros
[in] Address
Um ponteiro de um endereço que descreve a 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, VirtualAllocFromApp ou VirtualAllocEx usando MEM_RESERVE. As páginas não podem abranger regiões reservadas adjacentes que foram alocadas por chamadas separadas para VirtualAlloc, VirtualAllocFromApp ou VirtualAllocEx usando MEM_RESERVE.
[in] Size
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 Address para (Address+Size)
. 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] NewProtection
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).
As seguintes constantes geram um erro:
- PAGE_EXECUTE_READWRITE
- PAGE_EXECUTE_WRITECOPY
- PAGE_EXECUTE
- PAGE_EXECUTE_READ
[out] OldProtection
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 chamar VirtualProtectFromApp de aplicativos da Windows Store com recursos JIT (Just-In-Time) para usar a funcionalidade JIT. O aplicativo deve incluir a funcionalidade codeGeneration no arquivo de manifesto do aplicativo para usar recursos JIT.
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 o uso de VirtualProtectFromApp para alterar as proteções de página em blocos de memória alocados por GlobalAlloc, HeapAlloc ou LocalAlloc, porque 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.
VirtualProtectFromApp permite marcar páginas como executáveis, mas não permite que você defina permissões de gravação e execução ao mesmo tempo.
Ao proteger uma região que será executável, o programa de chamada assume a responsabilidade de garantir a coerência de cache por meio de uma chamada apropriada para FlushInstructionCache depois que o código tiver sido 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 10 [aplicativos da área de trabalho | Aplicativos UWP] |
Servidor mínimo com suporte | Windows Server 2016 [aplicativos da área de trabalho | Aplicativos UWP] |
Plataforma de Destino | Windows |
Cabeçalho | memoryapi.h (inclua Windows.h) |
Biblioteca | WindowsApp.lib |
DLL | Kernel32.dll |