次の方法で共有


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

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

NDIS ミニポートTcpOffloadForward 関数を呼び出して、未確認の受信 TCP セグメントをオフロード ターゲットに転送します。

構文

W_TCP_OFFLOAD_FORWARD_HANDLER WTcpOffloadForwardHandler;

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

パラメーター

[in] MiniportAdapterContext

オフロード ターゲットがアダプターのこのインスタンスに関する状態情報を保持するオフロード ターゲット割り当てコンテキスト領域へのハンドル。 ミニポート ドライバーは、呼び出されたときに NDIS にこのハンドルを提供しました NdisMSetMiniportAttributes からミニポートInitializeEx 関数を します。

[in] MiniportOffloadContext

PVOID 値を含むメモリ位置へのポインター。 この PVOID 値は、TCP セグメントが転送されている TCP 接続の状態オブジェクトを含むミニポート オフロード コンテキストを参照します。 オフロード ターゲットは、TCP 接続状態オブジェクトをオフロードするときに、この PVOID 値を指定しました。

[in] NetBufferList

NET_BUFFER_LIST 構造体へのポインター。 この構造体は、スタンドアロン構造でも、NET_BUFFER_LIST構造のリンクされたリスト内の最初の構造でもかまいません。 リスト内の各NET_BUFFER_LIST構造体は、1 つの NET_BUFFER 構造体を記述します。 各NET_BUFFER構造体は、メモリ記述子リスト (MDL) のチェーンにマップされます。 NET_BUFFER構造体に関連付けられている MDL には、オフロード ターゲットに転送される TCP セグメントが 1 つだけ含まれています。 最初の MDL の最初のバイトは、TCP ヘッダーの最初のバイトです。 NET_BUFFER_LISTおよび関連する構造体は、物理メモリに常駐し続けることができるようにロックされます。 ただし、システム メモリにはマップされません。

戻り値

NDIS_STATUS_PENDINGは、許容される唯一の戻り値です。 オフロード ターゲットは常に、転送要求を非同期的に完了します。NdisTcpOffloadForwardComplete 関数を します。

備考

ホスト スタックは、受信した TCP セグメントを 1 つ以上転送しますが、次の状況では確認されません。

  • ホスト スタックは、オフロード ターゲットにオフロードされている TCP 接続上のセグメントを受信しました。 接続が完全にオフロードされていないため、オフロード ターゲットは、その時点で TCP セグメントを処理できませんでした。
  • ホスト スタックは、TCP 接続がオフロードされているネットワーク インターフェイス以外のネットワーク インターフェイス上のセグメントを受信したマルチホーム システムにあります。
  • オフロード ターゲットは、IP オプションが設定された受信パケット、または再アセンブルが必要なフラグメントである受信パケットを示していました。 IP オプションを処理したり、パケットを正常に再構成したりすると、ホスト スタックは TCP セグメントをオフロード ターゲットに転送します。
次の場合、ホスト スタックは TCP 接続の TCP セグメントの転送を試みることはありません。
  • その接続はオフロードされています。 ホスト スタックは、接続のオフロードが完了するまで常に待機してから、その接続のパケットを転送します。 ホスト スタックは、接続のオフロードが完了した後、できるだけ早く TCP セグメントを転送します。 ただし、このようなセグメントを転送するための時間制限はありません。
  • その接続のオフロードが終了しています。 この場合、ホスト スタックは、オフロードの終了が完了するまでデータをバッファーし、セグメントを処理します。
ホスト スタックは、IP データグラムではなく TCP セグメントをオフロード ターゲットに転送します。 したがって、ホスト スタックが各セグメントに対して提供する唯一のヘッダーは、存在する TCP オプションを含む TCP ヘッダーです。 これは、オフロード ターゲットが受信したセグメントを処理するために必要なすべてのヘッダー情報です。

TCP セグメントを転送する場合、ホスト スタックは、NET_BUFFER構造体ごとに 1 つの TCP セグメントを転送します。 ホスト スタックは、1 つのNET_BUFFER構造体、つまり 1 つの転送された TCP セグメントをリンク リスト内の各NET_BUFFER_LIST構造体に関連付けます。

ホスト スタックは、NDIS が ミニポートTcpOffloadForward 関数に渡すNET_BUFFER_LISTおよび関連付けられている構造体を割り当てます。 オフロード ターゲットは、これらのリソースをNdisTcpOffloadForwardComplete 関数を します。 これらのリソースを所有している間、オフロード ターゲットは自由にキューに登録して処理できます。

必要条件

要件 価値
ターゲット プラットフォーム ウィンドウズ
ヘッダー ndischimney.h (Ndischimney.h を含む)
IRQL 任意のレベル

関連項目

ミニポートInitializeEx

NET_BUFFER_LIST

NdisMSetMiniportAttributes

NdisTcpOffloadForwardComplete