Share via


RxCeSend 関数 (rxce.h)

RxCeSend は、仮想回線上の指定された接続に沿ってトランスポート サービス データ ユニット (TSDU) を送信します。

構文

NTSTATUS RxCeSend(
  [in] IN PRXCE_VC pVc,
  [in] IN ULONG    SendOptions,
  [in] IN PMDL     pMdl,
  [in] IN ULONG    SendLength,
  [in] IN PVOID    pCompletionContext
);

パラメーター

[in] pVc

TSDU が送信される仮想回線へのポインター。

[in] SendOptions

トランスポートによってこの送信操作でデータを送信するために必要なオプション。 これはトランスポートに送信された要求に過ぎないことに注意してください。 トランスポートは、指定されたオプションの限られた数のみをサポートし、サポートされていないオプションを無視できます。 SendOptions パラメーターは、rxce.h で定義されている一連のビットで構成されます。 SendOptions パラメーターには、次のビットの組み合わせを指定できます。

RXCE_SEND_EXPEDITED

指定されたデータは、トランスポートが現在このエンドポイント間接続で送信するためにキューに入っている通常の送信要求の前に送信する必要があります。 トランスポートで優先転送がサポートされていない場合は、このフラグを無視できます。 RXCE_SEND_EXPEDITEDは TDI TDI_SEND_EXPEDITED フラグと同じであることに注意してください。

RXCE_SEND_NO_RESPONSE_EXPECTED

呼び出し元は、リモート ノード ピアからのこの送信に対する応答を期待しないヒントを基になるトランスポートに提供しています。 このフラグは、リモート ノード トランスポートによる TSDU 受信確認のピギーバックを無効にする必要があります。 RXCE_SEND_NO_RESPONSE_EXPECTEDは、TDI_SEND_NO_RESPONSE_EXPECTED フラグと同じであることに注意してください。

RXCE_SEND_NON_BLOCKING

基になるトランスポートに現在、特定のデータに使用できる内部バッファー領域がない場合は、STATUS_DEVICE_NOT_READYで IRP を完了するだけです。 トランスポートに使用可能なバッファー領域がある場合は、クライアントが提供するバッファーからできる限り多くのデータをコピーし、 IoStatus.Information メンバーをコピーしたバイト数に設定し、IRP をSTATUS_SUCCESSで完了する必要があります。

このフラグは、バッファーが内部的に送信されないトランスポートには関係ありません。 RXCE_SEND_NON_BLOCKINGは、TDI_SEND_NON_BLOCKING フラグと同じであることに注意してください。

RXCE_SEND_PARTIAL

RX_MEM_DESC (MDL) を完全に送信するか、または一部のみを送信する必要があるかどうかを示します。 このオプションは、トランスポートと MDL でこの動作が許可されている場合に、トランスポートが送信操作でデータの一部を送信することを許可するように要求します。

RXCE_SEND_SYNCHRONOUS

送信操作がデータを同期的に送信するかどうかを示します。 このオプションを設定すると、要求は基になるトランスポートに送信され、要求が完了するまで制御は呼び出し元に戻りません。 このビットが設定されている場合、 pCompletionContext パラメーターは無視されることに注意してください。

[in] pMdl

送信するバッファーへのポインター。

[in] SendLength

送信するデータの長さ。

[in] pCompletionContext

非同期操作のために SendCompletion 中に呼び出し元に渡されたコンテキスト。 SendOptions パラメーターが同期送信操作を要求する場合、このパラメーターが無視されるわけではありません。

戻り値

RxCeSend は、成功した場合はSTATUS_SUCCESSを返し、失敗した場合は次のいずれかのエラー コードを返します。

リターン コード 説明
STATUS_CONNECTION_DISCONNECTED
無効または切断された仮想回線または接続が指定されました
STATUS_INSUFFICIENT_RESOURCES
このルーチンで必要な非ページ プール メモリの割り当てに失敗しました。
STATUS_INVALID_PARAMETER
指定した SendOptions に基づいて、SendLength パラメーターに無効な長さが渡されました。

注釈

RxCeSend ルーチンは、IRP を割り当て、基になるトランスポート ドライバーの送信要求をビルドし、TDI に要求を送信します。 同期送信操作の場合、このルーチンは、ルーチンの完了時に割り当てられた無料の IRP とリソースも使用します。

RxCeSend で使用される SendOptions パラメーターに示されている非同期オプションと同期オプションは、2 つの状況を区別します。 非同期の場合、要求が基になるトランスポートに正常に送信されると、コントロールは呼び出し元に戻ります。 指定された要求の結果は、 SendCompletion コールバック ルーチンを使用して通信されます。 RxCeSendpCompletionContext パラメーターはコールバック ルーチンで返され、呼び出し元が要求をあいまいにするのを支援します。

同期の場合、要求は基になるトランスポートに送信され、要求が完了するまでコントロールは呼び出し元に戻りません。 同期の場合、 pCompletionContext パラメーターは無視され、返される状態は操作の完了状態に対応します。

非同期オプションと同期オプションの利点は、基になるトランスポートによって異なります。 仮想回線環境 (TCP など) では、同期オプションは、データがサーバーに到達するまでコントロールが返されないことを意味します。 一方、データグラム指向トランスポート (UDP など) の場合、2 つのオプションの違いはほとんどありません。

要件

要件
対象プラットフォーム デスクトップ
Header rxce.h (Rxce.h、Tdi.h を含む)
IRQL <= APC_LEVEL

こちらもご覧ください

Mdl

RxCeSendDatagram