Compartir a través de


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.

importantes  

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)

Consulte también

ExAllocatePool

IoAllocateMdl

MmBuildMdlForNonPagedPool

mmProbeAndLockPages

NdisAllocateMemoryWithTagPriority

NdisFreeMdl

NdisMAllocateSharedMemory