W_TCP_OFFLOAD_DISCONNECT_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.]

La función MiniportTcpOffloadDisconnect cierra la mitad de envío de una conexión TCP descargada. Además, si la desconexión que se va a realizar es una desconexión correcta, NDIS puede proporcionar datos de aplicación a la función MiniportTcpOffloadDisconnect que la función debe transmitir antes de enviar un segmento FIN.

Sintaxis

W_TCP_OFFLOAD_DISCONNECT_HANDLER WTcpOffloadDisconnectHandler;

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

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 que se va a desconectar. El destino de descarga proporcionó este valor PVOID cuando descargó el objeto de estado de conexión TCP.

[in] NetBufferList

Puntero a una única estructura de NET_BUFFER_LIST . Solo se asocia una estructura de NET_BUFFER a esta estructura de NET_BUFFER_LIST.

[in] Flags

Como uno de los siguientes valores, el tipo de desconexión que debe realizar el destino de descarga:

TCP_DISCONNECT_ABORTIVE_CLOSE

El destino de descarga debe realizar una desconexión anulativa enviando un segmento RST.

TCP_DISCONNECT_GRACEFUL_CLOSE

El destino de descarga debe realizar una desconexión correcta enviando un segmento FIN.

Valor devuelto

La función MiniportTcpOffloadDisconnect siempre devuelve NDIS_STATUS_PENDING. El destino de descarga completa la solicitud de desconexión de forma asincrónica mediante una llamada a . NdisTcpOffloadDisconnectComplete.

Comentarios

Dependiendo de la configuración Marcas , la función MiniportTcpOffloadDisconnect realiza una desconexión abortiva o una desconexión correcta en la conexión TCP especificada.

Desconexión abortiva

Si Flags se establece en TCP_DISCONNECT_ABORTIVE_CLOSE, el destino de descarga realiza una desconexión abortiva enviando un segmento RST en la conexión TCP especificada.

Nota Esta es la única instancia en la que un destino de descarga puede enviar un segmento RST.
 
Antes de llamar a La función NdisTcpOffloadDisconnectComplete para completar la desconexión abortiva, el destino de descarga debe completar todas las solicitudes de envío pendientes en la conexión con un valor de estado de NDIS_STATUS_REQUEST_ABORTED. El destino de descarga escribe este valor de estado en el miembro Status de cada estructura de NET_BUFFER_LIST de la lista vinculada que pasa a la Función NdisTcpOffloadSendComplete .

No importa si el destino de descarga finaliza las solicitudes de envío pendientes antes o después de enviar el segmento RST.

Si hay indicaciones de recepción pendientes o indicaciones de evento en la conexión, el destino de descarga no debe esperar a que se completen estas indicaciones antes de enviar un segmento RST. El destino de descarga debe detener inmediatamente el procesamiento de segmentos de recepción en la conexión y no confirmar ningún segmento de recepción, incluidos los datos de recepción indicados que la aplicación cliente no ha consumido.

Cuando marcas = TCP_DISCONNECT_ABORTIVE_CLOSE, la estructura de NET_BUFFER asociada a la estructura de NET_BUFFER_LIST a la que hace referencia el puntero NetBufferList no contiene datos. Es decir, el miembro DataLength de la estructura NET_BUFFER_DATA de NetBufferHeader de la estructura NET_BUFFER es cero.

Desconexión correcta

Si Flags se establece en TCP_DISCONNECT_GRACEFUL_CLOSE, el destino de descarga realiza una desconexión correcta enviando un segmento FIN en la conexión TCP especificada.

Si no hay datos de usuario que se van a enviar antes del segmento FIN, la estructura de NET_BUFFER asociada a la estructura de NET_BUFFER_LIST a la que hace referencia el puntero NetBufferList no contiene datos. Si hay datos de usuario que se van a enviar, las listas de descriptores de memoria (MDL) asociadas a la estructura NET_BUFFER contienen los datos de usuario que se van a enviar.

El destino de descarga no debe esperar a una confirmación de los datos de usuario transmitidos antes de enviar un segmento FIN. El destino de descarga puede enviar un segmento FIN independiente después de transmitir los datos de usuario o el destino de descarga puede establecer el bit FIN en el encabezado TCP del último segmento de datos de usuario que envía.

Desde la perspectiva del destino de descarga, el envío de un segmento FIN cierra la mitad de envío de la conexión. Sin embargo, el envío de un segmento FIN no cierra la mitad de recepción de la conexión. El host remoto finaliza la mitad de recepción de la conexión mediante el envío de cualquiera de las siguientes acciones al destino de descarga:

  • Un segmento FIN, que solicita una desconexión correcta.
  • Un segmento RST, que solicita una desconexión abortiva.
Después de enviar un segmento FIN, el destino de descarga puede recibir segmentos en la conexión hasta que el host remoto inicia una desconexión correcta o abortiva o hasta que el host local finaliza la descarga de la conexión o inicia una desconexión abortiva.

Antes de las llamadas de destino de descarga NdisTcpOffloadDisconnectComplete, debe completar todas las solicitudes de envío pendientes en la conexión en el mismo orden en el que se entregaron al destino de descarga.

Respuesta obligatoria a una solicitud de desconexión

Un destino de descarga no debe producir un error en una solicitud de desconexión a menos que se cargue la conexión TCP especificada o se anule (por ejemplo, porque el host remoto envió un segmento RST en la conexión). Si un destino de descarga produce un error en una solicitud de desconexión, la pila de hosts no volverá a emitir la solicitud de desconexión más adelante.

Liberar recursos de conexión

El destino de descarga no debe liberar recursos para la conexión en la que ha emitido una desconexión anulativa o correcta hasta que la pila del host finaliza la descarga de la conexión.

Requisitos

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

Consulte también

MiniportInitializeEx

MiniportTerminateOffload

NET_BUFFER

NET_BUFFER_DATA

NET_BUFFER_LIST

NET_BUFFER_LIST_INFO

NdisAdvanceNetBufferDataStart

NdisMSetMiniportAttributes

NdisTcpOffloadDisconnectComplete

NdisTcpOffloadSendComplete