NDIS_TCP_OFFLOAD_RECEIVE_COMPLETE コールバック関数 (ndischimney.h)

[TCP チムニー オフロード機能は非推奨であり、使用しないでください。]

オフロード ターゲットは NdisTcpOffloadReceiveComplete 関数を呼び出して、ポストされた受信要求 (受信バッファー) をホスト スタックに返します。 オフロード ターゲットは、 への 1 つ以上の呼び出しで以前に受信要求を受信しました MiniportTcpOffloadReceive 関数。

構文

NDIS_TCP_OFFLOAD_RECEIVE_COMPLETE NdisTcpOffloadReceiveComplete;

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

パラメーター

[in] NdisMiniportHandle

の前の呼び出しでオフロード ターゲットが取得したハンドル。 NdisMRegisterMiniportDriver 関数。

[in] NetBufferList

NET_BUFFER_LIST構造体へのポインター。 この構造体は、スタンドアロンまたはNET_BUFFER_LIST構造体のリンクされたリスト内の最初の構造体にすることができます。 オフロード ターゲットは、 への 1 つ以上の呼び出しでこれらの構造体を取得しました MiniportTcpOffloadReceive 関数。

戻り値

なし

解説

オフロード ターゲットは、 を使用し、要求が に投稿された順序で事前にポストされた受信要求を返す必要がありますオフロード ターゲットの MiniportTcpOffloadReceive 関数。 つまり、オフロード ターゲットは を使用し、先入れ先出し (FIFO) 順に事前にポストされた受信要求を返す必要があります。

オフロード ターゲットは、 NdisTcpOffloadReceiveComplete 関数と への呼び出しをシリアル化する必要があります。 接続ごとに NdisTcpOffloadReceiveHandler 関数。

オフロード ターゲットの MiniportTcpOffloadReceive 関数は、 NdisTcpOffloadReceiveComplete 関数へのオフロード ターゲットの呼び出しのコンテキストで呼び出すことができます。 この場合、 NdisTcpOffloadReceiveComplete への前回の呼び出しが返されるまで、オフロード ターゲットは NdisTcpOffloadReceiveComplete 関数を再度呼び出す必要があります。

システム パフォーマンスを向上させるために、オフロード ターゲットは、複数の呼び出しから への NET_BUFFER_LIST 構造を含むリンク リストを作成できます。 MiniportTcpOffloadReceive 関数。 オフロード ターゲットは、 NdisTcpOffloadReceiveComplete 関数への 1 回の呼び出しで、このようなリンクされたリストを渡すことができます。 オフロード ターゲットは、 への 1 回の呼び出しで投稿された受信要求を分散できることに注意してください。オフロード ターゲットが、MiniportTcpOffloadReceive 関数にポストされたのと同じ順序で受信要求を完了する限り、複数の完了呼び出しにわたって MiniportTcpOffloadReceive 関数。

NdisTcpOffloadReceiveComplete 関数を呼び出す前に、オフロード ターゲットは、関数に渡す各NET_BUFFER_LIST構造体に対して次の処理を行います。

  • Status メンバーに次のいずれかの状態値を書き込みます。
    NDIS_STATUS_SUCCESS
    オフロード ターゲットは、 NetBufferList パラメーターによって参照されるNET_BUFFER_LIST構造体に関連付けられているすべてのデータを受信しました。 また、オフロード ターゲットは、TCP 接続の TCP 委任状態で RcvNxt 変数と RcvWnd 変数を拡張しました。 オフロード ターゲットが遅延受信確認の送信を待機しているかどうかに応じて、オフロード ターゲットが受信データの受信確認を生成した場合と生成されていない場合があります。
    NDIS_STATUS_REQUEST_ABORTED
    オフロード ターゲットが受信データの処理中にエラーが発生しました。 オフロード ターゲットが 、NetBufferList パラメーターによって指されるNET_BUFFER_LIST構造体を持つ有効なデータを提供している場合、オフロード ターゲットは 、NET_BUFFER_LIST_INFO マクロを呼び出すことによって有効なデータ バイト数を指定します。 オフロード ターゲットは、受信したデータの一部を確認した場合と受信していない可能性があります。
    NDIS_STATUS_UPLOAD_IN_PROGRESS
    バッファーが投稿された接続がアップロードされています。
    NDIS_STATUS_INVALID_STATE
    オフロード ターゲットが を呼び出して切断を示した後、受信要求がポストされました NdisTcpOffloadEventHandler
  • idTcpOffloadBytesTransferredNET_BUFFER_LIST_INFO マクロを呼び出して返されるデータ バイト数を指定します。
  • を呼び出します。 NdisAdvanceNetBufferDataStart 関数。 NetBufferList パラメーターは、NET_BUFFER_LIST構造体に関連付けられているNET_BUFFER構造体を指す必要があります。 DataOffsetDelta パラメーターは、NET_BUFFER構造体に関連付けられているメモリ記述子リスト (MDL) にオフロード ターゲットが配置したデータ バイト数を指定する必要があります。 FreeMdl パラメーターは NULL にする必要があります。

要件

要件
対象プラットフォーム ユニバーサル
Header ndischimney.h (Ndischimney.h を含む)
IRQL 任意のレベル

こちらもご覧ください

MiniportTcpOffloadReceive

NET_BUFFER

NET_BUFFER_LIST

NdisAdvanceNetBufferDataStart

NdisMRegisterMiniportDriver