Função ZwSetInformationVirtualMemory (ntifs.h)
A rotina de
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
[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 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 |