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 de 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. Este 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 MEMORY_RANGE_ENTRY nas quais 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 de 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 nulo 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 retornado

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

Comentários

A rotina ZwSetInformationVirtualMemory é chamada por drivers que conhecem 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 o disco), chamar essa rotina nesses intervalos de endereços antes que o Access reduza 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.

O ZwSetInformationVirtualMemory permite que os drivers façam uso eficiente de hardware de disco emitindo e/SS grandes e simultâneas, quando 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 falha 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 de pré-busca 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 de pré-busca 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 de memória física comuns, em que ela pode falhar de forma completa ou parcial em condições de memória insuficiente. Ele também pode criar pressão de memória se for chamado com intervalos de endereços grandes, de modo que os aplicativos só devem fazer a pré-busca de intervalos de endereços que realmente usarão.

Requisitos

   
Cliente mínimo com suporte disponível a partir do Windows 10, versão 1511.
Plataforma de Destino Universal
Cabeçalho ntifs. h (incluir Ntddk. h)
Biblioteca NtosKrnl. lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Regras de conformidade de DDI HwStorPortProhibitedDDIs, PowerIrpDDis