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 debe usarse].
La función MiniportTcpOffloadDisconnect cierra la mitad del 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 MiniportTcpOffloadDisconnect función 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 para que se desconecte la conexión TCP. El destino de descarga proporcionó este valor PVOID cuando descargó el objeto de estado de conexión TCP.
[in] NetBufferList
Puntero a una sola estructura NET_BUFFER_LIST. Solo una estructura NET_BUFFER está asociada a esta estructura 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 mediante el envío de un segmento RST.
TCP_DISCONNECT_GRACEFUL_CLOSE
El destino de descarga debe realizar una desconexión correcta mediante el envío de 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.
Observaciones
Según la configuración Marcas de, la función MiniportTcpOffloadDisconnect realiza una desconexión anulativa o una desconexión correcta en la conexión TCP especificada.
desconexión abortiva
Si marcas 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 NET_BUFFER asociada a la estructura 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 la NetBufferHeader de la estructura NET_BUFFER es cero.
desconexión correcta
Si marcas se establece en TCP_DISCONNECT_GRACEFUL_CLOSE, el destino de descarga realiza una desconexión correcta mediante el envío de 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 de 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 de NET_BUFFER contienen los datos de usuario que se van a enviar.
El destino de descarga no debe esperar 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 la recepción de la conexión. El host remoto finaliza la mitad de la recepción de la conexión mediante el envío de cualquiera de los siguientes elementos al destino de descarga:
- Un segmento FIN, que solicita una desconexión correcta.
- Un segmento RST, que solicita una desconexión anulativa.
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 | Valor |
---|---|
de la plataforma de destino de | Windows |
encabezado de | ndischimney.h (incluya Ndischimney.h) |
irQL | Cualquier nivel |