W_TCP_OFFLOAD_SEND_HANDLER función de devolución de llamada (ndischimney.h)

[La característica de descarga de chimenea TCP está en desuso y no se debe usar.]

NDIS llama a la función MiniportTcpOffloadSend para transmitir datos en una conexión TCP descargada.

Sintaxis

W_TCP_OFFLOAD_SEND_HANDLER WTcpOffloadSendHandler;

NDIS_STATUS WTcpOffloadSendHandler(
  [in] IN NDIS_HANDLE MiniportAdapterContext,
  [in] IN PVOID MiniportOffloadContext,
  [in] IN PNET_BUFFER_LIST NetBufferList
)
{...}

Parámetros

[in] MiniportAdapterContext

Identificador de un área de contexto asignada de destino de descarga en la que el destino de descarga mantiene información de estado sobre esta instancia del adaptador. El destino de descarga proporcionó este identificador a NDIS cuando llamó NdisMSetMiniportAttributes de su Función MiniportInitializeEx .

[in] MiniportOffloadContext

Puntero a una ubicación de memoria que contiene un valor PVOID. Este valor PVOID hace referencia al contexto de descarga de miniporte que contiene el objeto de estado de la conexión TCP en la que se van a transmitir los datos. El destino de descarga proporcionó este valor PVOID cuando descargó el objeto de estado de conexión TCP.

[in] NetBufferList

Puntero a una estructura NET_BUFFER_LIST . Esta estructura puede ser una estructura independiente o la primera estructura de una lista vinculada de NET_BUFFER_LIST estructuras. 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 que se van a transmitir. La NET_BUFFER_LIST y las estructuras asociadas están bloqueadas para que permanezcan residentes en la memoria física. Sin embargo, no se asignan a la memoria del sistema.

Valor devuelto

NDIS_STATUS_PENDING es el único valor devuelto permitido. Un destino de descarga siempre completa una solicitud de envío de forma asincrónica mediante una llamada a . NdisTcpOffloadSendComplete.

Comentarios

Un destino de descarga debe transmitir datos en primer lugar, primero en salir (FIFO). El orden de la lista vinculada de NET_BUFFER_LIST estructuras que pasa NDIS en NetBufferList representa el orden en el que el destino de descarga debe transmitir los datos de red. Además, un destino de descarga debe enviar los datos que recibe de varias llamadas al MiniportTcpOffloadSend en el orden en que se publicaron los datos.

Un destino de descarga debe aceptar todas las solicitudes de envío realizadas a su función MiniportTcpOffloadSend . Si un destino de descarga no puede completar una solicitud de envío inmediatamente, el destino de descarga debe poner en cola la solicitud hasta que pueda completarla. El destino de descarga debe usar el miembro MiniportReserved de una estructura de NET_BUFFER_LIST para enviar solicitudes en cola. Mientras una solicitud de envío está pendiente, el destino de descarga conserva la propiedad de las estructuras de NET_BUFFER_LIST y todos los recursos asociados a las estructuras de NET_BUFFER_LIST.

La pila de hosts serializa las solicitudes de envío por conexión. La pila no emitirá una solicitud de envío en una conexión mientras que otra solicitud de envío en esa conexión está en curso. Esto garantiza que el destino de descarga siempre recibe las solicitudes de envío en el orden correcto.

Sin embargo, tenga en cuenta que la pila de hosts puede llamar a la función MiniportTcpOffloadSend en una conexión antes de que el destino de descarga haya completado una o varias llamadas anteriores a la función MiniportTcpOffloadSend en esa misma conexión. Tenga en cuenta también que la pila de hosts puede llamar a la función MiniportTcpOffloadSend de un destino de descarga en una conexión mientras una o varias llamadas a la función MiniportTcpOffloadSend están en curso en otra conexión.

La función MiniportTcpOffloadSend debe sincronizar el acceso a sus colas internas de datos de red con las demás funciones MiniportXxx del destino de descarga que acceden a las mismas colas. Un destino de descarga puede usar bloqueos de número para sincronizar el acceso a las colas.

El destino de descarga debe (pero no es necesario para) establecer el bit de PSH en cada límite de NET_BUFFER_LIST. La manera recomendada de hacerlo es establecer el bit PSH en el último segmento creado a partir de los datos asociados a cada estructura de NET_BUFFER_LIST (es decir, los datos descritos por las estructuras de NET_BUFFER asociadas a la estructura de NET_BUFFER_LIST). Como alternativa, el destino de descarga puede establecer el bit PSH en el último segmento restante de la cola de envío antes de vaciar la cola de envío.

La pila de hosts no solicitará el destino de descarga para enviar datos urgentes.

Requisitos

Requisito Value
Plataforma de destino Windows
Encabezado ndischimney.h (incluya Ndischimney.h)
IRQL Cualquier nivel

Consulte también

MiniportInitializeEx

NET_BUFFER_LIST

NdisMSetMiniportAttributes

NdisTcpOffloadSendComplete