다음을 통해 공유


W_TCP_OFFLOAD_SEND_HANDLER 콜백 함수(ndischimney.h)

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

NDIS는 MiniportTcpOffloadSend 함수를 호출하여 오프로드된 TCP 연결에서 데이터를 전송합니다.

구문

W_TCP_OFFLOAD_SEND_HANDLER WTcpOffloadSendHandler;

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

매개 변수

[in] MiniportAdapterContext

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

[in] MiniportOffloadContext

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

[in] NetBufferList

NET_BUFFER_LIST 구조체에 대한 포인터입니다. 이 구조체는 독립 실행형 구조체이거나 연결된 NET_BUFFER_LIST 구조 목록의 첫 번째 구조체일 수 있습니다. 목록의 각 NET_BUFFER_LIST 구조체는 NET_BUFFER 구조의 목록을 설명합니다. 목록의 각 NET_BUFFER 구조는 MDL(메모리 설명자 목록) 체인에 매핑됩니다. MDL에는 전송할 데이터가 포함됩니다. NET_BUFFER_LIST 및 관련 구조체는 잠겨 있으므로 실제 메모리에 상주합니다. 그러나 시스템 메모리에 매핑되지 않습니다.

반환 값

NDIS_STATUS_PENDING 허용되는 유일한 반환 값입니다. 오프로드 대상은 항상 를 호출하여 비동기적으로 보내기 요청을 완료합니다. NdisTcpOffloadSendComplete.

설명

오프로드 대상은 FIFO(선제출) 순서로 데이터를 먼저 전송해야 합니다. NDIS가 NetBufferList에서 전달하는 연결된 NET_BUFFER_LIST 구조 목록의 순서는 오프로드 대상이 네트워크 데이터를 전송해야 하는 순서를 나타냅니다. 또한 오프로드 대상은 여러 호출에서 수신하는 데이터를 데이터가 게시된 순서대로 MiniportTcpOffloadSend 로 보내야 합니다.

오프로드 대상은 MiniportTcpOffloadSend 함수에 대한 모든 보내기 요청을 수락해야 합니다. 오프로드 대상이 송신 요청을 즉시 완료할 수 없는 경우 오프로드 대상은 요청을 완료할 때까지 큐에 대기해야 합니다. 오프로드 대상은 NET_BUFFER_LIST 구조의 MiniportReserved 멤버를 사용하여 보내기 요청을 큐에 추가해야 합니다. 송신 요청이 보류 중인 동안 오프로드 대상은 NET_BUFFER_LIST 구조체 및 NET_BUFFER_LIST 구조와 연결된 모든 리소스의 소유권을 유지합니다.

호스트 스택은 연결별로 전송 요청을 직렬화합니다. 해당 연결에 대한 다른 송신 요청이 진행 중인 동안 스택은 연결에 대한 송신 요청을 실행하지 않습니다. 이렇게 하면 오프로드 대상이 항상 올바른 순서로 보내기 요청을 받습니다.

그러나 호스트 스택은 오프로드 대상이 동일한 연결에서 MiniportTcpOffloadSend 함수에 대한 하나 이상의 이전 호출을 완료하기 전에 연결에서 MiniportTcpOffloadSend 함수를 호출할 수 있습니다. 또한 호스트 스택은 다른 연결에서 MiniportTcpOffloadSend 함수에 대한 하나 이상의 호출이 진행되는 동안 한 연결에서 오프로드 대상의 MiniportTcpOffloadSend 함수를 호출할 수 있습니다.

MiniportTcpOffloadSend 함수는 동일한 큐에 액세스하는 오프로드 대상의 다른 MiniportXxx 함수와 네트워크 데이터의 내부 큐에 대한 액세스를 동기화해야 합니다. 오프로드 대상은 스핀 잠금을 사용하여 큐에 대한 액세스를 동기화할 수 있습니다.

오프로드 대상은 각 NET_BUFFER_LIST 경계에서 PSH 비트를 설정해야 하지만 필요하지는 않습니다. 이 작업을 수행하는 권장 방법은 각 NET_BUFFER_LIST 구조와 연결된 데이터(즉, NET_BUFFER_LIST 구조와 연결된 NET_BUFFER 구조체에서 설명한 데이터)에서 만든 마지막 세그먼트에서 PSH 비트를 설정하는 것입니다. 또는 오프로드 대상은 송신 큐를 비우기 전에 송신 큐의 마지막 남은 세그먼트에서 PSH 비트를 설정할 수 있습니다.

호스트 스택은 긴급 데이터를 보내도록 오프로드 대상을 요청하지 않습니다.

요구 사항

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

추가 정보

MiniportInitializeEx

NET_BUFFER_LIST

NdisMSetMiniportAttributes

NdisTcpOffloadSendComplete