IoAllocateMdl-Funktion (wdm.h)
Die IoAllocateMdl Routine weist eine Speicherdeskriptorliste (MDL) groß genug zu, um einen Puffer zuzuordnen, da die Startadresse und Länge des Puffers angegeben ist. Optional ordnet diese Routine die MDL einem IRP zu.
Syntax
PMDL IoAllocateMdl(
[in, optional] __drv_aliasesMem PVOID VirtualAddress,
[in] ULONG Length,
[in] BOOLEAN SecondaryBuffer,
[in] BOOLEAN ChargeQuota,
[in, out, optional] PIRP Irp
);
Parameter
[in, optional] VirtualAddress
Zeiger auf die virtuelle Basisadresse des Puffers, den die MDL beschreiben soll.
[in] Length
Gibt die Länge des Puffers in Bytes an, den die MDL beschreiben soll. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".
[in] SecondaryBuffer
Gibt an, ob der Puffer ein primärer oder sekundärer Puffer ist. Dieser Parameter bestimmt, wie die MDL mit dem IRP verknüpft werden soll. Alle Puffer mit Ausnahme des ersten Puffers, der von einer MDL in einem IRP beschrieben wird, gelten als sekundäre Puffer. Dieses Feld muss FALSE- sein, wenn keine IRP mit der MDL verknüpft ist. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".
[in] ChargeQuota
Reserviert für die Systemverwendung. Treiber müssen diesen Parameter auf FALSE-festlegen.
[in, out, optional] Irp
Zeiger auf ein IRP, das der MDL zugeordnet werden soll. Wenn der Irp Zeiger nichtNULL-ist, wird die zugeordnete MDL der MDL-Liste des angegebenen IRP entsprechend dem Wert von SecondaryBufferzugeordnet.
Rückgabewert
IoAllocateMdl- gibt einen Zeiger auf eine MDL zurück, oder wenn die MDL nicht zugeordnet werden kann, wird NULL-zurückgegeben.
Bemerkungen
IoAllocateMdl- kann von einem Treiber verwendet werden, der einen Puffer in Teile aufteilen muss, die jeweils von einer separaten MDL zugeordnet sind oder um einen vom Treiber zugewiesenen Puffer zuzuordnen. Der Treiber sollte MmBuildMdlForNonPagedPool- aufrufen, wobei die von diesem Aufruf zugewiesene MDL zum Einrichten eines vom Treiber zugewiesenen Puffers im nichtpageten Pool eingerichtet wird.
Der Parameter Length gibt die Größe des Puffers an, der von der MDL beschrieben werden soll. In Windows Server 2003, Windows XP und Windows 2000 ist die maximale Puffergröße in Byte PAGE_SIZE * (65535 - Sizeof(MDL)) / Sizeof(ULONG_PTR). In Windows Vista und Windows Server 2008 beträgt die maximale Puffergröße (2 Gigabyte – PAGE_SIZE). Ab Windows 7 und Windows Server 2008 R2 beträgt die maximale Puffergröße (4 Gigabyte – PAGE_SIZE).
Wenn der parameter SecondaryBufferFALSEist, aktualisiert die Routine Irp->MdlAddress, um auf die neue MDL zu verweisen. Wenn SecondaryBuffer-TRUEist, fügt die Routine die MDL am Ende der MDL-Kette hinzu, die Irp->MdlAddress verweist.
Weitere Informationen zu MDLs finden Sie unter Verwenden von MDLs.
Anforderungen
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Ab Windows 2000 verfügbar. |
Zielplattform- | Universal |
Header- | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Library | NtosKrnl.lib |
DLL- | NtosKrnl.exe |
IRQL- | <= DISPATCH_LEVEL |