MINIPORT_CO_SEND_NET_BUFFER_LISTS función de devolución de llamada (ndis.h)
La función MiniportCoSendNetBufferLists transmite datos de red contenidos en una lista vinculada especificada de estructuras NET_BUFFER_LIST .
Sintaxis
MINIPORT_CO_SEND_NET_BUFFER_LISTS MiniportCoSendNetBufferLists;
void MiniportCoSendNetBufferLists(
[in] NDIS_HANDLE MiniportVcContext,
[in] PNET_BUFFER_LIST NetBufferLists,
[in] ULONG SendFlags
)
{...}
Parámetros
[in] MiniportVcContext
Identificador de un área de contexto asignada por controlador de minipuerto en la que el controlador de minipuerto mantiene su estado de conexión por virtual (VC). El controlador de minipuerto proporcionó este controlador a NDIS desde su función MiniportCoCreateVc .
[in] NetBufferLists
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 estructura NET_BUFFER de la lista se asigna a una cadena de listas de descriptores de memoria (MDL). Las MDL contienen los datos de red que miniportCoSendNetBufferLists transmite.
[in] SendFlags
Marcas que definen atributos para la operación de envío. Las marcas se pueden combinar con una operación OR bit a bit. Para borrar todas las marcas, establezca este parámetro en cero. MiniportCoSendNetBufferLists admite las marcas siguientes:
NDIS_SEND_FLAGS_DISPATCH_LEVEL
Opcionalmente, el autor de la llamada puede establecer esta marca si el IRQL actual está DISPATCH_LEVEL. Para obtener más información sobre esta marca, vea Dispatch IRQL Tracking.
NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK
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 sobreapoderado puede invalidar este comportamiento estableciendo la marca NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK . 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 del controlador de sobreaprovisionamiento. Esta marca no afecta a la comprobación de bucle invertido ni al bucle invertido en otros enlaces.
Valor devuelto
None
Observaciones
La función MiniportCoSendNetBufferLists es necesaria para los controladores de miniporte de CoNDIS. Cuando un controlador de sobreaprovisionamiento llama a La función NdisCoSendNetBufferLists , NDIS llama a la función MiniportCoSendNetBufferLists del controlador de miniporte enlazado.
El orden de la lista vinculada de NET_BUFFER_LIST estructuras que NDIS pasa en NetBufferLists representa el orden en el que el controlador de miniporte debe transmitir los datos de red. Además, un controlador de minipuerto debe enviar las estructuras NET_BUFFER_LIST desde varias llamadas MiniportCoSendNetBufferLists en el orden en que el controlador de miniporte recibió las estructuras.
Los controladores de minipuerto de CoNDIS deben aceptar todas las solicitudes de envío que realiza NDIS llamando a la función MiniportCoSendNetBufferLists . Si un controlador de minipuerto 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 minipuerto conserva la propiedad de las estructuras de NET_BUFFER_LIST y todos los recursos asociados a las estructuras de NET_BUFFER_LIST .
El controlador de minipuerto debe llamar al Función NdisMCoSendNetBufferListsComplete para completar todas las solicitudes de envío de CoNDIS. Para mejorar el rendimiento del equipo, el controlador puede crear una lista vinculada que contenga las estructuras de NET_BUFFER_LIST a partir de varias solicitudes de envío. A continuación, el controlador puede pasar esta lista vinculada en una sola llamada a NdisMCoSendNetBufferListsComplete.
Además, debe suponer que el controlador de minipuerto no puede acceder a las estructuras de NET_BUFFER_LIST y otros recursos asociados tan pronto como el controlador llame a NdisMCoSendNetBufferListsComplete.
La función MiniportCoSendNetBufferLists 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 minipuerto 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 son necesarios, en función del tipo medio seleccionado por 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, MiniportCoSendNetBufferLists debe 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.
NDIS llama a MiniportCoSendNetBufferLists en IRQL<= DISPATCH_LEVEL.
Ejemplos
Para definir una función MiniportCoSendNetBufferLists , primero debe proporcionar una declaración de función que identifique el tipo de función que está definiendo. Windows proporciona un conjunto de tipos de función para controladores. Declarar una función mediante los tipos de función ayuda a Code Analysis for Drivers, Static Driver Verifier (SDV) y otras herramientas de comprobación a encontrar errores y es un requisito para escribir controladores para el sistema operativo Windows.Por ejemplo, para definir una función MiniportCoSendNetBufferLists denominada "MyCoSendNetBufferLists", use el tipo de MINIPORT_CO_SEND_NET_BUFFER_LISTS como se muestra en este ejemplo de código:
MINIPORT_CO_SEND_NET_BUFFER_LISTS MyCoSendNetBufferLists;
A continuación, implemente la función de la siguiente manera:
_Use_decl_annotations_
VOID
MyCoSendNetBufferLists(
NDIS_HANDLE MiniportVcContext,
PNET_BUFFER_LIST NetBufferLists,
ULONG SendFlags
)
{...}
El tipo de función MINIPORT_CO_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_CO_SEND_NET_BUFFER_LISTS en el archivo de encabezado. Para obtener más información sobre los requisitos de las declaraciones de función, consulte 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, consulte Anotación del comportamiento de la función.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Se admite en NDIS 6.0 y versiones posteriores. |
Plataforma de destino | Windows |
Encabezado | ndis.h (incluya Ndis.h) |
IRQL | <= DISPATCH_LEVEL |