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 |