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