Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O NtFreeVirtualMemory versões rotineiras, descomandos ou versões e descomandos, uma região de páginas dentro do espaço de endereço virtual de um processo especificado.
Sintaxe
__kernel_entry NTSYSCALLAPI NTSTATUS NtFreeVirtualMemory(
[in] HANDLE ProcessHandle,
[in, out] PVOID *BaseAddress,
[in, out] PSIZE_T RegionSize,
[in] ULONG FreeType
);
Parâmetros
[in] ProcessHandle
Um identificador para o processo em cujo contexto as páginas a serem liberadas residem. Use a macro NtCurrentProcess, definida em Ntddk.h, para especificar o processo atual.
[in, out] BaseAddress
Um ponteiro para uma variável que receberá o endereço virtual base da região liberada das páginas.
Se o sinalizador de MEM_RELEASE estiver definido no parâmetro FreeType, *BaseAddress deverá ser o endereço base retornado por NtAllocateVirtualMemory quando a região foi reservada.
[in, out] RegionSize
Um ponteiro para uma variável que receberá o tamanho real, em bytes, da região liberada das páginas. A rotina arredonda o valor inicial dessa variável até o limite de tamanho da próxima página do host e grava o valor arredondado de volta para essa variável.
Se o sinalizador de MEM_RELEASE estiver definido em *FreeType, *RegionSize deverá ser zero. NtFreeVirtualMemory libera toda a região reservada na chamada de alocação inicial para NtAllocateVirtualMemory.
Se o sinalizador MEM_DECOMMIT for definido em *FreeType, NtFreeVirtualMemory decodificar todas as páginas de memória que contêm um ou mais bytes no intervalo de *BaseAddress a (*BaseAddress + *RegionSize). Isso significa, por exemplo, que se uma região de dois bytes de memória ultrapassa um limite de página, ambas as páginas são descompactadas.
NtFreeVirtualMemory descompromissa toda a região reservada por NtAllocateVirtualMemory. Se as três condições a seguir forem atendidas, toda a região entrará no estado reservado:
- O sinalizador MEM_DECOMMIT está definido.
- *BaseAddress é o endereço base retornado por NtAllocateVirtualMemory quando a região foi reservada.
- *RegionSize é zero.
[in] FreeType
Uma máscara de bits que contém sinalizadores que descrevem o tipo de operação livre que NtFreeVirtualMemory será executada para a região de páginas especificada. Os valores possíveis são listados na tabela a seguir.
Valor de retorno
NtFreeVirtualMemory retorna STATUS_SUCCESS ou um código de status de erro. Os códigos de status de erro possíveis incluem o seguinte.
| Código de retorno | Descrição |
|---|---|
| STATUS_ACCESS_DENIED | Um processo solicitou acesso a um objeto, mas não recebeu esses direitos de acesso. |
| STATUS_INVALID_HANDLE | Um valor ProcessHandle inválido foi especificado. |
| STATUS_OBJECT_TYPE_MISMATCH | Há uma incompatibilidade entre o tipo de objeto exigido pela operação solicitada e o tipo de objeto especificado na solicitação. |
Observações
Cada página no espaço de endereço virtual do processo está em um dos três estados descritos na tabela a seguir.
NtFreeVirtualMemory pode executar as seguintes operações:
- Descompacte uma região de páginas confirmadas ou não confirmadas. Após essa operação, as páginas estarão no estado reservado.
- Libere uma região de páginas reservadas. Após essa operação, as páginas estarão no estado livre.
- Descompacte e libere uma região de páginas confirmadas ou não confirmadas. Após essa operação, as páginas estarão no estado livre.
NtFreeVirtualMemory pode descompactar um intervalo de páginas que estão em estados diferentes, algumas confirmadas e outras não confirmadas. Isso significa que você pode descompromissar um intervalo de páginas sem primeiro determinar o estado de compromisso atual de cada página. A descompactação de uma página libera seu armazenamento físico, na memória ou no arquivo de paginação no disco.
Se uma página for descompactada, mas não for liberada, seu estado será alterado para reservado. Posteriormente, você pode chamar NtAllocateVirtualMemory para confirmá-lo ou NtFreeVirtualMemory para liberá-lo. A tentativa de ler ou gravar em uma página reservada resulta em uma exceção de violação de acesso.
NtFreeVirtualMemory pode liberar um intervalo de páginas que estão em estados diferentes, algumas reservadas e algumas confirmadas. Isso significa que você pode liberar um intervalo de páginas sem primeiro determinar o estado de compromisso atual de cada página. Todo o intervalo de páginas originalmente reservado por NtAllocateVirtualMemory deve ser liberado ao mesmo tempo.
Se uma página for liberada, seu estado será alterado gratuitamente e estará disponível para operações de alocação subsequentes. Depois que a memória tiver sido liberada ou descompactada, você nunca mais poderá se referir à memória. Qualquer informação que possa ter estado nessa memória se foi para sempre. A tentativa de ler ou gravar em uma página gratuita resulta em uma exceção de violação de acesso. Se você precisar de informações, não descompromisse ou memória livre que contenha essas informações.
Para obter mais informações sobre o suporte ao gerenciamento de memória para drivers no modo kernel, consulte Gerenciamento de Memória para Drivers do Windows.
Nota
Se a chamada para a função NtFreeVirtualMemory ocorrer no modo de usuário, você deverá usar o nome "NtFreeVirtualMemory" em vez de "ZwFreeVirtualMemory".
Para chamadas de drivers no modo kernel, as versões NtXxx e Zwxxx versões de uma rotina dos Serviços de Sistema Nativo do Windows podem se comportar de forma diferente na maneira como lidam e interpretam parâmetros de entrada. Para obter mais informações sobre a relação entre as versões NtXxx e ZwXxx de uma rotina, consulte Usando versões Nt e Zw das rotinas de serviços do sistema nativo.
Requisitos
| Requisito | Valor |
|---|---|
| de cliente com suporte mínimo | Windows 2000 |
| da Plataforma de Destino | Universal |
| cabeçalho | ntifs.h (inclua Ntifs.h, Fltkernel.h) |
| biblioteca | NtosKrnl.lib |
| de DLL | NtosKrnl.exe |
| IRQL | PASSIVE_LEVEL |
| regras de conformidade de DDI | HwStorPortProhibitedDIs, PowerIrpDDis |