NDK_FN_SEND_AND_INVALIDATE コールバック関数 (ndkpi.h)

NdkSendAndInvalidate (NDK_FN_SEND_AND_INVALIDATE) 関数は、NDK キュー ペア (QP) に送信要求を投稿し、受信完了時にリモート ピアで無効にするトークンを提供します。

構文

NDK_FN_SEND_AND_INVALIDATE NdkFnSendAndInvalidate;

NTSTATUS NdkFnSendAndInvalidate(
  [in]           NDK_QP *pNdkQp,
  [in, optional] PVOID RequestContext,
                 const NDK_SGE *pSgl,
  [in]           ULONG nSge,
  [in]           ULONG Flags,
  [in]           UINT32 RemoteToken
)
{...}

パラメーター

[in] pNdkQp

NDK キュー ペア (QP) オブジェクト (NDK_QP) へのポインター。

[in, optional] RequestContext

この要求のNDK_RESULT_EX構造体の RequestContext メンバーで返されるコンテキスト値。

pSgl

送信するデータを保持するバッファーを表す SGE (NDK_SGE) 構造体の配列。

[in] nSge

pSgl パラメーターで指定された配列内の SGE 構造体の数。

[in] Flags

許可される操作を指定するフラグのビットごとの OR。 次のフラグがサポートされています。

意味
NDK_OP_FLAG_SILENT_SUCCESS
0x00000001
この要求が成功した場合、送信完了キューに完了イベントは生成されません。 ただし、失敗した場合は、送信完了キューに完了イベントが生成されます。
NDK_OP_FLAG_READ_FENCE
0x00000002
ハードウェアがこの要求の処理を開始する前に、以前のすべての読み取り要求が完了している必要があります。
NDK_OP_FLAG_SEND_AND_SOLICIT_EVENT
0x00000004
ピアの完了キューが通知を生成します。 NDK_OP_FLAG_SEND_AND_SOLICIT_EVENTの詳細については、「解説」セクションを参照してください。
NDK_OP_FLAG_INLINE
0x00000040
SES によって参照されるメモリをインラインで転送する必要があることを示します。 また、NDK_SGEエントリの MemoryRegionToken 値が無効である可能性があります。 インライン要求では、キュー ペアの作成時に指定された MaxInitiatorRequestSge 値に SGE リスト内のエントリの数を制限する必要はありません。 インラインで転送されるメモリの量は、キュー ペアのインライン データ制限内にある必要があります。
NDK_OP_FLAG_DEFER
0x00000200
NDK プロバイダーに対して、処理のためにハードウェアへの要求を示す遅延が発生する可能性があることを示します。 このフラグの詳細については、「 NDKPI 遅延処理スキーム」を参照してください。

メモこのフラグは、NDKPI 1.2 (Windows Server 2012 R2) 以降でのみサポートされます。

[in] RemoteToken

受信完了時にピアで無効になるリモート トークン。 送信側ピアで無効なトークンが指定されている場合、受信側ピアの NDK プロバイダーは、下位層トランスポート ルールで指定されている接続を中止する必要があります。

戻り値

NdkSendAndInvalidate 関数は、次のいずれかの NTSTATUS コードを返します。

リターン コード 説明
STATUS_SUCCESS
要求が正常に投稿されました。 作業要求が完了すると、完了エントリは完了キュー (CQ) にキューに入れられます。
STATUS_CONNECTION_INVALID
キュー ペア (QP) が接続されていません。
その他の状態コード
エラーが発生しました。

解説

関連する複数の送信要求を発行する場合は、 NDK_OP_FLAG_SEND_AND_SOLICIT_EVENT フラグを使用できます。 このフラグは、グループ内の最後の要求に設定します。

NDK コンシューマーは、複数の関連する送信要求を発行するときに、このフラグを使用できます。 NDK コンシューマーは、最後の関連する送信要求にのみこのフラグを設定します。 ピアは、すべての送信要求を通常どおり受信します。 ただし、ピアが最後の送信要求 ( NDK_OP_FLAG_SEND_AND_SOLICIT_EVENT フラグが設定された要求) を受信すると、ピアの完了キューによって通知が生成されます。 通知は、受信要求が完了した後に生成されます。 このフラグは、受信者が通知の種類を NDK_CQ_NOTIFY_SOLICITED に設定した NdkArmCq (NDK_FN_ARM_CQ) 関数を以前に呼び出していない限り、受信者 (ピア) には意味がありません。

メモ エラーで完了した要求は、常に NDK_CQ_NOTIFY_SOLICITED 通知の種類と一致します。
 
NDK コンシューマーは、受信側ピアがリモート無効化をサポートしていない場合、 NdkSendAndInvalidate 関数が呼び出されないようにする必要があります。 コンシューマーは、帯域外メカニズムを使用してこの機能をネゴシエートするか、この関数を使用しない必要があります。 コンシューマーがこの要件に違反した場合、プロバイダーの動作は未定義です。

この関数の呼び出しの結果として完了キューに追加されるNDK_RESULT_EX構造体では、Type メンバーに NdkOperationTypeSend を指定する必要があります。 NDK_RESULT_EX構造体の TypeSpecificCompletionOutput メンバーの値を指定する必要はありません。

要件

要件
サポートされている最小のクライアント サポートされていません。NDIS 6.40 以降でサポートされています。
サポートされている最小のサーバー Windows Server 2012 R2
対象プラットフォーム Windows
ヘッダー ndkpi.h (Ndkpi.h を含む)
IRQL <=DISPATCH_LEVEL

こちらもご覧ください

NDKPI 完了処理要件

NDKPI 遅延処理スキーム

NDKPI 作業要求投稿要件

NDK_FN_ARM_CQ

NDK_QP

NDK_RESULT_EX

NDK_SGE