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 関数は、次のいずれかの値を返すことができます。
リターン コード | 説明 |
---|---|
|
クライアント アプリケーションは、指定されたすべての受信データを使用しました。 |
|
クライアント アプリケーションは、指定されたすべての受信データを拒否しました。 |
|
クライアント アプリケーションは、指定された受信データのサブセットを使用しました。 クライアント アプリケーションによって使用されたデータの量 (バイト単位) は、 BytesConsumed パラメーターで指定された変数で返されます。 |
注釈
受信バッファーは にポストされます。オフロード ターゲットの MiniportTcpOffloadReceive 関数。 接続に対して事前にポストされた受信要求 (クライアント アプリケーションによって提供されるバッファー) が使用可能な場合、オフロード ターゲットは を呼び出して受信データを転送する必要があります。 NdisTcpOffloadReceiveComplete 関数。 詳細については、「 配信アルゴリズム」を参照してください。
すべての受信要求は、オフロード ターゲットによって完了する必要があります (0 バイトの受信要求であっても)。
オフロード ターゲットが受信データを示し、データが拒否された後、オフロード ターゲットは、ホスト スタックが受信要求を投稿するまで、そのデータを再度示すことはできません。
-
通常の受信要求
ホスト スタックが通常の受信要求を投稿する場合、オフロード ターゲットは、受信通知を行う前に、これらの要求を完了する必要があります。 詳細については、「 配信アルゴリズム」を参照してください。
-
0 バイトの受信要求
ホスト スタックは、0 バイトの受信要求をポストして、オフロード ターゲットによる受信通知を有効にすることができます。 0 バイトの受信要求は、 DataLength メンバーの値が 0 である要求です (詳細については、「 NET_BUFFER 構造体」を参照してください)。 0 バイトの受信要求では、バッファーに格納されたデータは使用されません。
割り当てられた各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 以外の値に設定します。 オフロード ターゲットは、クライアント アプリケーションが接続で受信バッファーをポストすることを想定して、残りの受信データをバッファーする必要があります。
TCP_OFFLOAD_STATE_CACHED構造体の RcvIndicationSize メンバーでは、ホスト スタックは、 NdisTcpOffloadReceiveHandler 関数の 1 回の呼び出しでオフロード ターゲットが指定する必要がある最適なデータ バイト数を指定できます。 詳細については、「 指定された受信表示サイズの使用」を参照してください。
要件
要件 | 値 |
---|---|
対象プラットフォーム | ユニバーサル |
Header | ndischimney.h (Ndischimney.h を含む) |
IRQL | DISPATCH_LEVEL |