Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
La routine MmBuildMdlForNonPagedPool reçoit un MDL qui spécifie une mémoire tampon de mémoire virtuelle non paginée et la met à jour pour décrire les pages physiques sous-jacentes.
Syntaxe
VOID MmBuildMdlForNonPagedPool(
[in, out] PMDL MemoryDescriptorList
);
Paramètres
[in, out] MemoryDescriptorList
Pointeur vers un MDL qui spécifie une mémoire tampon de mémoire virtuelle en mémoire non paginé. L’appelant a utilisé la routine IoAllocateMdl pour créer le MDL pour cette mémoire tampon.
Valeur de retour
Aucun
Remarques
À l’entrée, le MDL spécifié doit décrire une mémoire tampon dans la mémoire système non paginée ou en mémoire verrouillée (les pages physiques ne peuvent pas être échangées), telles que la mémoire allouée par la routine ExAllocatePoolWithTag avec routine PoolType = NonPagedPool ou par la routine MmAllocateContiguousMemorySpecifyCache. MmBuildMdlForNonPagedPool met à jour le MDL pour décrire les pages physiques sous-jacentes.
MmBuildMdlForNonPagedPool peut ne pas être utilisé avec des dll MDL décrivant les mémoires tampons allouées sur une pile de noyau. Pour générer un MDL décrivant une mémoire tampon de pile de noyau, les pilotes doivent appeler MmProbeAndLockPages. Cela est dû au fait que les pages de pile de noyau peuvent être échangées à moins qu’elles ne soient verrouillées par sonde et verrouillées. Cette règle s’applique même si le pilote garantit que la pile du noyau ne peut pas être paginée.
Étant donné que les pages décrites par le MDL ne sont pas modifiables et sont déjà mappées à l’espace d’adressage système, les pilotes ne doivent pas essayer de les verrouiller à l’aide de la routine MmProbeAndLockPages ou de créer des mappages d’espace d’adressage système supplémentaires à l’aide de la routine MmMapLockedPagesSpecifyCache. De même, les pilotes ne doivent pas essayer de déverrouiller les pages à l’aide de la routine MmUnlockPages, ou de libérer le mappage d’espace d’adressage système existant à l’aide de la routine MmUnmapLockedPages routine. Si un pilote effectue l’une de ces opérations illégales sur un MDL généré par MmBuildMdlForNonPagedPool, le comportement résultant n’est pas défini.
Le passage d’un MDL généré par MmBuildMdlForNonPagedPool à la routine MmGetSystemAddressForMdlSafe est autorisée. L’appel MmGetSystemAddressForMdlSafe, dans ce cas, retourne simplement l’adresse virtuelle de départ de la mémoire tampon décrite par le MDL.
Un pilote peut utiliser la routine MmMapLockedPagesSpecifyCache pour mapper un MDL généré par MmBuildMdlForNonPagedPool dans l’espace d’adressage virtuel de l’utilisateur. Toutefois, le pilote doit effectuer cette opération de manière à éviter certains problèmes de sécurité. Pour plus d’informations, consultez MmMapLockedPagesSpecifyCache.
Exigences
| Exigence | Valeur |
|---|---|
| client minimum pris en charge | Disponible à partir de Windows 2000. |
| plateforme cible | Universel |
| d’en-tête | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
| bibliothèque | NtosKrnl.lib |
| DLL | NtosKrnl.exe |
| IRQL | <=DISPATCH_LEVEL |