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éfini sur VmPrefetchInformation défini dans l’énumération VIRTUAL_MEMORY_INFORMATION_CLASS, consultez ntddk.h.

[in] NumberOfEntries

Nombre d’entrées dans le tableau pointé par 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 virtuelle à traiter. Les plages d’adresses virtuelles peuvent couvrir toute 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, cela doit être sizeof (ULONG).

Valeur de retour

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 accèderont. S’il est probable que ces adresses ne résident plus dans la 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 elle apporte efficacement ces plages d’adresses à partir du disque à l’aide de requêtes d’E/S volumineuses et simultanées dans la mesure du possible.

ZwSetInformationVirtualMemory permet aux pilotes d’utiliser efficacement le matériel disque en émettant des E/S simultanées volumineuses et simultanées 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 apporter des améliorations des performances en émettant une seule E/S volumineuse plutôt que les nombreuses E/S plus petites qui seraient émises par le biais d’erreurs de page.

Les pilotes appellent cette routine uniquement pour l’optimisation des 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 en 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 une opération correcte du pilote, il est traité comme un indicateur fort par le système et est soumis à des contraintes de mémoire physique habituelles où elle peut complètement ou partiellement échouer dans des conditions de mémoire faible. Elle peut également créer une pression de mémoire si elle est appelée avec des plages d’adresses volumineuses, de sorte que les applications doivent uniquement prérécupérer les plages d’adresses qu’elles utiliseront réellement.

Exigences

Exigence Valeur
client minimum pris en charge Windows 10, version 1511.
plateforme cible Universel
d’en-tête ntifs.h (include Ntddk.h)
bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
règles de conformité DDI HwStorPortProhibitedDDIs, PowerIrpDDis