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.
NDIS llama a la función MiniportSendNetBufferLists para transmitir datos de red contenidos en una lista vinculada de estructuras de NET_BUFFER_LIST.
Sintaxis
MINIPORT_SEND_NET_BUFFER_LISTS MiniportSendNetBufferLists;
void MiniportSendNetBufferLists(
[in] NDIS_HANDLE MiniportAdapterContext,
[in] PNET_BUFFER_LIST NetBufferList,
[in] NDIS_PORT_NUMBER PortNumber,
[in] ULONG SendFlags
)
{...}
Parámetros
[in] MiniportAdapterContext
Identificador de un área de contexto que el controlador de miniporta asignó en su función MiniportInitializeEx. El controlador de miniporte usa este área de contexto para mantener la información de estado sobre un adaptador.
[in] NetBufferList
Puntero a la primera estructura NET_BUFFER_LIST de una lista vinculada de estructuras de NET_BUFFER_LIST. Cada estructura NET_BUFFER_LIST de la lista describe una lista de estructuras de NET_BUFFER. Cada NET_BUFFER estructura de la lista se asigna a una cadena de MDL. Las MDL contienen los datos de red.
[in] PortNumber
Número de puerto que identifica un puerto de adaptador de miniporte. Para asignar un número de puerto del adaptador de miniporte, llame a la función NdisMAllocatePort. Un valor cero identifica el puerto predeterminado de un adaptador de miniport.
[in] SendFlags
Marcas que definen atributos para la operación de envío. Las marcas se pueden combinar con una operación OR. Para borrar todas las marcas, establezca este miembro en cero. Esta función admite las marcas siguientes:
NDIS_SEND_FLAGS_DISPATCH_LEVEL
Especifica que el IRQL actual es DISPATCH_LEVEL. Para obtener más información sobre esta marca, vea Dispatch IRQL Tracking.
NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK
Especifica que NDIS debe comprobar si hay bucle invertido. De forma predeterminada, NDIS no devuelve datos al controlador que envió la solicitud de envío. Un controlador que sobrepone este comportamiento puede invalidar este comportamiento estableciendo esta marca. Cuando se establece esta marca, NDIS identifica todas las estructuras de NET_BUFFER que contienen datos que coinciden con los criterios de recepción del enlace. NDIS indica NET_BUFFER estructuras que coinciden con los criterios para el controlador demasiado excesivo. Esta marca no afecta a la comprobación de bucle invertido o bucle invertido en otros enlaces.
Valor devuelto
Ninguno
Observaciones
miniportSendNetBufferLists es una función necesaria para los controladores de miniport. Cuando un controlador sobrepuesto llama a la función NdisSendNetBufferLists, NDIS llama a la función MiniportSendNetBufferLists del controlador de miniport enlazado.
Al transmitir los datos de red que NDIS pasa en el parámetro NetBufferLists, el controlador de miniporte debe usar las siguientes directrices:
- Se debe conservar el orden de las estructuras de NET_BUFFER en cada estructura NET_BUFFER_LIST.
- El orden de las estructuras de NET_BUFFER_LIST debe conservarse si se van a transmitir en la misma conexión.
-
Si las estructuras de NET_BUFFER_LIST se van a transmitir en diferentes conexiones, se pueden dividir en varias colas de transmisión si se usan las siguientes características. En este caso, se debe conservar el orden de las estructuras de NET_BUFFER_LIST para cada conexión.
- Escalado lateral de recepción (RSS) (el valor hash RSS de la estructura NET_BUFFER_LIST se puede usar como índice en la tabla de direccionamiento indirecto RSS).
- Cola de máquinas virtuales (VMQ) (el identificador de cola de la cola saliente se establece en el NetBufferListFilteringInfo información de OOB. Para obtener más información, consulte ruta de transmisión de VMQ).
- IEEE 802.1 Data Center Bridging (DCB) (Puede desactivar la clase de tráfico (TC).)
- IEEE 802.1p (puede desactivar etiquetas de 802.1p sin DCB).
Los controladores de miniport aceptan todas las solicitudes de envío que realiza NDIS mediante una llamada a la función MiniportSendNetBufferLists. Si un controlador de miniporte no puede completar inmediatamente una solicitud de envío, el controlador debe contener la solicitud en una cola hasta que pueda completar la solicitud. Mientras una solicitud de envío está pendiente, el controlador de miniporte conserva la propiedad de las estructuras de NET_BUFFER_LIST y todos los recursos asignados por protocolo asociados a las estructuras de NET_BUFFER_LIST.
El controlador de miniport debe llamar al función NdisMSendNetBufferListsComplete para completar las solicitudes de envío de todas las estructuras de NET_BUFFER_LIST. Para mejorar el rendimiento del sistema, el controlador puede crear una lista vinculada que contenga las estructuras de NET_BUFFER_LIST de varias solicitudes de envío. A continuación, el controlador puede pasar una lista vinculada de este tipo en una sola llamada a NdisMSendNetBufferListsComplete.NET_BUFFER_LIST estructuras y otros recursos asociados deben ser tratados como inaccesibles por el controlador de miniport en cuanto el controlador llama a NdisMSendNetBufferListsComplete.
La función MiniportSendNetBufferLists debe sincronizar el acceso a sus colas internas de datos de red con las demás funciones MiniportXxx del controlador que acceden a las mismas colas. Un controlador de miniporte puede usar bloqueos de número para sincronizar el acceso a las colas.
Los controladores de protocolo son responsables de determinar qué datos de red se requieren, en función del tipo medio que seleccionó el controlador de miniporte enlazado. Sin embargo, un controlador de protocolo puede proporcionar datos de red que especifican paquetes más cortos que el tamaño mínimo del paquete para el medio seleccionado. En este caso, MiniportSendNetBufferLists deben rellenar los paquetes con ceros si el medio seleccionado impone un requisito de longitud mínima en el tamaño del paquete de transmisión.
Si el controlador de miniporte establece la marca NDIS_MAC_OPTION_NO_LOOPBACK cuando NDIS consulta el OID_GEN_MAC_OPTIONS OID, el controlador de miniporte no debe intentar volver a recorrer los datos de red. NDIS proporciona compatibilidad con bucle invertido de software para este tipo de controlador.
NDIS llama a miniportSendNetBufferLists en IRQL<= DISPATCH_LEVEL.
Ejemplos de
Para definir una función MiniportSendNetBufferLists, primero debe proporcionar una declaración de función que identifique el tipo de función que va a definir. Windows proporciona un conjunto de tipos de función para controladores. Declarar una función mediante los tipos de función ayuda a análisis de código para controladores, comprobador de controladores estáticos (SDV) y otras herramientas de comprobación encuentran errores y es un requisito para escribir controladores para el sistema operativo Windows.Por ejemplo, para definir una función MiniportSendNetBufferLists denominada "MySendNetBufferLists", use el tipo MINIPORT_SEND_NET_BUFFER_LISTS tal como se muestra en este ejemplo de código:
MINIPORT_SEND_NET_BUFFER_LISTS MySendNetBufferLists;
A continuación, implemente la función de la siguiente manera:
_Use_decl_annotations_
VOID
MySendNetBufferLists(
NDIS_HANDLE MiniportAdapterContext,
PNET_BUFFER_LIST NetBufferList,
NDIS_PORT_NUMBER PortNumber,
ULONG SendFlags
)
{...}
El tipo de función MINIPORT_SEND_NET_BUFFER_LISTS se define en el archivo de encabezado Ndis.h. Para identificar con más precisión los errores al ejecutar las herramientas de análisis de código, asegúrese de agregar la anotación Use_decl_annotations a la definición de función. La anotación Use_decl_annotations garantiza que se usen las anotaciones que se aplican al tipo de función MINIPORT_SEND_NET_BUFFER_LISTS en el archivo de encabezado. Para obtener más información sobre los requisitos de las declaraciones de función, vea Declaración de funciones mediante el uso de tipos de roles de función para controladores NDIS.
Para obtener información sobre Use_decl_annotations, vea Anotación del comportamiento de la función.
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Se admite en NDIS 6.0 y versiones posteriores. |
de la plataforma de destino de | Windows |
encabezado de | ndis.h (incluya Ndis.h) |
irQL | <= DISPATCH_LEVEL |
reglas de cumplimiento de DDI | NdisTimedDataHang, NdisTimedDataSend |