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


функция обратного вызова PFN_WSK_SEND_TO (wsk.h)

Функция WskSendTo отправляет данные датаграммы на удаленный транспортный адрес.

Синтаксис

PFN_WSK_SEND_TO PfnWskSendTo;

NTSTATUS PfnWskSendTo(
  [in]           PWSK_SOCKET Socket,
  [in]           PWSK_BUF Buffer,
                 ULONG Flags,
  [in, optional] PSOCKADDR RemoteAddress,
  [in]           ULONG ControlInfoLength,
  [in, optional] PCMSGHDR ControlInfo,
  [in, out]      PIRP Irp
)
{...}

Параметры

[in] Socket

Указатель на структуру WSK_SOCKET , указывающую объект сокета для сокета датаграммы, по которому отправляется датаграмма.

[in] Buffer

Указатель на инициализированную структуру WSK_BUF , описывающую буфер данных, содержащий датаграмму, отправляемую через сокет.

Flags

Этот параметр зарезервирован для системного использования. Приложение WSK должно задать для этого параметра нулевое значение.

[in, optional] RemoteAddress

Указатель на структуру, указывающую адрес удаленного транспорта, на который отправляется датаграмма. Этот указатель должен быть указателем на конкретный тип структуры SOCKADDR, соответствующий семейству адресов, указанному приложением WSK при создании сокета.

Если приложение WSK задало фиксированный адрес удаленного транспорта или фиксированный адрес транспорта назначения для сокета датаграммы, этот указатель является необязательным и может иметь значение NULL. Если значение РАВНО NULL, датаграмма отправляется на фиксированный адрес удаленного транспорта или фиксированный адрес назначения. Если значение не равно NULL, датаграмма отправляется на указанный адрес удаленного транспорта.

Дополнительные сведения о настройке фиксированного удаленного транспортного адреса для сокета датаграммы см. в статье. SIO_WSK_SET_REMOTE_ADDRESS.

Дополнительные сведения о настройке фиксированного адреса транспорта назначения для сокета датаграммы см. в статье. SIO_WSK_SET_SENDTO_ADDRESS.

[in] ControlInfoLength

Количество байтов данных в буфере, на которое указывает параметр ControlInfo . Если с датаграммой нет сведений об элементах управления, параметр ControlInfoLength должен быть равен нулю.

[in, optional] ControlInfo

Указатель на буфер, содержащий сведения об элементе управления, связанные с отправляемой датаграммой. Информационные данные элемента управления состоят из одного или нескольких объектов данных управления, каждый из которых начинается со структуры CMSGHDR . Если с датаграммой нет сведений об элементах управления, этот параметр должен иметь значение NULL.

[in, out] Irp

Указатель на выделенный вызывающим методом IRP, который подсистема WSK использует для асинхронного завершения операции отправки. Дополнительные сведения об использовании IRP с функциями WSK см. в статье Использование irPs с функциями ядра Winsock.

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

WskSendTo возвращает один из следующих кодов NTSTATUS:

Код возврата Описание
STATUS_SUCCESS
Датаграмма успешно отправлена через сокет. IRP будет завершен с состоянием успешного выполнения. Поле IoStatus.Information IRP содержит количество отправленных байтов.
STATUS_PENDING
Подсистеме WSK не удалось немедленно отправить датаграмму через сокет. Подсистема WSK завершит IRP после отправки датаграммы через сокет. Состояние операции отправки будет возвращено в поле IoStatus.Status IRP. Если операция выполнена успешно, поле IoStatus.Information IRP будет содержать количество отправленных байтов.
STATUS_FILE_FORCED_CLOSED
Сокет больше не работает. IRP будет завершен с состоянием сбоя. Приложение WSK должно вызвать функцию WskCloseSocket , чтобы как можно скорее закрыть сокет.
Другие коды состояния
Произошла ошибка. IRP будет завершен с состоянием сбоя.

Комментарии

Если функция WskSendTo возвращает STATUS_PENDING, цепочка MDL, описанная в структуре WSK_BUF , на которую указывает параметр Buffer, должна оставаться заблокированной в памяти до завершения IRP. Кроме того, буфер, на который указывает параметр ControlInfo , также должен оставаться действительным до завершения IRP. Если приложение WSK выделило цепочку MDL или буфер сведений об управлении с помощью одной из функций ExAllocateXxx , оно не сможет освободить память с помощью соответствующей функции ExFreeXxx до завершения IRP. Если приложение WSK выделило цепочку MDL или буфер сведений об управлении в стеке, оно не может вернуться из функции, вызывающей функцию WskSendTo , до завершения IRP.

Подсистема WSK не выполняет буферизацию данных при отправке датаграмм через сокет. Таким образом, вызов функции WskSendTo не будет выполнен подсистемой WSK до тех пор, пока не будут отправлены все данные.

Требования

Требование Значение
Минимальная версия клиента Доступно в Windows Vista и более поздних версиях операционных систем Windows.
Целевая платформа Универсальное
Верхняя часть wsk.h (включая Wsk.h)
IRQL <= DISPATCH_LEVEL

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

CMSGHDR

SOCKADDR

WSK_BUF

WSK_PROVIDER_DATAGRAM_DISPATCH

WSK_SOCKET

WskCloseSocket

WskControlSocket

WskReceiveFrom

WskReceiveFromEvent