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 |
---|---|
|
Es wurde ein ungültiger oder getrennter virtueller Schaltkreis oder eine verbindung angegeben. |
|
Fehler bei der Zuordnung des nicht ausseitigen Poolspeichers, der von dieser Routine benötigt wird. |
|
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 |