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 é mapeado 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 pelo ZwFlushVirtualMemory. 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 da status de E/S da última tentativa de operação de E/S é armazenado na saída.

Retornar valor

ZwFlushVirtualMemory retorna STATUS_SUCCESS ou um código de status de erro. Possíveis códigos de status de erro 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 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 Nenhum descritor de espaço de endereço virtual pode estar localizado para o BaseAddress fornecido.
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.

Comentários

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 liberará 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.

Observação

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 de modo kernel, as versões NtXxx e ZwXxx de uma rotina do Windows Native System Services 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 Using Nt and Zw Versions of the Native System Services Routines.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP
Plataforma de Destino Universal
Cabeçalho ntifs.h (inclua Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

Confira também

ZwAllocateVirtualMemory