Функция RxCeSend (rxce.h)

RxCeSend отправляет единицу данных службы транспорта (TSDU) вдоль указанного подключения в виртуальном канале.

Синтаксис

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

Параметры

[in] pVc

Указатель на виртуальный канал, по которому отправляется TSDU.

[in] SendOptions

Требуемые параметры для передачи данных в этой операции отправки транспортом. Обратите внимание, что это только запрос, отправляемый транспорту. Транспорт может поддерживать только ограниченное количество указанных параметров и игнорировать параметры, которые не поддерживаются. Параметр SendOptions состоит из набора битов, определенных в rxce.h. Параметр SendOptions может быть сочетанием следующих битов:

RXCE_SEND_EXPEDITED

Указанные данные должны отправляться раньше любых обычных запросов на отправку, которые транспорт в настоящее время содержит в очереди для передачи по этому подключению конечной точки к конечной точке. Если транспорт не поддерживает ускоренную передачу, он может игнорировать этот флаг. Обратите внимание, что RXCE_SEND_EXPEDITED эквивалентен флагу TDI TDI_SEND_EXPEDITED.

RXCE_SEND_NO_RESPONSE_EXPECTED

Вызывающий объект дает указание базовому транспорту, что он не ожидает ответа на эту отправку от своего однорангового узла удаленного узла. Этот флаг должен отключать резервное копирование подтверждения TSDU транспортом удаленного узла. Обратите внимание, что RXCE_SEND_NO_RESPONSE_EXPECTED эквивалентен флагу TDI_SEND_NO_RESPONSE_EXPECTED.

RXCE_SEND_NON_BLOCKING

Если базовый транспорт в настоящее время не имеет внутреннего буферного пространства, доступного для заданных данных, он должен просто завершить IRP с STATUS_DEVICE_NOT_READY. Если у транспорта есть свободное буферное пространство, он должен скопировать из буфера, предоставленного клиентом, скопировать как можно больше данных, задать для элемента IoStatus.Information количество скопированных байтов и завершить IRP с STATUS_SUCCESS.

Этот флаг не имеет отношения к транспортам, которые не буферику отправляются внутри. Обратите внимание, что RXCE_SEND_NON_BLOCKING эквивалентен флагу TDI_SEND_NON_BLOCKING.

RXCE_SEND_PARTIAL

Указывает, следует ли отправить RX_MEM_DESC (MDL) полностью или же необходимо отправить только его части. Этот параметр запрашивает, чтобы транспорт разрешал операции отправки передавать часть данных, если транспорт и MDL допускают такое поведение.

RXCE_SEND_SYNCHRONOUS

Указывает, передает ли операция отправки данные синхронно. Если этот параметр задан, запрос отправляется в базовый транспорт, а элемент управления не возвращается вызывающей объекту до завершения запроса. Обратите внимание, что параметр pCompletionContext игнорируется при установке этого бита.

[in] pMdl

Указатель на отправляемый буфер.

[in] SendLength

Длина отправляемых данных.

[in] pCompletionContext

Контекст, передаваемый обратно вызывающей стороне во время SendCompletion для асинхронных операций. Не то чтобы этот параметр игнорируется, если параметр SendOptions запрашивает синхронную операцию отправки.

Возвращаемое значение

RxCeSend возвращает STATUS_SUCCESS об успешном выполнении или один из следующих кодов ошибок при сбое:

Код возврата Описание
STATUS_CONNECTION_DISCONNECTED
Указан недопустимый или отключенный виртуальный канал или подключение
STATUS_INSUFFICIENT_RESOURCES
Произошел сбой выделения памяти невыгрегированного пула, необходимой этой подпрограмме.
STATUS_INVALID_PARAMETER
В параметре SendLength передана недопустимая длина на основе указанного параметра SendOptions .

Комментарии

Подпрограмма RxCeSend выделит IRP, создаст запрос на отправку для базового транспортного драйвера и отправит запрос в TDI. В случае синхронных операций отправки эта подпрограмма также будет использовать бесплатные IRP и ресурсы, выделенные по завершении процедуры.

Асинхронные и синхронные параметры, указанные в параметре SendOptions , используемом в RxCeSend, различают две ситуации. В асинхронном случае управление возвращается вызывающей объекту после успешной отправки запроса в базовый транспорт. Результаты для любого запроса передаются обратно с помощью процедуры обратного вызова SendCompletion . Параметр pCompletionContext в RxCeSend передается обратно в подпрограмме обратного вызова, чтобы помочь вызывающей стороне устранить неоднозначность запросов.

В синхронном случае запрос отправляется в базовый транспорт, и элемент управления не возвращается вызывающей объекту до завершения запроса. Обратите внимание, что в синхронном случае параметр pCompletionContext игнорируется, а возвращаемое состояние соответствует состоянию завершения операций.

Преимущество асинхронных и синхронных параметров зависит от базового транспорта. В среде виртуального канала (например, TCP) синхронный параметр подразумевает, что элемент управления не возвращается, пока данные не поймут сервер. С другой стороны, для транспортов, ориентированных на датаграммы (например, UDP), существует очень небольшая разница между двумя вариантами.

Требования

Требование Значение
Целевая платформа Персональный компьютер
Верхняя часть rxce.h (включая Rxce.h, Tdi.h)
IRQL <= APC_LEVEL

См. также раздел

MDL

RxCeSendDatagram