Fungsi RxCeSend (rxce.h)

RxCeSend mengirimkan unit data layanan transportasi (TSDU) di sepanjang koneksi yang ditentukan pada sirkuit virtual.

Sintaks

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

Parameter

[in] pVc

Pointer ke sirkuit virtual di mana TSDU akan dikirim.

[in] SendOptions

Opsi yang diinginkan untuk mengirimkan data pada operasi pengiriman ini oleh transportasi. Perhatikan bahwa ini hanya permintaan yang dikirim ke transportasi. Transportasi hanya dapat mendukung jumlah terbatas opsi yang ditentukan dan mengabaikan opsi yang tidak didukung. Parameter SendOptions terdiri dari sekumpulan bit yang ditentukan dalam rxce.h. Parameter SendOptions dapat berupa kombinasi dari bit berikut:

RXCE_SEND_EXPEDITED

Data yang diberikan harus dikirim sebelum permintaan pengiriman normal yang saat ini disimpan dalam antrean untuk transmisi pada koneksi titik akhir-ke-titik akhir ini. Jika transportasi tidak mendukung transfer yang dipercepat, transportasi dapat mengabaikan bendera ini. Perhatikan bahwa RXCE_SEND_EXPEDITED setara dengan bendera TDI_SEND_EXPEDITED TDI.

RXCE_SEND_NO_RESPONSE_EXPECTED

Penelepon memberikan petunjuk kepada transportasi yang mendasar bahwa ia tidak mengharapkan respons terhadap pengiriman ini dari peer simpul jarak jauhnya. Bendera ini harus menonaktifkan piggybacking dari pengakuan TSDU oleh transportasi simpul jarak jauh. Perhatikan bahwa RXCE_SEND_NO_RESPONSE_EXPECTED setara dengan bendera TDI_SEND_NO_RESPONSE_EXPECTED.

RXCE_SEND_NON_BLOCKING

Jika transportasi yang mendasar saat ini tidak memiliki ruang buffer internal yang tersedia untuk data yang diberikan, itu seharusnya hanya menyelesaikan IRP dengan STATUS_DEVICE_NOT_READY. Jika transportasi memiliki beberapa ruang buffer yang tersedia, transportasi harus menyalin data sebanyak mungkin dari buffer yang disediakan klien, mengatur anggota IoStatus.Information ke jumlah byte yang disalin, dan menyelesaikan IRP dengan STATUS_SUCCESS.

Bendera ini tidak relevan untuk transportasi yang tidak dikirim buffer secara internal. Perhatikan bahwa RXCE_SEND_NON_BLOCKING setara dengan bendera TDI_SEND_NON_BLOCKING.

RXCE_SEND_PARTIAL

Menandakan apakah RX_MEM_DESC (MDL) akan dikirim secara keseluruhan, atau jika hanya bagian dari RX_MEM_DESC yang perlu dikirim. Opsi ini meminta agar transportasi memungkinkan operasi pengiriman mengirimkan bagian dari data jika transportasi dan MDL memungkinkan perilaku ini.

RXCE_SEND_SYNCHRONOUS

Menandakan apakah operasi pengiriman adalah mengirimkan data secara sinkron. Ketika opsi ini diatur, permintaan dikirimkan ke transportasi dan kontrol yang mendasar tidak kembali ke pemanggil sampai permintaan selesai. Perhatikan bahwa parameter pCompletionContext diabaikan ketika bit ini diatur.

[in] pMdl

Penunjuk ke buffer yang akan dikirim.

[in] SendLength

Panjang data yang akan dikirim.

[in] pCompletionContext

Konteks diteruskan kembali ke pemanggil selama SendCompletion untuk operasi asinkron. Bukan berarti parameter ini diabaikan jika parameter SendOptions meminta operasi pengiriman sinkron.

Nilai kembali

RxCeSend mengembalikan STATUS_SUCCESS pada keberhasilan atau salah satu kode kesalahan berikut tentang kegagalan:

Menampilkan kode Deskripsi
STATUS_CONNECTION_DISCONNECTED
Sirkuit virtual atau koneksi yang tidak valid atau terputus ditentukan
STATUS_INSUFFICIENT_RESOURCES
Alokasi memori kumpulan yang tidak disebarkan yang diperlukan oleh rutinitas ini gagal.
STATUS_INVALID_PARAMETER
Panjang yang tidak valid diteruskan dalam parameter SendLength berdasarkan SendOptions yang ditentukan.

Keterangan

Rutinitas RxCeSend akan mengalokasikan IRP, membangun permintaan pengiriman untuk pengemudi transportasi yang mendasar, dan mengirimkan permintaan ke TDI. Dalam kasus operasi pengiriman sinkron, rutinitas ini juga akan IRP gratis dan sumber daya yang dialokasikan ketika rutinitas selesai.

Opsi asinkron dan sinkron yang ditunjukkan dalam parameter SendOptions yang digunakan dalam RxCeSend membedakan antara dua situasi. Dalam kasus asinkron, kontrol kembali ke pemanggil setelah permintaan berhasil dikirimkan ke transportasi yang mendasar. Hasil untuk setiap permintaan yang diberikan dikomunikasikan kembali menggunakan rutinitas panggilan balik SendCompletion . Parameter pCompletionContext di RxCeSend diteruskan kembali dalam rutinitas panggilan balik untuk membantu pemanggil dalam membedakan permintaan.

Dalam kasus sinkron, permintaan dikirimkan ke transportasi yang mendasar dan kontrol tidak kembali ke pemanggil sampai permintaan selesai. Perhatikan bahwa dalam kasus sinkron, parameter pCompletionContext diabaikan dan status yang dikembalikan sesuai dengan status penyelesaian operasi.

Manfaat opsi asinkron dan sinkron tergantung pada transportasi yang mendasar. Dalam lingkungan sirkuit virtual (TCP, misalnya), opsi sinkron menyiratkan bahwa kontrol tidak kembali sampai data mencapai server. Di sisi lain untuk transportasi berorientasi datagram (UDP, misalnya), ada sangat sedikit perbedaan antara kedua opsi.

Persyaratan

Persyaratan Nilai
Target Platform Desktop
Header rxce.h (termasuk Rxce.h, Tdi.h)
IRQL <= APC_LEVEL

Lihat juga

MDL

RxCeSendDatagram