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 |