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

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

NDIS は 、ミニポートTcpOffloadSend 関数を呼び出して、オフロードされた 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

オフロード ターゲットがアダプターのこのインスタンスに関する状態情報を保持するオフロード ターゲット割り当てコンテキスト領域へのハンドル。 オフロード ターゲットは、呼び出されたときに 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) のチェーンにマップされます。 MDP には、送信するデータが含まれます。 NET_BUFFER_LISTおよび関連する構造体は、物理メモリに常駐するようにロックされます。 ただし、システム メモリにはマップされません。

戻り値

NDIS_STATUS_PENDINGは、許可される唯一の戻り値です。 オフロード ターゲットは、常に を呼び出して非同期的に送信要求を完了します NdisTcpOffloadSendComplete

注釈

オフロード ターゲットは、先入れ先出し (FIFO) 順にデータを送信する必要があります。 NDIS が NetBufferList で渡すNET_BUFFER_LIST構造体のリンクリストの順序は、オフロード ターゲットがネットワーク データを送信する必要がある順序を表します。 さらに、オフロード ターゲットは、複数の呼び出しから受信したデータを、データが投稿された順序で MiniportTcpOffloadSend に送信する必要があります。

オフロード ターゲットは、 その MiniportTcpOffloadSend 関数に対して行われたすべての送信要求を受け入れる必要があります。 オフロード ターゲットが送信要求をすぐに完了できない場合、オフロード ターゲットは要求を完了するまでキューに入れる必要があります。 オフロード ターゲットでは、送信要求をキューに格納するために、NET_BUFFER_LIST構造体の ミニポート予約 メンバーを使用する必要があります。 送信要求が保留中の間、オフロード ターゲットは、NET_BUFFER_LIST構造体と、NET_BUFFER_LIST構造体に関連付けられているすべてのリソースの所有権を保持します。

ホスト スタックは、接続ごとに送信要求をシリアル化します。 スタックは、接続に対する別の送信要求が進行中の間、接続に対して送信要求を発行しません。 これにより、オフロード ターゲットは常に正しい順序で送信要求を受け取ります。

ただし、オフロード ターゲットが同じ接続で MiniportTcpOffloadSend 関数の以前の呼び出しを 1 つ以上完了する前に、ホスト スタックが接続で MiniportTcpOffloadSend 関数を呼び出すことができることに注意してください。 また、ホスト スタックは、1 つの接続でオフロード ターゲットの MiniportTcpOffloadSend 関数を呼び出すことができますが、1 つ以上の 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