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 |