Freigeben über


IoAllocateMdl-Funktion (wdm.h)

Die IoAllocateMdl-Routine weist eine Speicherdeskriptorliste (Memory Descriptor List, MDL) zu, die groß genug ist, um einen Puffer unter Berücksichtigung der Startadresse und Länge des Puffers zuzuordnen. 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, werden als sekundäre Puffer betrachtet. Dieses Feld muss FALSE sein, wenn der MDL kein IRP zugeordnet ist. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".

[in] ChargeQuota

Ist für das System reserviert. Treiber müssen diesen Parameter auf FALSE festlegen.

[in, out, optional] Irp

Zeiger auf einen IRP, der der MDL zugeordnet werden soll. Wenn der Irp-Zeiger ungleich NULL ist, wird die zugeordnete MDL gemäß dem Wert von SecondaryBuffer der MDL-Liste des angegebenen IRP zugeordnet.

Rückgabewert

IoAllocateMdl gibt einen Zeiger auf eine MDL zurück, oder, wenn die MDL nicht zugeordnet werden kann, wird NULL zurückgegeben.

Hinweise

IoAllocateMdl kann von einem Treiber verwendet werden, der einen Puffer in Teile aufteilen muss, die jeweils durch eine separate MDL zugeordnet sind, oder um einen vom Treiber zugewiesenen Puffer zuzuordnen. Der Treiber sollte MmBuildMdlForNonPagedPool mit der durch diesen Aufruf zugewiesenen MDL aufrufen, um eine MDL einzurichten, die einen vom Treiber zugewiesenen Puffer in einem pool ohne Auslagerung beschreibt.

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 Bytes, die diese Routine zuordnen kann, 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 SecondaryBuffer-ParameterFALSE ist, aktualisiert die Routine Irp-MdlAddress > so, dass auf die neue MDL verweist. Wenn SecondaryBufferTRUE ist, fügt die Routine die MDL am Ende der MDL-Kette hinzu, auf die Irp-MdlAddress > verweist.

Weitere Informationen zu MDLs finden Sie unter Verwenden von MDLs.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar ab Windows 2000.
Zielplattform Universell
Header wdm.h (einschließlich Wdm.h, Ntddk.h, Ntifs.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL

Weitere Informationen

IoBuildPartialMdl

IoFreeMdl

MmBuildMdlForNonPagedPool