Condividi tramite


Funzione RxCeSend (rxce.h)

RxCeSend invia un'unità dati del servizio di trasporto (TSDU) lungo la connessione specificata in un circuito virtuale.

Sintassi

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

Parametri

[in] pVc

Puntatore al circuito virtuale lungo il quale deve essere inviato il TSDU.

[in] SendOptions

Opzioni desiderate per trasmettere i dati in questa operazione di invio dal trasporto. Si noti che questa è solo una richiesta inviata al trasporto. Il trasporto può supportare solo un numero limitato di opzioni specificate e ignorare le opzioni non supportate. Il parametro SendOptions è costituito da un set di bit definiti in rxce.h. Il parametro SendOptions può essere una combinazione dei bit seguenti:

RXCE_SEND_EXPEDITED

I dati specificati devono essere inviati prima di qualsiasi normale richiesta di invio che il trasporto sta attualmente tenendo in coda per la trasmissione in questa connessione endpoint-to-endpoint. Se il trasporto non supporta trasferimenti veloci, può ignorare questo flag. Si noti che RXCE_SEND_EXPEDITED equivale al flag di TDI_SEND_EXPEDITED TDI.

RXCE_SEND_NO_RESPONSE_EXPECTED

Il chiamante fornisce un suggerimento al trasporto sottostante che non prevede una risposta a questo invio dal peer del nodo remoto. Questo flag deve disabilitare il piggybacking del riconoscimento TSDU dal trasporto a nodo remoto. Si noti che RXCE_SEND_NO_RESPONSE_EXPECTED equivale al flag di TDI_SEND_NO_RESPONSE_EXPECTED.

RXCE_SEND_NON_BLOCKING

Se il trasporto sottostante attualmente non dispone di spazio buffer interno disponibile per i dati specificati, è sufficiente completare l'IRP con STATUS_DEVICE_NOT_READY. Se il trasporto ha uno spazio buffer disponibile, deve copiare quanti dati possono dal buffer fornito dal client, impostare il membro IoStatus.Information sul numero di byte copiato e completare l'IRP con STATUS_SUCCESS.

Questo flag è irrilevante per i trasporti che non vengono inviati internamente al buffer. Si noti che RXCE_SEND_NON_BLOCKING equivale al flag di TDI_SEND_NON_BLOCKING.

RXCE_SEND_PARTIAL

Indica se un RX_MEM_DESC(MDL) deve essere inviato nell'intera area o se è necessario inviare solo parti di esso. Questa opzione richiede che il trasporto consenta all'operazione di invio di trasmettere parte dei dati se il trasporto e MDL consentono questo comportamento.

RXCE_SEND_SYNCHRONOUS

Indica se l'operazione di invio consiste nel trasmettere i dati in modo sincrono. Quando questa opzione è impostata, la richiesta viene inviata al trasporto sottostante e il controllo non torna al chiamante fino al completamento della richiesta. Si noti che il parametro pCompletionContext viene ignorato quando questo bit è impostato.

[in] pMdl

Puntatore al buffer da inviare.

[in] SendLength

Lunghezza dei dati da inviare.

[in] pCompletionContext

Il contesto passato al chiamante durante SendCompletion per le operazioni asincrone. Questo parametro non viene ignorato se il parametro SendOptions richiede un'operazione di invio sincrona.

Valore restituito

RxCeSend restituisce STATUS_SUCCESS sull'esito positivo o su uno dei codici di errore seguenti in caso di errore:

Codice restituito Descrizione
STATUS_CONNECTION_DISCONNECTED
È stato specificato un circuito virtuale o una connessione non valida o disconnessa
STATUS_INSUFFICIENT_RESOURCES
L'allocazione della memoria del pool non con pagine necessaria per questa routine non è riuscita.
STATUS_INVALID_PARAMETER
Una lunghezza non valida è stata passata nel parametro SendLength in base all'oggetto SendOptions specificato.

Commenti

La routine RxCeSend alloca l'IRP, compila la richiesta di invio per il driver di trasporto sottostante e invia la richiesta a TDI. Nel caso delle operazioni di invio sincrone, questa routine eseguirà anche l'IRP e le risorse gratuite allocate al termine della routine.

Le opzioni asincrone e sincrone indicate nel parametro SendOptions usate in RxCeSend distinguono tra due situazioni. Nel caso asincrono, il controllo restituisce al chiamante una volta che la richiesta è stata inviata correttamente al trasporto sottostante. I risultati di qualsiasi richiesta specificata vengono comunicati usando la routine di callback SendCompletion . Il parametro pCompletionContext in RxCeSend viene passato nella routine di callback per aiutare il chiamante a disambiguare le richieste.

Nel caso sincrono, la richiesta viene inviata al trasporto sottostante e il controllo non torna al chiamante fino al completamento della richiesta. Si noti che nel caso sincrono il parametro pCompletionContext viene ignorato e lo stato restituito corrisponde allo stato di completamento delle operazioni.

Il vantaggio delle opzioni asincrone e sincrone dipende dal trasporto sottostante. In un ambiente circuito virtuale (TCP, ad esempio), un'opzione sincrona implica che il controllo non restituisce fino a quando i dati non raggiungono il server. D'altra parte per i trasporti orientati al datagram (UDP, ad esempio), esiste una differenza molto piccola tra le due opzioni.

Requisiti

Requisito Valore
Piattaforma di destinazione Desktop
Intestazione rxce.h (include Rxce.h, Tdi.h)
IRQL <= APC_LEVEL

Vedi anche

MDL

RxCeSendDatagram