Función NdisAllocateMdl (ndis/mdlapi.h)
La función NdisAllocateMdl asigna una MDL que describe el búfer de memoria en la dirección virtual especificada.
Sintaxis
NDIS_EXPORTED_ROUTINE MDL * NdisAllocateMdl(
[in] NDIS_HANDLE NdisHandle,
[in] PVOID VirtualAddress,
[in] ULONG Length
);
Parámetros
[in] NdisHandle
Identificador NDIS que se obtuvo durante la inicialización del autor de la llamada. Para obtener más información, consulte Obtención de identificadores de grupo.
[in] VirtualAddress
Puntero a la dirección virtual base del búfer que el MDL va a describir.
El parámetro VirtualAddress para NdisAllocateMdl solo acepta memoria del grupo no paginado. En otras palabras, requiere memoria de ExAllocatePool*(NonPagedNx), NdisAllocateMemoryWithTagPriorityo NdisMAllocateSharedMemory. En concreto, debe no usarse con memoria de la pila, el grupo paginado, los datos globales del controlador u otras regiones de memoria.
Si un controlador necesita crear una MDL para una de estas regiones de grupo no paginadas, debe usar las API de kernel adecuadas para ese tipo de memoria, como IoAllocateMdl combinadas con MmProbeAndLockPages.
[in] Length
Tamaño, en bytes, del búfer de memoria.
Valor devuelto
NdisAllocateMdl devuelve un puntero al MDL asignado. Si se produce un error en la asignación, el valor devuelto es NULL.
Observaciones
Todas las MDL que se asignan llamando a NdisAllocateMdl deben liberarse llamando a la función NdisFreeMdl.
NdisAllocateMdl asigna memoria y compila mdL en un paso. Este proceso es diferente de ioAllocateMdl, que solo asigna memoria para MDL, lo que significa que el autor de la llamada debe compilar la MDL llamando a MmBuildMdlForNonPagedPool o MmProbeAndLockPages.
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Se admite en NDIS 6.0 y versiones posteriores. |
de la plataforma de destino de | Universal |
versión mínima de UMDF | 2.33 |
encabezado de | ndis/mdlapi.h (incluya ndis.h) |
biblioteca de | Ndis.lib |
irQL | <= DISPATCH_LEVEL |
reglas de cumplimiento de DDI | Irql_NetBuffer_Function(ndis), NdisAllocateMdl(ndis) |