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 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 Remarques suivante.
[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 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 Remarques suivante.
[in] ChargeQuota
Réservé à l’utilisation du 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 pasNULL, le MDL alloué est associé à la liste MDL de l’IRP spécifiée, conformément à 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 décomposer une mémoire tampon en morceaux, chacun mappé par un MDL distinct ou 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)) / taille de(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 est FALSE, la routine met à jour Irp ->MdlAddress pour pointer vers le nouveau MDL. Si SecondaryBuffer est TRUE, la routine ajoute le MDL à la fin de la chaîne MDL à laquelle Irp ->MdlAddress pointe.
Pour plus d’informations sur les DLL, consultez Utilisation de MDLs.
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 |