Função VirtualLock (memoryapi.h)
Bloqueia a região especificada do espaço de endereço virtual do processo na memória física, garantindo que o acesso subsequente à região não incorrerá em uma falha de página.
Sintaxe
BOOL VirtualLock(
[in] LPVOID lpAddress,
[in] SIZE_T dwSize
);
Parâmetros
[in] lpAddress
Um ponteiro para o endereço base da região de páginas a ser bloqueada.
[in] dwSize
O tamanho da região a ser bloqueada, 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 ambas as páginas sejam bloqueadas.
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
Todas as páginas na região especificada devem ser confirmadas. A memória protegida com PAGE_NOACCESS não pode ser bloqueada.
Bloquear páginas na memória pode prejudicar o desempenho do sistema reduzindo a RAM disponível e forçando o sistema a trocar outras páginas críticas pelo arquivo de paginação. Cada versão do Windows tem um limite no número máximo de páginas que um processo pode bloquear. Esse limite é intencionalmente pequeno para evitar uma degradação grave do desempenho. Os aplicativos que precisam bloquear um número maior de páginas devem primeiro chamar a função SetProcessWorkingSetSize para aumentar seus tamanhos mínimos e máximos do conjunto de trabalho. O número máximo de páginas que um processo pode bloquear é igual ao número de páginas em seu conjunto de trabalho mínimo menos uma pequena sobrecarga.
As páginas que um processo bloqueou permanecem na memória física até que o processo as desbloqueie ou termine. Essas páginas têm a garantia de não serem gravadas no arquivo de página enquanto estão bloqueadas.
Para desbloquear uma região de páginas bloqueadas, use a função VirtualUnlock . As páginas bloqueadas são desbloqueadas automaticamente quando o processo é encerrado.
Essa função não é como a função GlobalLock ou LocalLock , pois não incrementa uma contagem de bloqueios e converte um identificador em um ponteiro. Não há nenhuma contagem de bloqueios para páginas virtuais, portanto, várias chamadas para a função VirtualUnlock nunca são necessárias para desbloquear uma região de páginas.
Exemplos
Para obter um exemplo, consulte Criando páginas de proteção.
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 |