Freigeben über


RxCeSend-Funktion (rxce.h)

RxCeSend sendet eine Transportdienstdateneinheit (TSDU) entlang der angegebenen Verbindung auf einem virtuellen Schaltkreis.

Syntax

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

Ein Zeiger auf den virtuellen Schaltkreis, über den die TSDU gesendet werden soll.

[in] SendOptions

Die gewünschten Optionen zum Übertragen der Daten an diesen Sendevorgang durch den Transport. Beachten Sie, dass dies nur eine Anforderung ist, die an den Transport gesendet wird. Der Transport unterstützt möglicherweise nur eine begrenzte Anzahl der angegebenen optionen und ignorierte Optionen, die nicht unterstützt werden. Der SendOptions Parameter besteht aus einer Gruppe von Bits, die in rxce.hdefiniert sind. Der SendOptions Parameter kann eine Kombination der folgenden Bits sein:

RXCE_SEND_EXPEDITED

Die angegebenen Daten sollten vor allen normalen Sendeanforderungen gesendet werden, die der Transport derzeit für die Übertragung an diese Endpunkt-zu-Endpunkt-Verbindung in der Warteschlange hält. Wenn der Transport beschleunigte Übertragungen nicht unterstützt, kann dieses Flag ignoriert werden. Beachten Sie, dass RXCE_SEND_EXPEDITED dem TDI-TDI_SEND_EXPEDITED-Flag entspricht.

RXCE_SEND_NO_RESPONSE_EXPECTED

Der Aufrufer gibt dem zugrunde liegenden Transport einen Hinweis darauf, dass er keine Antwort auf dieses Senden von seinem Remoteknoten-Peer erwartet. Diese Kennzeichnung sollte die Schweinegrüge der TSDU-Bestätigung durch den Remoteknotentransport deaktivieren. Beachten Sie, dass RXCE_SEND_NO_RESPONSE_EXPECTED dem kennzeichen TDI_SEND_NO_RESPONSE_EXPECTED entspricht.

RXCE_SEND_NON_BLOCKING

Wenn der zugrunde liegende Transport derzeit keinen internen Pufferplatz für die angegebenen Daten zur Verfügung hat, sollte er nur das IRP mit STATUS_DEVICE_NOT_READY abschließen. Wenn der Transport über einen Pufferspeicher verfügt, sollte er so viele Daten wie aus dem vom Client bereitgestellten Puffer kopieren, den IoStatus.Information Member auf die Anzahl der kopierten Bytes festlegen und das IRP mit STATUS_SUCCESS abschließen.

Dieses Flag ist irrelevant für Transporte, die nicht intern zwischengespeichert werden. Beachten Sie, dass RXCE_SEND_NON_BLOCKING dem kennzeichen TDI_SEND_NON_BLOCKING entspricht.

RXCE_SEND_PARTIAL

Gibt an, ob eine RX_MEM_DESC(MDL) vollständig gesendet werden soll oder nur Teile davon gesendet werden müssen. Diese Option fordert an, dass der Transport es dem Sendevorgang ermöglicht, Einen Teil der Daten zu übertragen, wenn der Transport und MDL dieses Verhalten zulassen.

RXCE_SEND_SYNCHRONOUS

Gibt an, ob der Sendevorgang die Daten synchron überträgt. Wenn diese Option festgelegt ist, wird die Anforderung an den zugrunde liegenden Transport übermittelt und das Steuerelement wird erst an den Aufrufer zurückgegeben, wenn die Anforderung abgeschlossen ist. Beachten Sie, dass der pCompletionContext- Parameter ignoriert wird, wenn dieses Bit festgelegt ist.

[in] pMdl

Ein Zeiger auf den zu sendenden Puffer.

[in] SendLength

Die Länge der zu sendenden Daten.

[in] pCompletionContext

Der Kontext, der während SendCompletion- für asynchrone Vorgänge an den Aufrufer übergeben wurde. Dieser Parameter wird nicht ignoriert, wenn der SendOptions Parameter einen synchronen Sendevorgang anfordert.

Rückgabewert

RxCeSend- gibt STATUS_SUCCESS bei Erfolg oder einer der folgenden Fehlercodes für Fehler zurück:

Rückgabecode Beschreibung
STATUS_CONNECTION_DISCONNECTED
Es wurde ein ungültiger oder getrennter virtueller Schaltkreis oder eine verbindung angegeben.
STATUS_INSUFFICIENT_RESOURCES
Fehler bei der Zuordnung des nicht ausseitigen Poolspeichers, der von dieser Routine benötigt wird.
STATUS_INVALID_PARAMETER
Eine ungültige Länge wurde im SendLength Parameter übergeben, basierend auf dem angegebenen SendOptions-.

Bemerkungen

Die RxCeSend Routine ordnet das IRP zu, erstellt die Sendeanforderung für den zugrunde liegenden Transporttreiber und sendet die Anforderung an TDI. Bei synchronen Sendevorgängen wird diese Routine auch die freie IRP und Ressourcen zugeordnet, die nach Abschluss der Routine zugewiesen werden.

Die im SendOptions Parameter angegebenen asynchronen und synchronen Optionen, die in RxCeSend verwendet werden, unterscheiden zwischen zwei Situationen. Im asynchronen Fall kehrt das Steuerelement an den Aufrufer zurück, nachdem die Anforderung erfolgreich an den zugrunde liegenden Transport gesendet wurde. Die Ergebnisse für eine bestimmte Anforderung werden mithilfe der SendCompletion Rückrufroutine übermittelt. Der pCompletionContext Parameter in RxCeSend wird in der Rückrufroutine übergeben, um den Aufrufer bei der Mehrdeutigkeit der Anforderungen zu unterstützen.

Im synchronen Fall wird die Anforderung an den zugrunde liegenden Transport übermittelt, und das Steuerelement kehrt erst an den Aufrufer zurück, wenn die Anforderung abgeschlossen ist. Beachten Sie, dass im synchronen Fall der pCompletionContext- Parameter ignoriert wird und der zurückgegebene Status dem Abschlussstatus der Vorgänge entspricht.

Der Vorteil asynchroner und synchroner Optionen hängt vom zugrunde liegenden Transport ab. In einer virtuellen Schaltkreisumgebung (z. B. TCP) bedeutet eine synchrone Option, dass das Steuerelement erst zurückgegeben wird, wenn die Daten den Server erreicht haben. Andererseits gibt es für datagramorientierte Transporte (UDP, z. B. UDP) einen sehr geringen Unterschied zwischen den beiden Optionen.

Anforderungen

Anforderung Wert
Zielplattform- Desktop
Header- rxce.h (include Rxce.h, Tdi.h)
IRQL- <= APC_LEVEL

Siehe auch

MDL-

RxCeSendDatagram-