Fonction IoAllocateMdl (wdm.h)
La routine IoAllocateMdl alloue une liste de descripteurs mémoire (MDL) suffisamment grande pour mapper une mémoire tampon, en fonction de l’adresse et de la longueur de départ de la mémoire tampon. Si vous le souhaitez, cette routine associe la MDL à un IRP.
Syntaxe
PMDL IoAllocateMdl(
[in, optional] __drv_aliasesMem PVOID VirtualAddress,
[in] ULONG Length,
[in] BOOLEAN SecondaryBuffer,
[in] BOOLEAN ChargeQuota,
[in, out, optional] PIRP Irp
);
Paramètres
[in, optional] VirtualAddress
Pointeur vers l’adresse virtuelle de base de la mémoire tampon que mdL doit décrire.
[in] Length
Spécifie la longueur, en octets, de la mémoire tampon que la MDL doit décrire. Pour plus d'informations, consultez la section Notes qui suit.
[in] SecondaryBuffer
Indique si la mémoire tampon est une mémoire tampon primaire ou secondaire. Ce paramètre détermine la façon dont la MDL doit être liée à l’IRP. Toutes les mémoires tampons, à l’exception de la première mémoire tampon décrite par une MDL dans un IRP, sont considérées comme des mémoires tampons secondaires. Ce champ doit avoir la valeur FALSE si aucun IRP n’est associé à la MDL. Pour plus d'informations, consultez la section Notes qui suit.
[in] ChargeQuota
Réservé pour le système. Les pilotes doivent définir ce paramètre sur FALSE.
[in, out, optional] Irp
Pointeur vers un IRP à associer à la MDL. Si le pointeur Irp n’est pas NULL, la MDL allouée est associée à la liste MDL de l’IRP spécifiée, en fonction de la valeur de SecondaryBuffer.
Valeur retournée
IoAllocateMdl retourne un pointeur vers une MDL ou, si la MDL ne peut pas être allouée, elle retourne NULL.
Remarques
IoAllocateMdl peut être utilisé par un pilote qui doit diviser une mémoire tampon en morceaux, chacun mappé par une MDL distincte ou pour mapper une mémoire tampon allouée par le pilote. Le pilote doit appeler MmBuildMdlForNonPagedPool avec la MDL allouée par cet appel pour configurer une MDL décrivant une mémoire tampon allouée par le pilote dans un pool non paginé.
Le paramètre Length spécifie la taille de la mémoire tampon qui doit être décrite par la MDL. Dans Windows Server 2003, Windows XP et Windows 2000, la taille maximale de mémoire tampon, en octets, que cette routine peut allouer est PAGE_SIZE * (65535 - sizeof(MDL)) / sizeof(ULONG_PTR). Dans Windows Vista et Windows Server 2008, la taille maximale de la mémoire tampon est (2 gigaoctets - PAGE_SIZE). À compter de Windows 7 et Windows Server 2008 R2, la taille maximale de la mémoire tampon est (4 gigaoctets - PAGE_SIZE).
Si le paramètre SecondaryBuffer a la valeur FALSE, la routine met à jour Irp-MdlAddress> pour qu’elle pointe vers la nouvelle MDL. Si SecondaryBuffer a la valeur TRUE, la routine ajoute la MDL à la fin de la chaîne MDL vers laquelle Irp-MdlAddress> pointe.
Pour plus d’informations sur les DLL, consultez Utilisation de MDL.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Disponible à partir de Windows 2000. |
Plateforme cible | Universal |
En-tête | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |