Compartilhar via


Função ZwFlushVirtualMemory (ntifs.h)

A rotina ZwFlushVirtualMemory libera um intervalo de endereços virtuais dentro do espaço de endereço virtual de um processo especificado que mapeia para um arquivo de dados de volta para o arquivo de dados se eles tiverem sido modificados.

Sintaxe

NTSYSAPI NTSTATUS ZwFlushVirtualMemory(
  [in]      HANDLE           ProcessHandle,
  [in, out] PVOID            *BaseAddress,
  [in, out] PSIZE_T          RegionSize,
  [out]     PIO_STATUS_BLOCK IoStatus
);

Parâmetros

[in] ProcessHandle

Um identificador aberto 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 o endereço base do intervalo de endereços virtuais.

Na entrada, esse parâmetro especifica um ponteiro para o valor inicial do endereço base da região das páginas a serem liberadas.

No retorno, esse parâmetro fornece um ponteiro para uma variável que receberá o endereço base da região liberada.

[in, out] RegionSize

O tamanho, em bytes, do intervalo de endereços virtuais.

Na entrada, esse parâmetro especifica um ponteiro para o valor inicial do tamanho em bytes da região das páginas a serem liberadas para o disco. Esse argumento é arredondado para o próximo limite de tamanho de página de host peloZwFlushVirtualMemory. Se esse valor for especificado como zero, o intervalo mapeado do endereço base até o final do intervalo será liberado.

No retorno, esse parâmetro especifica um ponteiro para uma variável que receberá o tamanho real em bytes da região liberada das páginas.

[out] IoStatus

Um ponteiro para uma estrutura IO_STATUS_BLOCK. Essa estrutura é onde o valor do status de E/S da última tentativa de operação de E/S é armazenado na saída.

Valor de retorno

ZwFlushVirtualMemory 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 O parâmetro ProcessHandle especificado não era um identificador de processo válido.
STATUS_INSUFFICIENT_RESOURCES Recursos adicionais exigidos por essa função não estavam disponíveis.
STATUS_INVALID_PARAMETER_2 O BaseAddress especificado era um endereço inválido dentro do espaço de endereço virtual ou o RegionSize era inválido.
STATUS_INVALID_HANDLE O parâmetro ProcessHandle especificado não era um identificador de processo válido.
STATUS_NOT_MAPPED_VIEW Não foi possível localizar nenhum descritor de espaço de endereço virtual para o BaseAddressfornecido.
STATUS_PROCESS_IS_TERMINATING O processo e o espaço de endereço virtual associado foram excluídos.
STATUS_FILE_LOCK_CONFLICT O sistema de arquivos encontrou um conflito de bloqueio.

Observações

Essa rotina aceita, como parâmetros de entrada, um intervalo de endereços na memória virtual que mapeiam um arquivo de dados. Se alguma memória nesse intervalo tiver sido modificada desde que o arquivo foi copiado para a memória, a rotina libera essa memória de volta para o arquivo de dados.

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 ZwFlushVirtualMemory ocorrer no modo de usuário, você deverá usar o nome "NtFlushVirtualMemory" em vez de "ZwFlushVirtualMemory".

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 XP
da Plataforma de Destino Universal
cabeçalho ntifs.h (inclua Ntifs.h)
biblioteca NtosKrnl.lib
de DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

Consulte também

ZwAllocateVirtualMemory