Freigeben über


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

Siehe auch

IoBuildPartialMdl-

IoFreeMdl-

MmBuildMdlForNonPagedPool