Fonction IoAllocateMdl (wdm.h)

La routine IoAllocateMdl alloue une liste de descripteurs de 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 le 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

Le 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 le 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 principale ou secondaire. Ce paramètre détermine la façon dont le MDL doit être lié à l’IRP. Toutes les mémoires tampons, à l’exception de la première mémoire tampon décrite par un MDL dans un IRP, sont considérées comme des mémoires tampons secondaires. Ce champ doit être FALSE si aucun IRP n’est associé au 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 au MDL. Si le pointeur Irp n’est pas NULL, le MDL alloué est associé à la liste MDL de l’IRP spécifiée, en fonction de la valeur de SecondaryBuffer.

Valeur de retour

IoAllocateMdl retourne un pointeur vers un MDL ou, si le MDL ne peut pas être alloué, il retourne NULL.

Remarques

IoAllocateMdl peut être utilisé par un pilote qui doit diviser une mémoire tampon en morceaux, chacune mappée par un MDL distinct ou pour mapper une mémoire tampon allouée par un pilote. Le pilote doit appeler MmBuildMdlForNonPagedPool avec le MDL alloué par cet appel pour configurer un 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 le MDL. Dans Windows Server 2003, Windows XP et Windows 2000, la taille maximale de la 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 pointer vers le nouveau MDL. Si SecondaryBuffer a la valeur TRUE, la routine ajoute le MDL à la fin de la chaîne MDL à laquelle pointe Irp-MdlAddress>.

Pour plus d’informations sur les DLL, consultez Utilisation de MDLs.

Configuration requise

   
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