Funzione IoAllocateMdl (wdm.h)

La routine IoAllocateMdl alloca un elenco di descrittori di memoria (MDL) sufficientemente grande da eseguire il mapping di un buffer, in base all'indirizzo iniziale e alla lunghezza del buffer. Facoltativamente, questa routine associa il file MDL a un IRP.

Sintassi

PMDL IoAllocateMdl(
  [in, optional]      __drv_aliasesMem PVOID VirtualAddress,
  [in]                ULONG                  Length,
  [in]                BOOLEAN                SecondaryBuffer,
  [in]                BOOLEAN                ChargeQuota,
  [in, out, optional] PIRP                   Irp
);

Parametri

[in, optional] VirtualAddress

Puntatore all'indirizzo virtuale di base del buffer che il linguaggio MDL deve descrivere.

[in] Length

Specifica la lunghezza, in byte, del buffer che deve essere descritto dal file MDL. Per ulteriori informazioni, vedere la sezione Osservazioni successiva.

[in] SecondaryBuffer

Indica se il buffer è un buffer primario o secondario. Questo parametro determina il modo in cui deve essere collegato il file MDL all'IRP. Tutti i buffer, ad eccezione del primo buffer descritto da un MDL in un IRP, sono considerati buffer secondari. Questo campo deve essere FALSE se non è associato alcun IRP al file MDL. Per ulteriori informazioni, vedere la sezione Osservazioni successiva.

[in] ChargeQuota

Riservato per l'utilizzo nel sistema. I driver devono impostare questo parametro su FALSE.

[in, out, optional] Irp

Puntatore a un IRP da associare al file MDL. Se il puntatore Irp è diverso da NULL, il MDL allocato è associato all'elenco MDL di IRP specificato, in base al valore di SecondaryBuffer.

Valore restituito

IoAllocateMdl restituisce un puntatore a un MDL oppure, se non è possibile allocare MDL, restituisce NULL.

Commenti

IoAllocateMdl può essere usato da un driver che deve suddividere un buffer in parti, ognuna mappata da un MDL separato o per eseguire il mapping di un buffer allocato dal driver. Il driver deve chiamare MmBuildMdlForNonPagedPool con il file MDL allocato da questa chiamata per configurare un MDL che descrive un buffer allocato dal driver in un pool non di paging.

Il parametro Length specifica le dimensioni del buffer che devono essere descritte dal file MDL. In Windows Server 2003, Windows XP e Windows 2000, le dimensioni massime del buffer, in byte, che questa routine può allocare è PAGE_SIZE * (65535 - sizeof(MDL)) / sizeof(ULONG_PTR). In Windows Vista e Windows Server 2008 la dimensione massima del buffer è (2 gigabyte - PAGE_SIZE). A partire da Windows 7 e Windows Server 2008 R2, la dimensione massima del buffer è (4 gigabyte - PAGE_SIZE).

Se il parametro SecondaryBuffer è FALSE, la routine aggiorna Irp-MdlAddress > in modo che punti al nuovo MDL. Se SecondaryBuffer è TRUE, la routine aggiunge il file MDL alla fine della catena MDL a cui punta Irp-MdlAddress>.

Per altre informazioni sugli mdls, vedere Using MDLs.For more information about MDLs, see Using MDLs.

Requisiti

Requisito Valore
Client minimo supportato Disponibile a partire da Windows 2000.
Piattaforma di destinazione Universale
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Libreria NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL

Vedi anche

IoBuildPartialMdl

IoFreeMdl

MmBuildMdlForNonPagedPool