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 la MDL con 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 sección Comentarios que se muestra más adelante.
[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 un 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 sección Comentarios que se muestra más adelante.
[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 a MDL. Si el puntero irp no es NULL, el MDL asignado está asociado a la lista MDL de IRP especificada, según el valor de SecondaryBuffer.
Valor devuelto
IoAllocateMdl devuelve un puntero a un MDL o, si no se puede asignar MDL, devuelve NULL.
Comentarios
IoAllocateMdl puede ser utilizado por 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 se va a describir mediante MDL. 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 - sizeof(MDL)) / sizeof(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 que apunte al nuevo MDL. Si SecondaryBuffer es TRUE, la rutina agrega el MDL al final de la cadena MDL a la que apunta Irp-MdlAddress>.
Para obtener más información sobre las MDL, consulte Uso de MDL.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Disponible a partir de Windows 2000. |
Plataforma de destino | Universal |
Encabezado | wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h) |
Library | NtosKrnl.lib |
Archivo DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |