Поделиться через


Функция 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

Вызывающий объект дает указание базовому транспорту, который он не ожидает ответа на эту отправку от его однорангового узла удаленного узла. Этот флаг должен отключить piggybacking подтверждения 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 (include Rxce.h, Tdi.h)
IRQL <= APC_LEVEL

См. также

MDL

RxCeSendDatagram