次の方法で共有


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

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

ミニポートTcpOffloadDisconnect 関数は、オフロードされた TCP 接続の送信の半分を閉じます。 さらに、実行する切断が正常な切断である場合、NDIS は、FIN セグメントを送信する前に関数が送信する必要があるミニポートTcpOffloadDisconnect 関数 アプリケーション データを提供できます。

構文

W_TCP_OFFLOAD_DISCONNECT_HANDLER WTcpOffloadDisconnectHandler;

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

パラメーター

[in] MiniportAdapterContext

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

[in] MiniportOffloadContext

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

[in] NetBufferList

1 つの NET_BUFFER_LIST 構造体へのポインター。 このNET_BUFFER_LIST構造体に関連付けられている NET_BUFFER 構造体は 1 つだけです。

[in] Flags

次のいずれかの値として、オフロード ターゲットが実行する必要がある切断の種類。

TCP_DISCONNECT_ABORTIVE_CLOSE

オフロード ターゲットは、RST セグメントを送信して中止切断を実行する必要があります。

TCP_DISCONNECT_GRACEFUL_CLOSE

オフロード ターゲットは、FIN セグメントを送信してグレースフル 切断を実行する必要があります。

戻り値

ミニポートTcpOffloadDisconnect 関数は常にNDIS_STATUS_PENDINGを返します。 オフロード ターゲットは、呼び出しによって切断要求を非同期的に完了します。NdisTcpOffloadDisconnectComplete します。

備考

フラグの 設定に応じて、ミニポートTcpOffloadDisconnect 関数は、指定された TCP 接続で中止切断またはグレースフル切断を実行します。

Abortive Disconnect

FlagsTCP_DISCONNECT_ABORTIVE_CLOSEに設定されている場合、オフロード ターゲットは、指定された TCP 接続で RST セグメントを送信することによって中止切断を実行します。

オフロード ターゲットが RST セグメントを送信できる唯一のインスタンスです。
 
を呼び出す前に、NdisTcpOffloadDisconnectComplete 関数を使用して中止切断を完了、オフロード ターゲットは、状態値が NDIS_STATUS_REQUEST_ABORTED の接続上のすべての未処理の送信要求を完了する必要があります。 オフロード ターゲットは、リンク リスト内の各NET_BUFFER_LIST構造体の 状態 メンバーにこの状態値を書き込みます。NdisTcpOffloadSendComplete 関数を します。

オフロード ターゲットが RST セグメントを送信する前または後に未処理の送信要求を終了するかどうかは関係ありません。

接続に未処理の受信通知またはイベント表示がある場合、オフロード ターゲットは、RST セグメントを送信する前に、これらの表示が完了するのを待つ必要はありません。 オフロード ターゲットは、接続の受信セグメントの処理を直ちに停止し、クライアント アプリケーションで使用されていない受信データを含め、受信セグメントを確認しないようにする必要があります。

フラグ = すると、NetBufferList ポインターによって参照されるNET_BUFFER_LIST構造体に関連付けられているNET_BUFFER構造体にデータが含まれます。 つまり、NET_BUFFER構造体の NetBufferHeader 内の NET_BUFFER_DATA 構造体の DataLength メンバーは 0 です。

グレースフル 切断

FlagsTCP_DISCONNECT_GRACEFUL_CLOSEに設定されている場合、オフロード ターゲットは、指定された TCP 接続で FIN セグメントを送信することによって、グレースフル 切断を実行します。

FIN セグメントの前に送信するユーザー データがない場合、NetBufferList ポインターによって参照されるNET_BUFFER_LIST構造体に関連付けられているNET_BUFFER構造体にはデータが含まれます。 送信するユーザー データがある場合、NET_BUFFER構造体に関連付けられているメモリ記述子リスト (MDL) には、送信するユーザー データが含まれます。

オフロード ターゲットは、FIN セグメントを送信する前に、送信されたユーザー データの受信確認を待つべきではありません。 オフロード ターゲットは、ユーザー データを送信した後に別の FIN セグメントを送信できます。または、オフロード ターゲットは、送信するユーザー データの最後のセグメントの TCP ヘッダーに FIN ビットを設定できます。

オフロード ターゲットの観点からは、FIN セグメントを送信すると、接続の送信の半分が閉じられます。 ただし、FIN セグメントを送信しても、接続の受信半分は閉じません。 リモート ホストは、次のいずれかをオフロード ターゲットに送信することで、接続の受信の半分を終了します。

  • 正常な切断を要求する FIN セグメント。
  • 中止切断を要求する RST セグメント。
FIN セグメントを送信した後、オフロード ターゲットは、リモート ホストが正常または中止切断を開始するまで、またはローカル ホストが接続のオフロードを終了するか、中止切断を開始するまで、接続上のセグメントを受信できます。

オフロード ターゲット呼び出しの前NdisTcpOffloadDisconnectComplete 、オフロード ターゲットに配信されたのと同じ順序で、接続のすべての未処理の送信要求を完了する必要があります。

切断要求 に対する必須の応答を する

オフロード ターゲットは、指定された TCP 接続がアップロードされているか中止されている場合 (たとえば、リモート ホストが接続で RST セグメントを送信したため) を除き、切断要求を失敗させてはなりません。 オフロード ターゲットが切断要求に失敗した場合、ホスト スタックは後で切断要求を再発行しません。

接続リソースの解放

オフロード ターゲットは、ホスト スタックが接続のオフロードを終了するまで、中止またはグレースフル切断を発行した接続のリソースを解放してはなりません。

必要条件

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

関連項目

ミニポートInitializeEx

ミニポート ターミナルのOffload

NET_BUFFER

NET_BUFFER_DATA

NET_BUFFER_LIST

NET_BUFFER_LIST_INFO

NdisAdvanceNetBufferDataStart

NdisMSetMiniportAttributes

NdisTcpOffloadDisconnectComplete

NdisTcpOffloadSendComplete