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

Voir aussi

IoBuildPartialMdl

IoFreeMdl

MmBuildMdlForNonPagedPool