Compartir a través de


Función IoAllocateMdl (wdm.h)

La rutina IoAllocateMdl asigna una lista de descriptores de memoria (MDL) lo suficientemente grande como para asignar un búfer, dada la dirección inicial y la longitud del búfer. Opcionalmente, esta rutina asocia el MDL a un IRP.

Sintaxis

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

Parámetros

[in, optional] VirtualAddress

Puntero a la dirección virtual base del búfer que se va a describir.

[in] Length

Especifica la longitud, en bytes, del búfer que se va a describir en MDL. Para obtener más información, vea la siguiente sección Comentarios.

[in] SecondaryBuffer

Indica si el búfer es un búfer principal o secundario. Este parámetro determina cómo se va a vincular MDL al IRP. Todos los búferes excepto el primer búfer descrito por una MDL en un IRP se consideran búferes secundarios. Este campo debe ser FALSE si no hay ningún IRP asociado a MDL. Para obtener más información, vea la siguiente sección Comentarios.

[in] ChargeQuota

Reservado para uso del sistema. Los controladores deben establecer este parámetro en FALSE.

[in, out, optional] Irp

Puntero a un IRP que se va a asociar al MDL. Si el puntero irp no esNULL, el MDL asignado se asocia a la lista MDL de IRP especificada, según el valor de SecondaryBuffer.

Valor devuelto

ioAllocateMdl devuelve un puntero a una MDL o, si no se puede asignar MDL, devuelve NULL.

Observaciones

ioAllocateMdl puede usar un controlador que necesita dividir un búfer en partes, cada uno asignado por un MDL independiente o asignar un búfer asignado por el controlador. El controlador debe llamar a mmBuildMdlForNonPagedPool con la MDL asignada por esta llamada para configurar una MDL que describa un búfer asignado por el controlador en un grupo no paginado.

El parámetro Length especifica el tamaño del búfer que el MDL va a describir. En Windows Server 2003, Windows XP y Windows 2000, el tamaño máximo del búfer, en bytes, que esta rutina puede asignar es PAGE_SIZE * (65535 - tamaño de(MDL)) / tamaño de(ULONG_PTR). En Windows Vista y Windows Server 2008, el tamaño máximo del búfer es (2 gigabytes - PAGE_SIZE). A partir de Windows 7 y Windows Server 2008 R2, el tamaño máximo del búfer es (4 gigabytes- PAGE_SIZE).

Si el parámetro SecondaryBuffer es FALSE, la rutina actualiza irp:>mdlAddress para apuntar al nuevo MDL. Si SecondaryBuffer es TRUE, la rutina agrega la MDL al final de la cadena MDL a la que apunta Irp->MdlAddress.

Para obtener más información sobre las MDL, vea Using MDLs.

Requisitos

Requisito Valor
cliente mínimo admitido Disponible a partir de Windows 2000.
de la plataforma de destino de Universal
encabezado de wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
biblioteca de NtosKrnl.lib
DLL de NtosKrnl.exe
irQL <= DISPATCH_LEVEL

Consulte también

IoBuildPartialMdl

ioFreeMdl

MmBuildMdlForNonPagedPool