다음을 통해 공유


NDIS_TCP_OFFLOAD_RECEIVE_INDICATE 콜백 함수(ndischimney.h)

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

오프로드 대상은 NdisTcpOffloadReceiveHandler 함수를 호출하여 수신된 네트워크 데이터를 클라이언트 애플리케이션에서 사용할 수 있음을 나타냅니다.

구문

NDIS_TCP_OFFLOAD_RECEIVE_INDICATE NdisTcpOffloadReceiveIndicate;

NDIS_STATUS NdisTcpOffloadReceiveIndicate(
  [in]  IN NDIS_HANDLE NdisOffloadHandle,
  [in]  IN PNET_BUFFER_LIST NetBufferList,
  [in]  IN NDIS_STATUS Status,
  [out] OUT PULONG BytesConsumed
)
{...}

매개 변수

[in] NdisOffloadHandle

표시가 이루어지는 오프로드된 TCP 연결을 식별하는 핸들입니다. 연결이 오프로드되었을 때 이 핸들은 의 NdisOffloadHandle 멤버에 제공되었습니다. 연결 상태와 연결된 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 구조체입니다.

[in] NetBufferList

NET_BUFFER_LIST 구조체에 대한 포인터입니다. 각 NET_BUFFER_LIST 구조체는 NET_BUFFER 구조의 목록을 설명합니다. 목록의 각 NET_BUFFER 구조체는 MDL(메모리 설명자 목록) 체인에 매핑됩니다. MDL에는 수신된 데이터가 포함됩니다. MDL은 상주 상태로 유지되도록 잠겨 있지만 시스템 메모리에 매핑되지 않습니다.

NetBufferList에 의해 지정된 NET_BUFFER_LIST 구조체는 독립 실행형 구조체여야 하며 NET_BUFFER_LIST 구조체의 연결된 목록에서 첫 번째 구조체가 될 수 없습니다. 오프로드 대상은 오프로드 수신 표시의 동일한 NET_BUFFER 필요한 만큼의 MDL을 연결하여 이 제한을 해결할 수 있습니다.

[in] Status

오프로드 대상은 다음 상태 값을 제공해야 합니다.

NDIS_STATUS_SUCCESS

이는 호스트 스택이 이러한 구조를 에 반환할 때까지 NET_BUFFER_LIST 구조체 및 연결된 구조체의 소유권을 유지할 수 있음을 나타냅니다.오프로드 대상의 MiniportTcpOffloadReceiveReturn 함수입니다.

[out] BytesConsumed

클라이언트 애플리케이션에서 사용한 바이트 수를 수신하는 ULONG 형식 변수에 대한 포인터입니다.

반환 값

NdisTcpOffloadReceiveHandler 함수는 다음 값 중 하나를 반환할 수 있습니다.

반환 코드 설명
NDIS_STATUS_SUCCESS
클라이언트 애플리케이션은 표시된 모든 수신 데이터를 사용했습니다.
NDIS_STATUS_OFFLOAD_DATA_NOT_ACCEPTED
클라이언트 애플리케이션이 표시된 모든 수신 데이터를 거부했습니다.
NDIS_STATUS_OFFLOAD_DATA_PARTIALLY_ACCEPTED
클라이언트 애플리케이션은 표시된 수신 데이터의 하위 집합을 사용했습니다. 클라이언트 애플리케이션에서 사용한 데이터 양(바이트)은 BytesConsumed 매개 변수로 지정된 변수에 반환됩니다.

설명

수신 버퍼는 에 게시됩니다.오프로드 대상의 MiniportTcpOffloadReceive 함수입니다. 미리 게시된 수신 요청(클라이언트 애플리케이션에서 제공하는 버퍼)을 연결에 사용할 수 있는 경우 오프로드 대상은 를 호출하여 수신 데이터를 전송해야 합니다. NdisTcpOffloadReceiveComplete 함수. 자세한 내용은 배달 알고리즘을 참조하세요.

모든 수신 요청은 오프로드 대상에 의해 완료되어야 합니다(0 바이트 수신 요청인 경우에도).

오프로드 대상이 수신 데이터를 표시하고 해당 데이터가 거부된 후 호스트 스택이 수신 요청을 게시할 때까지 오프로드 대상은 해당 데이터를 다시 나타낼 수 없습니다.

  • 일반 수신 요청

    호스트 스택이 일반 수신 요청을 게시하는 경우 오프로드 대상은 수신 표시를 하기 전에 이러한 요청을 완료해야 합니다. 자세한 내용은 배달 알고리즘을 참조하세요.

  • 0 바이트 수신 요청

    호스트 스택은 0 바이트 수신 요청을 게시하여 오프로드 대상의 수신 표시를 사용하도록 설정할 수 있습니다. 0바이트 수신 요청은 DataLength 멤버의 값(자세한 내용은 구조 NET_BUFFER 참조)이 0인 요청입니다. 0 바이트 수신 요청은 버퍼링된 데이터를 사용하지 않습니다.

초기화 중에 오프로드 대상은 각각 NET_BUFFER_LIST 구조와 NET_BUFFER 구조를 포함하는 두 개의 버퍼 풀을 할당해야 합니다. 오프로드 대상은 를 호출할 때 TCP 굴뚝을 통해 수신 표시를 만들기 위해 하나의 풀을 사용합니다. NdisTcpOffloadReceiveHandler 함수입니다. 오프로드 대상은 를 호출할 때 비오프로드 NDIS 인터페이스를 통해 수신 표시를 만들기 위해 다른 풀을 사용합니다. NdisMIndicateReceiveNetBufferLists 함수입니다.

할당된 각 NET_BUFFER_LIST 구조체에는 연결된 NET_BUFFER 구조가 하나만 있어야 합니다. 할당할 이러한 구조체의 수는 드라이버 작성기에 달려 있습니다. 이러한 구조를 할당하는 방법에 대한 자세한 내용은 Miniport 드라이버 버퍼 관리를 참조하세요.

지연된 승인을 하지 않는 경우 오프로드 대상은 오프로드 대상에 데이터를 입금할 수 있는 내부 버퍼가 있는 즉시 수신된 데이터를 승인해야 합니다. 오프로드 대상은 NdisTcpOffloadReceiveHandler 함수를 호출하기 전, 도중 또는 후에 수신된 데이터를 승인할 수 있습니다.

오프로드 대상은 NdisTcpOffloadReceiveHandler 함수를 호출할 때 항상 NDIS_STATUS_SUCCESS 상태 값을 제공합니다. 이는 호스트 스택이 이러한 구조를 오프로드 대상으로 반환할 때까지 NET_BUFFER_LIST 구조체 및 연결된 구조체의 소유권을 유지할 수 있음을 나타냅니다.

  • 호스트 스택이 클라이언트 애플리케이션이 수신 데이터를 수락하고 사용했음을 나타내는 NDIS_STATUS_SUCCESS 반환하는 경우 호스트 스택은 NET_BUFFER_LIST 구조를 에 반환합니다.오프로드 대상의 MiniportTcpOffloadReceiveReturn 함수입니다. 호스트 스택은 BytesConsumed 매개 변수에 지정된 변수를 오프로드 대상에 의해 표시된 바이트 수로 설정합니다.
  • 호스트 스택이 NDIS_STATUS_NOT_ACCEPTED 반환하여 클라이언트 애플리케이션이 수신 데이터를 거부했음을 나타내는 경우 오프로드 대상은 NdisTcpOffloadReceiveHandler 함수를 반환할 때 표시된 NET_BUFFER_LIST 구조체의 소유권을 다시 시작합니다. 오프로드 대상은 클라이언트 애플리케이션이 연결에 수신 버퍼를 게시할 것으로 예상하여 수신 데이터를 버퍼링해야 합니다. 클라이언트 애플리케이션이 수신 버퍼를 게시한 후 오프로드 대상은 버퍼링된 수신 데이터를 게시된 버퍼에 복사하고 를 호출하여 게시된 버퍼를 완료합니다. NdisTcpOffloadReceiveComplete 함수. 자세한 내용은 배달 알고리즘을 참조하세요. 호스트 스택은 BytesConsumed 매개 변수로 지정된 변수를 0으로 설정합니다.
  • 호스트 스택이 NDIS_STATUS_OFFLOAD_DATA_PARTIALLY_ACCEPTED 반환하여 클라이언트 애플리케이션이 수신 데이터의 하위 집합을 사용했음을 나타내는 경우 오프로드 대상은 NdisTcpOffloadReceiveHandler 함수가 반환될 때 표시된 NET_BUFFER_LIST 구조체의 소유권을 다시 시작합니다. 호스트 스택은 BytesConsumed 매개 변수로 지정된 변수를 클라이언트 애플리케이션에서 사용한 데이터 양(바이트)을 지정하는 0이 아닌 값으로 설정합니다. 오프로드 대상은 클라이언트 애플리케이션이 연결에 수신 버퍼를 게시할 것으로 예상하여 나머지 수신 데이터를 버퍼링해야 합니다.
오프로드 대상은 NdisTcpOffloadReceiveHandler 함수를 호출할 때 NDIS_STATUS_RESOURCES 상태 값을 제공하지 않습니다.

TCP_OFFLOAD_STATE_CACHED 구조의 RcvIndicationSize 멤버에서 호스트 스택은 오프로드 대상이 NdisTcpOffloadReceiveHandler 함수에 대한 단일 호출에서 제공해야 하는 최적의 데이터 바이트 수를 지정할 수 있습니다. 자세한 내용은 지정된 수신 표시 크기 사용을 참조하세요.

요구 사항

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

추가 정보

Mdl

MiniportInitializeEx

MiniportTcpOffloadReceive

MiniportTcpOffloadReceiveReturn

NET_BUFFER

NET_BUFFER_LIST

NdisMRegisterMiniportDriver