Partager via


ZwSetInformationVirtualMemory, fonction (ntifs.h)

La routine ZwSetInformationVirtualMemory effectue une opération sur une liste spécifiée de plages d’adresses dans l’espace d’adressage utilisateur d’un processus.

Syntaxe

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
);

Paramètres

[in] ProcessHandle

Spécifie un handle ouvert pour le processus dans le contexte duquel l’opération doit être effectuée. Ce handle ne peut pas être non valide. Utilisez la macro NtCurrentProcess , définie dans Ntddk.h, pour spécifier le processus actuel.

[in] VmInformationClass

Spécifie le type d’opération à effectuer. Définissez sur VmPrefetchInformation défini dans l’énumération VIRTUAL_MEMORY_INFORMATION_CLASS , consultez ntddk.h.

[in] NumberOfEntries

Nombre d’entrées dans le tableau vers lesquelles pointe le paramètre VirtualAddresses . Ce paramètre ne peut pas être 0.

[in] VirtualAddresses

Pointeur vers un tableau de structures MEMORY_RANGE_ENTRY dans laquelle chaque entrée spécifie une plage d’adresses virtuelles à traiter. Les plages d’adresses virtuelles peuvent couvrir n’importe quelle partie de l’espace d’adressage du processus accessible par le processus cible.

[in] VmInformation

Pointeur vers une mémoire tampon qui contient des informations de mémoire. Le format et le contenu de la mémoire tampon dépendent de la classe d’informations spécifiée.

Si VmInformationClass est VmPrefetchInformation, ce paramètre ne peut pas être NULL et doit pointer vers une variable ULONG définie sur 0.

[in] VmInformationLength

Taille de la mémoire tampon pointée par VmInformation.

Si VmInformationClass est VmPrefetchInformation, il doit s’agir sizeof (ULONG)de .

Valeur retournée

ZwSetInformationVirtualMemory retourne STATUS_SUCCESS en cas de réussite, ou le code d’erreur NTSTATUS approprié en cas d’échec.

Remarques

La routine ZwSetInformationVirtualMemory est appelée par les pilotes qui connaissent l’ensemble des adresses auxquelles ils vont accéder. S’il est probable que ces adresses ne résident plus en mémoire (c’est-à-dire qu’elles ont été paginées sur le disque), l’appel de cette routine sur ces plages d’adresses avant l’accès réduit la latence globale, car il permet d’obtenir efficacement ces plages d’adresses à partir du disque à l’aide de demandes d’E/S simultanées volumineuses dans la mesure du possible.

ZwSetInformationVirtualMemory permet aux pilotes d’utiliser efficacement le matériel disque en émettant des E/S simultanées volumineuses dans la mesure du possible lorsque le pilote fournit une liste de plages d’adresses de processus accessibles. Même pour une plage d’adresses unique (par exemple, un mappage de fichiers), la routine peut améliorer les performances en émettant une seule grande E/S plutôt que les nombreuses E/S plus petites qui seraient émises en cas de défaillance de page.

Les pilotes appellent cette routine uniquement pour optimiser les performances : la prérécupération n’est pas nécessaire pour accéder aux plages d’adresses cibles. La mémoire prérécupérée n’est pas ajoutée au jeu de travail du processus cible ; il est mis en cache dans la mémoire physique. Lorsque les plages d’adresses prérécupérées sont accessibles par le processus cible, elles sont ajoutées au jeu de travail.

Étant donné que cet appel n’est pas nécessaire pour le bon fonctionnement du pilote, il est traité comme un indicateur fort par le système et est soumis à des contraintes de mémoire physique habituelles où il peut complètement ou partiellement échouer dans des conditions de mémoire faible. Il peut également créer une pression de la mémoire si elle est appelée avec de grandes plages d’adresses, de sorte que les applications ne doivent prérécupérer que les plages d’adresses qu’elles utiliseront réellement.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 10, version 1511.
Plateforme cible Universal
En-tête ntifs.h (inclure Ntddk.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Règles de conformité DDI HwStorPortProhibitedDDIs, PowerIrpDDis