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 deve essere descritto dal linguaggio MDL.

[in] Length

Specifica la lunghezza, in byte, del buffer che deve essere descritta dal linguaggio 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 il file MDL deve essere collegato al componente IRP. Tutti i buffer ad eccezione del primo buffer descritto da un file MDL in un IRP sono considerati buffer secondari. Questo campo deve essere FALSE se nessun IRP è associato al linguaggio 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 linguaggio MDL. Se il puntatore Irp è diverso da NULL, il file MDL allocato viene associato all'elenco MDL dell'IRP specificato, in base al valore di SecondaryBuffer.

Valore restituito

IoAllocateMdl restituisce un puntatore a un linguaggio MDL oppure, se non è possibile allocare il linguaggio 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 file MDL che descrive un buffer allocato dal driver nel pool non di paging.

Il parametro Length specifica le dimensioni del buffer che devono essere descritte dal linguaggio MDL. In Windows Server 2003, Windows XP e Windows 2000 la dimensione massima del buffer, in byte, che questa routine può allocare è PAGE_SIZE * (65535 - sizeof(MDL)) /sizeof(ULONG_PTR). In Windows Vista e Windows Server 2008, le dimensioni massime del buffer sono (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 IrpMdlAddress -> in modo che punti al nuovo file MDL. Se SecondaryBuffer è TRUE, la routine aggiunge il file MDL alla fine della catena MDL a cui punta IrpMdlAddress->.

Per altre informazioni sugli MCL, vedere Uso degli MCL.

Requisiti

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

Vedi anche

IoBuildPartialMdl

IoFreeMdl

MmBuildMdlForNonPagedPool