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、失敗した場合は次のいずれかのエラー コードが返されます。
| リターン コード | 形容 |
|---|---|
|
無効または切断された仮想回線または接続が指定されました |
|
このルーチンで必要な非ページ プール メモリの割り当てに失敗しました。 |
|
指定された SendOptions に基づいて、SendLength パラメーターに無効な長 渡されました。 |
備考
rxCeSend ルーチン IRP を割り当て、基になるトランスポート ドライバーの送信要求をビルドし、TDI に要求を送信します。 同期送信操作の場合、このルーチンは、ルーチンの完了時に割り当てられる空き IRP とリソースも行います。
RxCeSend で使用される SendOptions パラメーターに示されている非同期オプションと同期オプション、2 つの状況を区別します。 非同期の場合、要求が基になるトランスポートに正常に送信されると、コントロールは呼び出し元に戻ります。 特定の要求の結果は、SendCompletion コールバック ルーチンを使用して伝達されます。 rxCeSend の pCompletionContext パラメーター コールバック ルーチンに戻され、呼び出し元が要求のあいまいさを解消するのに役立ちます。
同期の場合、要求は基になるトランスポートに送信され、要求が完了するまでコントロールは呼び出し元に戻りません。 同期の場合、pCompletionContext パラメーターは無視され、返される状態は操作の完了状態に対応します。
非同期オプションと同期オプションの利点は、基になるトランスポートによって異なります。 仮想回線環境 (TCP など) では、同期オプションは、データがサーバーに到達するまでコントロールが戻らないことを意味します。 一方、データグラム指向トランスポート (UDP など) の場合、2 つのオプションの違いはほとんどありません。
必要条件
| 要件 | 価値 |
|---|---|
| ターゲット プラットフォーム の | デスクトップ |
| ヘッダー | rxce.h (Rxce.h、Tdi.h を含む) |
| IRQL | <= APC_LEVEL |
関連項目
MDL を する
rxCeSendDatagram の