次の方法で共有


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

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

オフロード ターゲットは NdisTcpOffloadReceiveHandler 関数を呼び出して、受信したネットワーク データがクライアント アプリケーションで使用可能であることを示します。

構文

NDIS_TCP_OFFLOAD_RECEIVE_INDICATE NdisTcpOffloadReceiveIndicate;

NDIS_STATUS NdisTcpOffloadReceiveIndicate(
  [in]  IN NDIS_HANDLE NdisOffloadHandle,
  [in]  IN PNET_BUFFER_LIST NetBufferList,
  [in]  IN NDIS_STATUS Status,
  [out] OUT PULONG BytesConsumed
)
{...}

パラメーター

[in] NdisOffloadHandle

指示が行われているオフロードされた TCP 接続を識別するハンドル。 接続がオフロードされたとき、このハンドルは の NdisOffloadHandle メンバーで指定されました。 NDIS_MINIPORT_OFFLOAD_BLOCK_LIST 接続状態に関連付けられた構造体です。

[in] NetBufferList

NET_BUFFER_LIST構造体へのポインター。 各 NET_BUFFER_LIST 構造体は、 NET_BUFFER 構造体の一覧を記述します。 リスト 内の各NET_BUFFER 構造体は、 メモリ記述子リスト (MDL) のチェーンにマップされます。 MDL には、受信したデータが含まれています。 MDP はロックされ、常駐したままですが、システム メモリにはマップされません。

NetBufferList によって指定されるNET_BUFFER_LIST構造体はスタンドアロン構造体である必要があり、NET_BUFFER_LIST構造体のリンク されたリストの最初の構造体にすることはできません。 オフロード ターゲットは、オフロード受信インジケーター内の同じ NET_BUFFER に必要な数の MDL をチェーンすることで、この制限を回避できます。

[in] Status

オフロード ターゲットは、次の状態値を指定する必要があります。

NDIS_STATUS_SUCCESS

これは、ホスト スタックがこれらの構造体を に返すまで、NET_BUFFER_LIST構造体と関連する構造体の所有権を保持できることを示します。オフロード ターゲットの MiniportTcpOffloadReceiveReturn 関数。

[out] BytesConsumed

クライアント アプリケーションによって使用されたバイト数を受け取る ULONG 型の変数へのポインター。

戻り値

NdisTcpOffloadReceiveHandler 関数は、次のいずれかの値を返すことができます。

リターン コード 説明
NDIS_STATUS_SUCCESS
クライアント アプリケーションは、指定されたすべての受信データを使用しました。
NDIS_STATUS_OFFLOAD_DATA_NOT_ACCEPTED
クライアント アプリケーションは、指定されたすべての受信データを拒否しました。
NDIS_STATUS_OFFLOAD_DATA_PARTIALLY_ACCEPTED
クライアント アプリケーションは、指定された受信データのサブセットを使用しました。 クライアント アプリケーションによって使用されたデータの量 (バイト単位) は、 BytesConsumed パラメーターで指定された変数で返されます。

注釈

受信バッファーは にポストされます。オフロード ターゲットの MiniportTcpOffloadReceive 関数。 接続に対して事前にポストされた受信要求 (クライアント アプリケーションによって提供されるバッファー) が使用可能な場合、オフロード ターゲットは を呼び出して受信データを転送する必要があります。 NdisTcpOffloadReceiveComplete 関数。 詳細については、「 配信アルゴリズム」を参照してください。

すべての受信要求は、オフロード ターゲットによって完了する必要があります (0 バイトの受信要求であっても)。

オフロード ターゲットが受信データを示し、データが拒否された後、オフロード ターゲットは、ホスト スタックが受信要求を投稿するまで、そのデータを再度示すことはできません。

  • 通常の受信要求

    ホスト スタックが通常の受信要求を投稿する場合、オフロード ターゲットは、受信通知を行う前に、これらの要求を完了する必要があります。 詳細については、「 配信アルゴリズム」を参照してください。

  • 0 バイトの受信要求

    ホスト スタックは、0 バイトの受信要求をポストして、オフロード ターゲットによる受信通知を有効にすることができます。 0 バイトの受信要求は、 DataLength メンバーの値が 0 である要求です (詳細については、「 NET_BUFFER 構造体」を参照してください)。 0 バイトの受信要求では、バッファーに格納されたデータは使用されません。

初期化中に、オフロード ターゲットは 2 つのバッファー プールを割り当てる必要があります。それぞれに、NET_BUFFER_LIST構造体とNET_BUFFER構造体が含まれます。 オフロード ターゲットは、 を呼び出すときに TCP チムニーを介して受信指示を行うのに 1 つのプールを使用します。 NdisTcpOffloadReceiveHandler 関数。 オフロード ターゲットは、 を呼び出すときに、nonoffload NDIS インターフェイスを介して受信指示を行う他のプールを使用します。 NdisMIndicateReceiveNetBufferLists 関数。

割り当てられた各NET_BUFFER_LIST構造体には、関連付けられているNET_BUFFER構造体が 1 つだけ必要です。 割り当てるこのような構造体の数は、ドライバー ライターにかかっています。 このような構造体の割り当てについて詳しくは、「 ミニポート ドライバー バッファー管理」をご覧ください。

遅延受信確認を行っていない場合、オフロード ターゲットは、オフロード ターゲットにデータを格納できる内部バッファーがある場合に、受信したデータをすぐに確認する必要があります。 オフロード ターゲットは、 NdisTcpOffloadReceiveHandler 関数を呼び出す前、実行中、または呼び出した後に、受信したデータを確認できます。

オフロード ターゲットは、NdisTcpOffloadReceiveHandler 関数を呼び出すときに常にNDIS_STATUS_SUCCESSの Status 値を提供します。 これは、ホスト スタックがこれらの構造体をオフロード ターゲットに返すまで、NET_BUFFER_LIST構造体と関連する構造体の所有権を保持できることを示します。

  • ホスト スタックがNDIS_STATUS_SUCCESSを返し、クライアント アプリケーションが受信データを受け入れて使用したことを示す場合、ホスト スタックは NET_BUFFER_LIST 構造体を に返します。オフロード ターゲットの MiniportTcpOffloadReceiveReturn 関数。 ホスト スタックは、 BytesConsumed パラメーターで指定された変数を、オフロード ターゲットによって示されたバイト数に設定します。
  • ホスト スタックがNDIS_STATUS_NOT_ACCEPTEDを返し、クライアント アプリケーションが受信データを拒否したことを示す場合、オフロード ターゲットは NdisTcpOffloadReceiveHandler 関数の戻り時に、指定されたNET_BUFFER_LIST構造体の所有権を再開します。 オフロード ターゲットは、クライアント アプリケーションが接続で受信バッファーをポストすることを想定して、受信データをバッファーする必要があります。 クライアント アプリケーションが受信バッファーをポストした後、オフロード ターゲットは、バッファーされた受信データをポストされたバッファーにコピーし、 を呼び出してポストされたバッファーを完了します。 NdisTcpOffloadReceiveComplete 関数。 詳細については、「 配信アルゴリズム」を参照してください。 ホスト スタックは、 BytesConsumed パラメーターで指定された変数を 0 に設定します。
  • クライアント アプリケーションが受信データのサブセットを使用したことを示すNDIS_STATUS_OFFLOAD_DATA_PARTIALLY_ACCEPTEDを返す場合、 NdisTcpOffloadReceiveHandler 関数が返されたときに、オフロード ターゲットは示されたNET_BUFFER_LIST構造体の所有権を再開します。 ホスト スタックは、 BytesConsumed パラメーターで指定された変数を、クライアント アプリケーションによって使用されたデータの量 (バイト単位) を指定する 0 以外の値に設定します。 オフロード ターゲットは、クライアント アプリケーションが接続で受信バッファーをポストすることを想定して、残りの受信データをバッファーする必要があります。
NdisTcpOffloadReceiveHandler 関数を呼び出すときに、オフロード ターゲットはNDIS_STATUS_RESOURCESの Status 値を提供しません。

TCP_OFFLOAD_STATE_CACHED構造体の RcvIndicationSize メンバーでは、ホスト スタックは、 NdisTcpOffloadReceiveHandler 関数の 1 回の呼び出しでオフロード ターゲットが指定する必要がある最適なデータ バイト数を指定できます。 詳細については、「 指定された受信表示サイズの使用」を参照してください。

要件

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

こちらもご覧ください

Mdl

MiniportInitializeEx

MiniportTcpOffloadReceive

MiniportTcpOffloadReceiveReturn

NET_BUFFER

NET_BUFFER_LIST

NdisMRegisterMiniportDriver