NDIS_TCP_OFFLOAD_SEND_COMPLETE 콜백 함수(ndischimney.h)

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

오프로드 대상은 NdisTcpOffloadSendComplete 함수를 호출하여 오프로드 대상의 MiniportTcpOffloadSend 함수에 대해 수행된 하나 이상의 보내기 요청을 완료합니다.

구문

NDIS_TCP_OFFLOAD_SEND_COMPLETE NdisTcpOffloadSendComplete;

void NdisTcpOffloadSendComplete(
  [in] IN NDIS_HANDLE NdisMiniportHandle,
  [in] IN PNET_BUFFER_LIST NetBufferList
)
{...}

매개 변수

[in] NdisMiniportHandle

에 대한 이전 호출에서 오프로드 대상이 얻은 핸들입니다. NdisMRegisterMiniportDriver 함수.

[in] NetBufferList

NET_BUFFER_LIST 구조체에 대한 포인터입니다. 이 구조체는 독립 실행형 구조체이거나 연결된 NET_BUFFER_LIST 구조 목록의 첫 번째 구조체일 수 있습니다. 오프로드 대상은 해당 구조체에 대한 하나 이상의 호출에서 이러한 구조를 획득했습니다. MiniportTcpOffloadSend 함수입니다.

반환 값

없음

설명

시스템 성능을 향상시키기 위해 오프로드 대상은 MiniportTcpOffloadSend 함수에 대한 여러 호출의 NET_BUFFER_LIST 구조를 포함하는 연결된 목록을 만들 수 있습니다. 그런 다음 드라이버는 NdisTcpOffloadSendComplete 함수에 대한 단일 호출에서 이러한 연결된 목록을 전달할 수 있습니다.

하나 이상의 보내기 요청을 완료하기 전에 오프로드 대상은 NdisTcpOffloadSendComplete 함수에 전달하는 각 NET_BUFFER_LIST 구조에 대해 다음을 수행해야 합니다.

  • 상태 멤버에 상태 값을 씁니다.
    • NDIS_STATUS_SUCCESS NET_BUFFER_LIST 연결된 모든 데이터가 오프로드 대상에 의해 성공적으로 전송되었으며 원격 호스트에서 받은 오프로드 대상이 전송된 모든 데이터에 대한 승인을 표시합니다. 이는 오프로드가 아닌 송신 함수와 다릅니다.승인을 모니터링하지 않는 MiniportSendNetBufferLists입니다.
    • NDIS_STATUS_SUCCESS 이외의 상태 값(예: NDIS_STATUS_REQUEST_ABORTED 또는 NDIS_STATUS_UPLOAD_IN_PROGRESS 상태 값)은 전송 데이터가 성공적으로 승인되지 않음을 나타냅니다. 오프로드 대상은 데이터를 보냈거나 보내지 않았을 수 있습니다. 오프로드 대상은 이러한 구조와 연결된 데이터를 더 이상 보내지 않고 연결된 목록의 모든 후속 NET_BUFFER_LIST 구조에 대한 보내기 작업에 실패해야 합니다. 오프로드 대상은 데이터를 보낼 TCP 연결의 오프로드가 종료될 때 NDIS_STATUS_UPLOAD_IN_PROGRESS 상태 값을 씁니다. 이 경우 호스트 스택은 TCP 데이터를 큐에 대기시키고 처리합니다. 오프로드 대상은 데이터를 보낼 TCP 연결에서 RST 세그먼트를 받은 경우 NDIS_STATUS_REQUEST_ABORTED 상태 값을 씁니다. 이 경우 호스트 스택은 TCP 데이터를 처리하지 않습니다.
    • 오프로드 대상은 연결된 목록에서 최대 하나의 NET_BUFFER_LIST 구조에 대한 부분 보내기를 완료해야 합니다. 오프로드 대상은 NDIS_STATUS_SUCCESS 이외의 상태 값(예: NDIS_STATUS_ABORTED 또는 NDIS_STATUS_UPLOAD_IN_PROGRESS 상태 값)을 이러한 NET_BUFFER_LIST 구조에 씁니다.
    • 중간 드라이버가 기본 오프로드 대상에 보내기 작업을 전파하기 위해 메모리를 할당할 수 없는 경우 연결된 목록의 첫 번째 NET_BUFFER_LIST 구조에 NDIS_STATUS_REQUEST_UPLOAD 상태 값을 쓰고 연결된 목록의 모든 후속 NET_BUFFER_LIST 구조에 NDIS_STATUS_UPLOAD_REQUESTED. 중간 드라이버는 NET_BUFFER_LIST 구조를 기본 오프로드 대상으로 전파해서는 안됩니다. 호스트 스택은 보내기 작업을 수행합니다.
  • 전송된 데이터 바이트 수를 지정합니다. 오프로드 대상은 ID가 TcpOffloadBytesTransferredNET_BUFFER_LIST_INFO 매크로를 호출하여 이 작업을 수행합니다.
  • 다음을 호출합니다.NET_BUFFER_LIST 구조체와 연결된 각 NET_BUFFER 구조체에 대한 NdisAdvanceNetBufferDataStart 함수입니다. NdisAdvanceNetBufferDataStart 함수에 전달된 NetBuffer 매개 변수는 NET_BUFFER 구조를 가리킵니다. DataOffsetDelta 매개 변수는 오프로드 대상에 의해 전송되고 원격 호스트에서 승인된 NET_BUFFER 구조의 데이터 바이트 수를 지정해야 합니다. FreeMdl 매개 변수는 NULL입니다.

요구 사항

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

추가 정보

MiniportSendNetBufferLists

MiniportTcpOffloadSend

NET_BUFFER

NET_BUFFER_LIST

NdisAdvanceNetBufferDataStart

NdisMRegisterMiniportDriver