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

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

オフロード ターゲットは NdisTcpOffloadSendComplete 関数を呼び出して、オフロード ターゲットの MiniportTcpOffloadSend 関数に対して行われた 1 つ以上の送信要求を完了します。

構文

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構造のリンクされたリスト内の最初の構造体を指定できます。 オフロード ターゲットは、 に対する 1 つ以上の呼び出しでこれらの構造体を取得しました。 MiniportTcpOffloadSend 関数。

戻り値

なし

解説

システム パフォーマンスを向上させるために、オフロード ターゲットは、MiniportTcpOffloadSend 関数への複数の呼び出しからNET_BUFFER_LIST構造を含むリンク リストを作成できます。 その後、ドライバーは、このようなリンクされたリストを NdisTcpOffloadSendComplete 関数の 1 回の呼び出しで渡すことができます。

1 つ以上の送信要求を完了する前に、 NdisTcpOffloadSendComplete 関数に渡すNET_BUFFER_LIST構造体ごとに、オフロード ターゲットで次の操作を行う必要があります。

  • Status メンバーに status 値を書き込みます。
    • 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 データを処理しません。
    • オフロード ターゲットは、リンクリスト内の 1 つの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 です

要件

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

こちらもご覧ください

MiniportSendNetBufferLists

MiniportTcpOffloadSend

NET_BUFFER

NET_BUFFER_LIST

NdisAdvanceNetBufferDataStart

NdisMRegisterMiniportDriver