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, die MDL beschreiben soll.

[in] Length

Gibt die Länge in Bytes des Puffers 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 einem MDL in einem IRP beschrieben wird, werden als sekundäre Puffer betrachtet. Dieses Feld muss FALSCH sein, wenn kein IRP dem MDL 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 ein IRP, das dem MDL zugeordnet werden soll. Wenn der Irp-Zeiger nicht NULL ist, wird die zugewiesene MDL der angegebenen MDL-Liste des angegebenen IRP zugeordnet, entsprechend dem Wert von SecondaryBuffer.

Rückgabewert

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

Bemerkungen

IoAllocateMdl kann von einem Treiber verwendet werden, der einen Puffer in Teile umbrechen muss, die von einem separaten MDL zugeordnet sind oder einen treiberbasierten Puffer zuordnen möchten. Der Treiber sollte MmBuildMdlForNonPagedPool mit dem MDL aufrufen, der durch diesen Aufruf zugewiesen ist, um einen MDL einzurichten, der einen treiberzuweisungspuffer in nichtpaged Pool beschreibt.

Der Parameter "Length " gibt die Größe des Puffers an, der vom MDL beschrieben werden soll. In Windows Server 2003, Windows XP und Windows 2000 ist die maximale Puffergröße in Bytes PAGE_SIZE * (65535 - sizeof(MDL)) / sizeof(ULONG_PTR). In Windows Vista und Windows Server 2008 ist die maximale Puffergröße (2 Gigabyte - PAGE_SIZE). Ab Windows 7 und Windows Server 2008 R2 ist die maximale Puffergröße (4 Gigabyte - PAGE_SIZE).

Wenn der Parameter SecondaryBufferFALSE ist, aktualisiert die Routine Irp-MdlAddress>, um auf die neue MDL zu verweisen. Wenn SecondaryBufferTRUE ist, fügt die Routine die MDL am Ende der MDL-Kette hinzu, zu der Irp-MdlAddress > verweist.

Weitere Informationen zu MDLs finden Sie unter Verwenden von MDLs.

Requirements (Anforderungen)

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

Weitere Informationen

IoBuildPartialMdl

IoFreeMdl

MmBuildMdlForNonPagedPool