Bagikan melalui


Fungsi RxCeSend (rxce.h)

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

Sintaksis

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

Penunjuk 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 sejumlah opsi terbatas yang ditentukan dan mengabaikan opsi yang tidak didukung. Parameter SendOptions terdiri dari sekumpulan bit yang ditentukan dalam rxce.h. Parameter SendOptions dapat menjadi kombinasi dari bit berikut:

RXCE_SEND_EXPEDITED

Data yang diberikan harus dikirim sebelum permintaan pengiriman normal apa pun yang saat ini diantrikan transportasi 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

Pemanggil memberikan petunjuk kepada transportasi yang mendasar bahwa ia tidak mengharapkan respons terhadap pengiriman ini dari peer simpul jarak jauhnya. Bendera ini harus menonaktifkan dukungan piggyback 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, atur IoStatus.Information anggota ke jumlah byte yang disalin, dan selesaikan 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 sebagian 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 saat 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.

Mengembalikan nilai

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

Mengembalikan 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 ditentukan.

Komentar

Rutinitas RxCeSend akan mengalokasikan IRP, membangun permintaan pengiriman untuk driver 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 permintaan tertentu dikomunikasikan kembali menggunakan rutinitas panggilan balik SendCompletion. Parameter pCompletionContext di RxCeSend diteruskan kembali dalam rutinitas panggilan balik untuk membantu pemanggil dalam memisahkan 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 sedikit perbedaan antara kedua opsi.

Persyaratan

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

Lihat juga

MDL

RxCeSendDatagram