Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Cautela
En el caso de los procesadores ARM y ARM64, se recomienda encarecidamente que los escritores de controladores NDIS usen WDF DMA o WDM DMA en lugar de NDIS Scatter/Gather DMA.
Para obtener más información sobre WDF DMA, vea control de operaciones DMA en controladores kmDF.
Para obtener más información sobre WDM DMA, consulte los temas secundarios relacionados con DMA de Administración de entradas y salidas para controladores.
Los controladores de miniport llaman a la función NdisMAllocateSharedMemoryAsyncEx para asignar memoria adicional compartida entre el controlador y su NIC DMA maestra de bus, normalmente cuando el controlador de miniporte se está ejecutando bajo en los búferes de recepción de NIC disponibles.
Sintaxis
NDIS_STATUS NdisMAllocateSharedMemoryAsyncEx(
[in] NDIS_HANDLE MiniportDmaHandle,
[in] ULONG Length,
[in] BOOLEAN Cached,
[in] PVOID Context
);
Parámetros
[in] MiniportDmaHandle
Identificador de un área de contexto que NDIS usa para administrar un recurso DMA. El autor de la llamada obtuvo este identificador llamando al función NdisMRegisterScatterGatherDma.
[in] Length
Número de bytes que se van a asignar.
[in] Cached
Este parámetro se omite (la memoria almacenada en caché siempre se usa en sistemas x86 y x64).
[in] Context
Puntero al contexto determinado por el controlador que se va a pasar al MiniportSharedMemoryAllocateComplete función cuando se llama a ella.
Valor devuelto
NdisMAllocateSharedMemoryAsyncEx puede devolver una de las siguientes opciones:
Código devuelto | Descripción |
---|---|
|
NDIS llamará a la función MiniportSharedMemoryAllocateComplete y proporcionará información que describe la memoria compartida asignada. Si se produce un error en el intento de asignar memoria compartida, las llamadas NDIS miniportSharedMemoryAllocateComplete y pasan punteros de NULL. |
|
La memoria solicitada no se pudo asignar en este momento. Si NdisMAllocateSharedMemoryAsyncEx devuelve este estado, es posible que una llamada posterior con los mismos parámetros se realice correctamente, en función de si los recursos del sistema están disponibles. |
Observaciones
Este miniportador normalmente mantiene una o varias variables de estado para realizar un seguimiento del número de búferes de memoria compartidos disponibles para las transferencias entrantes. Cuando el número de búferes disponibles alcanza un bajo determinado por el controlador, el controlador de miniporta llama a NdisMAllocateSharedMemoryAsyncEx para asignar más espacio de búfer en la memoria compartida. Cuando el número de búferes disponibles sube a un alto determinado por el controlador, el controlador de miniporta llama a NdisMFreeSharedMemory una o varias veces para liberar sus asignaciones dinámicas anteriores.
Normalmente, este tipo de controlador de minipuerto conserva el bloque de memoria compartida que su función de MiniportInitializeEx asignada con NdisMAllocateSharedMemory hasta que se quita una NIC. Cuando se quita la NIC, NDIS llama a la función miniporthaltEx del controlador de miniport. Esta asignación es suficiente para controlar una demanda media de transferencias a través de la NIC.
Un controlador de miniport debe establecer un límite en la cantidad de memoria compartida que puede asignar. Este límite es específico del controlador y debe ser lo suficientemente alto para que el controlador no se quede sin búferes. No et un límite excesivamente alto, ya que esto podría dar lugar a un consumo desperdiciado de memoria compartida que podría reducir el rendimiento del sistema.
Cualquier controlador de miniport que llame a NdisMAllocateSharedMemoryAsyncEx o NdisMAllocateSharedMemory debe liberar todas las asignaciones pendientes con una o varias llamadas a NdisMFreeSharedMemory cuando se quita su NIC.
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Se admite en NDIS 6.0 y versiones posteriores. |
de la plataforma de destino de | Universal |
encabezado de | ndis.h (incluya Ndis.h) |
irQL | <= DISPATCH_LEVEL |
reglas de cumplimiento de DDI | Irql_Gather_DMA_Function(ndis) |