Função ZwSetInformationVirtualMemory (ntifs.h)

A rotina ZwSetInformationVirtualMemory executa uma operação em uma lista especificada de intervalos de endereços no espaço de endereço do usuário de um processo.

Sintaxe

NTSYSAPI NTSTATUS ZwSetInformationVirtualMemory(
  [in] HANDLE                           ProcessHandle,
  [in] VIRTUAL_MEMORY_INFORMATION_CLASS VmInformationClass,
  [in] ULONG_PTR                        NumberOfEntries,
  [in] PMEMORY_RANGE_ENTRY              VirtualAddresses,
  [in] PVOID                            VmInformation,
  [in] ULONG                            VmInformationLength
);

Parâmetros

[in] ProcessHandle

Especifica um identificador aberto para o processo no contexto do qual a operação deve ser executada. Esse identificador não pode ser inválido. Use a macro NtCurrentProcess , definida em Ntddk.h, para especificar o processo atual.

[in] VmInformationClass

Especifica o tipo de operação a ser executada. Defina como VmPrefetchInformation definido na enumeração VIRTUAL_MEMORY_INFORMATION_CLASS , consulte ntddk.h.

[in] NumberOfEntries

Número de entradas na matriz apontada pelo parâmetro VirtualAddresses . Esse parâmetro não pode ser 0.

[in] VirtualAddresses

Ponteiro para uma matriz de estruturas MEMORY_RANGE_ENTRY em que cada entrada especifica um intervalo de endereços virtuais a ser processado. Os intervalos de endereços virtuais podem abranger qualquer parte do espaço de endereço do processo acessível pelo processo de destino.

[in] VmInformation

Um ponteiro para um buffer que contém informações de memória. O formato e o conteúdo do buffer dependem da classe de informações especificada.

Se VmInformationClass for VmPrefetchInformation, esse parâmetro não poderá ser NULL e deverá apontar para uma variável ULONG definida como 0.

[in] VmInformationLength

O tamanho do buffer apontado por VmInformation.

Se VmInformationClass for VmPrefetchInformation, isso deverá ser sizeof (ULONG).

Retornar valor

ZwSetInformationVirtualMemory retorna STATUS_SUCCESS com êxito ou o código de erro NTSTATUS apropriado em caso de falha.

Comentários

A rotina ZwSetInformationVirtualMemory é chamada por drivers que sabem o conjunto de endereços que eles acessarão. Se for provável que esses endereços não sejam mais residentes na memória (ou seja, eles foram paginados para disco), chamar essa rotina nesses intervalos de endereços antes do acesso reduz a latência geral, pois ele traz com eficiência esses intervalos de endereços do disco usando solicitações de E/S grandes e simultâneas sempre que possível.

ZwSetInformationVirtualMemory permite que os drivers façam uso eficiente do hardware de disco emitindo E/S grandes e simultâneas sempre que possível quando o driver fornece uma lista de intervalos de endereços de processo que serão acessados. Mesmo para um único intervalo de endereços (por exemplo, um mapeamento de arquivo), a rotina pode fornecer melhorias de desempenho emitindo uma única E/S grande em vez de muitas E/S menores que seriam emitidas por meio de falhas de página.

Os drivers chamam essa rotina puramente para otimização de desempenho: a pré-busca não é necessária para acessar os intervalos de endereços de destino. A memória pré-buscada não é adicionada ao conjunto de trabalho do processo de destino; ele é armazenado em cache na memória física. Quando os intervalos de endereços pré-buscados são acessados pelo processo de destino, eles são adicionados ao conjunto de trabalho.

Como essa chamada não é necessária para a operação correta do driver, ela é tratada como uma forte dica pelo sistema e está sujeita a restrições habituais de memória física em que pode falhar completamente ou parcialmente em condições de baixa memória. Ele também pode criar pressão de memória se chamado com grandes intervalos de endereços, portanto, os aplicativos devem apenas pré-buscar intervalos de endereços que eles realmente usarão.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 10, versão 1511.
Plataforma de Destino Universal
Cabeçalho ntifs.h (inclua Ntddk.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Regras de conformidade de DDI HwStorPortProhibitedDIs, PowerIrpDDis