W_TCP_OFFLOAD_DISCONNECT_HANDLER 콜백 함수(ndischimney.h)

[TCP 굴뚝 오프로드 기능은 더 이상 사용되지 않으며 사용하지 않아야 합니다.]

MiniportTcpOffloadDisconnect 함수는 오프로드된 TCP 연결의 보내기 절반을 닫습니다. 또한 수행할 연결 끊김이 정상적인 연결 끊기인 경우 NDIS는 FIN 세그먼트를 보내기 전에 함수가 전송해야 하는 MiniportTcpOffloadDisconnect 함수에 애플리케이션 데이터를 제공할 수 있습니다.

구문

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
)
{...}

매개 변수

[in] MiniportAdapterContext

오프로드 대상이 어댑터의 이 instance 대한 상태 정보를 유지하는 오프로드 대상 할당 컨텍스트 영역에 대한 핸들입니다. 오프로드 대상은 이 핸들을 호출할 때 NDIS에 제공했습니다. NdisMSetMiniportAttributes MiniportInitializeEx 함수입니다.

[in] MiniportOffloadContext

PVOID 값이 포함된 메모리 위치에 대한 포인터입니다. 이 PVOID 값은 연결이 끊어질 TCP 연결에 대한 상태 개체가 포함된 미니포트 오프로드 컨텍스트를 참조합니다. 오프로드 대상은 TCP 연결 상태 개체를 오프로드할 때 이 PVOID 값을 제공했습니다.

[in] NetBufferList

단일 NET_BUFFER_LIST 구조체에 대한 포인터입니다. 하나의 NET_BUFFER 구조체만 이 NET_BUFFER_LIST 구조체와 연결됩니다.

[in] Flags

다음 값 중 하나로 오프로드 대상이 수행해야 하는 연결 끊기 유형입니다.

TCP_DISCONNECT_ABORTIVE_CLOSE

오프로드 대상은 RST 세그먼트를 전송하여 중단된 연결 끊기를 수행해야 합니다.

TCP_DISCONNECT_GRACEFUL_CLOSE

오프로드 대상은 FIN 세그먼트를 전송하여 정상적인 연결 끊기를 수행해야 합니다.

반환 값

MiniportTcpOffloadDisconnect 함수는 항상 NDIS_STATUS_PENDING 반환합니다. 오프로드 대상은 를 호출하여 연결 끊기 요청을 비동기적으로 완료합니다. NdisTcpOffloadDisconnectComplete.

설명

플래그 설정에 따라 MiniportTcpOffloadDisconnect 함수는 지정된 TCP 연결에서 중단된 연결 끊기 또는 정상적인 연결 끊기를 수행합니다.

중단 연결 끊기

플래그TCP_DISCONNECT_ABORTIVE_CLOSE 설정된 경우 오프로드 대상은 지정된 TCP 연결에서 RST 세그먼트를 전송하여 중단된 연결 끊기를 수행합니다.

참고 이는 오프로드 대상이 RST 세그먼트를 보낼 수 있는 유일한 instance.
 
를 호출하기 전에중단 연결 끊기를 완료하려면 NdisTcpOffloadDisconnectComplete 함수입니다. 오프로드 대상은 상태 값이 NDIS_STATUS_REQUEST_ABORTED 연결에 대한 모든 미해결 송신 요청을 완료해야 합니다. 오프로드 대상은 이 상태 값을 연결된 목록에 있는 각 NET_BUFFER_LIST 구조체의 Status 멤버에 씁니다. NdisTcpOffloadSendComplete 함수.

오프로드 대상이 RST 세그먼트를 보내기 전이나 후에 미해결 송신 요청을 종료하는지 여부는 중요하지 않습니다.

연결에 미해결 수신 표시 또는 이벤트 표시가 있는 경우 오프로드 대상은 RST 세그먼트를 보내기 전에 이러한 표시가 완료될 때까지 기다리지 않아야 합니다. 오프로드 대상은 연결에서 수신 세그먼트 처리를 즉시 중지해야 하며 클라이언트 애플리케이션에서 사용하지 않은 표시된 수신 데이터를 포함하여 수신 세그먼트를 승인하지 않아야 합니다.

Flags = 가 TCP_DISCONNECT_ABORTIVE_CLOSE경우 NetBufferList 포인터에서 참조하는 NET_BUFFER_LIST 구조와 연결된 NET_BUFFER 구조에는 데이터가 포함되지 않습니다. 즉, NET_BUFFER 구조체의 NetBufferHeader에 있는 NET_BUFFER_DATA 구조체의 DataLength 멤버는 0입니다.

정상적인 연결 끊기

플래그TCP_DISCONNECT_GRACEFUL_CLOSE 설정된 경우 오프로드 대상은 지정된 TCP 연결에서 FIN 세그먼트를 전송하여 정상적인 연결 끊기를 수행합니다.

FIN 세그먼트 이전에 보낼 사용자 데이터가 없는 경우 NetBufferList 포인터에서 참조하는 NET_BUFFER_LIST 구조와 연결된 NET_BUFFER 구조에는 데이터가 포함되지 않습니다. 보낼 사용자 데이터가 있는 경우 NET_BUFFER 구조와 연결된 메모리 설명자 목록(MDL)에는 전송할 사용자 데이터가 포함됩니다.

오프로드 대상은 FIN 세그먼트를 보내기 전에 전송된 사용자 데이터의 승인을 기다리지 않아야 합니다. 오프로드 대상은 사용자 데이터를 전송한 후 별도의 FIN 세그먼트를 보낼 수 있습니다. 또는 오프로드 대상은 보내는 사용자 데이터의 마지막 세그먼트의 TCP 헤더에서 FIN 비트를 설정할 수 있습니다.

오프로드 대상의 관점에서 FIN 세그먼트를 보내면 연결의 보내기 절반이 닫힙니다. 그러나 FIN 세그먼트를 보내면 연결의 수신 절반을 닫지 않습니다. 원격 호스트는 다음 중 하나를 오프로드 대상으로 전송하여 연결의 수신 절반을 종료합니다.

  • 정상적인 연결 끊기를 요청하는 FIN 세그먼트입니다.
  • 중단 연결 끊기를 요청하는 RST 세그먼트입니다.
FIN 세그먼트를 보낸 후 오프로드 대상은 원격 호스트가 정상 또는 중단 연결 끊기를 시작하거나 로컬 호스트가 연결의 오프로드를 종료하거나 중단된 연결 끊기를 시작할 때까지 연결에서 세그먼트를 수신할 수 있습니다.

오프로드 대상 호출 전 NdisTcpOffloadDisconnectComplete는 연결에 대한 모든 미해결 송신 요청을 오프로드 대상에 전달된 순서와 동일한 순서로 완료해야 합니다.

연결 끊기 요청에 대한 필수 응답

지정된 TCP 연결이 업로드되거나 중단되지 않는 한(예: 원격 호스트가 연결에서 RST 세그먼트를 보냈기 때문에) 오프로드 대상은 연결 끊기 요청에 실패하지 않아야 합니다. 오프로드 대상이 연결 해제 요청에 실패하면 호스트 스택은 나중에 연결 끊기 요청을 다시 발생시키지 않습니다.

연결 리소스 해제

오프로드 대상은 호스트 스택이 연결의 오프로드를 종료할 때까지 중단 또는 정상 연결 해제를 실행한 연결에 대한 리소스를 해제해서는 안 됩니다.

요구 사항

요구 사항
대상 플랫폼 Windows
헤더 ndischimney.h(Ndischimney.h 포함)
IRQL 모든 수준

추가 정보

MiniportInitializeEx

MiniportTerminateOffload

NET_BUFFER

NET_BUFFER_DATA

NET_BUFFER_LIST

NET_BUFFER_LIST_INFO

NdisAdvanceNetBufferDataStart

NdisMSetMiniportAttributes

NdisTcpOffloadDisconnectComplete

NdisTcpOffloadSendComplete