Partager via


Fonction MmBuildMdlForNonPagedPool (wdm.h)

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 dans la mémoire non pagée. L’appelant a utilisé la routine IoAllocateMdl pour créer le MDL pour cette mémoire tampon.

Valeur de retour

None

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 dans la mémoire verrouillée (les pages physiques ne peuvent pas être échangées), comme la mémoire allouée par la routine ExAllocatePoolWithTag avec PoolType = NonPagedPool ou par la routine MmAllocateContiguousMemorySpecifyCache . MmBuildMdlForNonPagedPool met à jour le MDL pour décrire les pages physiques sous-jacentes.

MmBuildMdlForNonPagedPool ne peut pas être utilisé avec des DLL MDL décrivant des mémoires tampons allouées sur une pile de noyau. Pour créer 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, sauf si elles sont 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 mdL sont déjà non 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 . 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.

La transmission d’une MDL générée 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 créé 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.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible à partir de Windows 2000.
Plateforme cible Universal
En-tête wdm.h (inclure Wdm.h, Ntddk.h, Ntifs.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <=DISPATCH_LEVEL

Voir aussi

ExAllocatePoolWithTag

MmAllocateContiguousMemorySpecifyCache

MmGetSystemAddressForMdlSafe

MmMapLockedPagesSpecifyCache

MmProbeAndLockPages

MmUnlockPages

MmUnmapLockedPages