Compartilhar via


Função ZwSetInformationVirtualMemory (ntifs.h)

A rotina de 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 apontadas pelo parâmetro VirtualAddresses. Esse parâmetro não pode ser 0.

[in] VirtualAddresses

Ponteiro para uma matriz de estruturas de MEMORY_RANGE_ENTRY em que cada entrada especifica um intervalo de endereços virtual 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).

Valor de retorno

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

Observações

A rotina de ZwSetInformationVirtualMemory é chamada por drivers que sabem o conjunto de endereços que estarão acessando. Se for provável que esses endereços não residam mais na memória (ou seja, eles foram colocados em 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/Ss 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; é 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 dica forte 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 memória baixa. Ele também pode criar pressão de memória se chamado com grandes intervalos de endereços, portanto, os aplicativos devem apenas pré-realizar intervalos de endereços que eles realmente usarão.

Requisitos

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