次の方法で共有


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 には、受信したデータが含まれています。 MDL は、常駐状態を維持するようにロックされますが、システム メモリにはマップされません。

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

[in] Status

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

NDIS_STATUS_SUCCESS

これは、ホスト スタックがNET_BUFFER_LIST構造体および関連する構造体の所有権を、これらの構造体を ミニポートTcpOffloadReceiveReturn オフロード ターゲットの関数 します。

[out] BytesConsumed

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

戻り値

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

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

備考

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

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

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

  • 通常の受信要求

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

  • 0 バイトの受信要求

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

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

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

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

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

  • ホスト スタックがNDIS_STATUS_SUCCESSを返し、クライアント アプリケーションが受信データを受け入れて使用したことを示す場合、ホスト スタックはNET_BUFFER_LIST構造体を ミニポートTcpOffloadReceiveReturn オフロード ターゲットの関数 します。 ホスト スタックは、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 回の呼び出しでオフロード ターゲットが指定する必要がある最適なデータ バイト数を指定できます。 詳細については、「指定された受信表示サイズ を使用するを参照してください。

必要条件

要件 価値
ターゲット プラットフォーム 万国
ヘッダー ndischimney.h (Ndischimney.h を含む)
IRQL DISPATCH_LEVEL

関連項目

MDL する

ミニポートInitializeEx

ミニポートTcpOffloadReceive

ミニポートTcpOffloadReceiveReturn

NET_BUFFER

NET_BUFFER_LIST

NdisMRegisterMiniportDriver