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


функция обратного вызова 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 для асинхронного выполнения операции отправки. Дополнительные сведения об использовании irPs с функциями 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, на которую указывает параметр буфера буфера, должен оставаться заблокированным в памяти до завершения IRP. Кроме того, буфер, на который указывает параметр ControlInfo, также должен оставаться допустимым до завершения IRP. Если приложение WSK выделило цепочку MDL или буфер сведений элемента управления с одной из функций ExAllocateXxx, она не может освободить память с соответствующей функцией exFree ExFree до завершения IRP. Если приложение WSK выделило цепочку MDL или буфер сведений об элементах управления в стеке, оно не может вернуться из функции, которая вызывает функцию WskSendTo до завершения IRP.

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Доступно в Windows Vista и более поздних версиях операционных систем Windows.
целевая платформа Всеобщий
заголовка wsk.h (include Wsk.h)
IRQL <= DISPATCH_LEVEL

См. также

CMSGHDR

SOCKADDR

WSK_BUF

WSK_PROVIDER_DATAGRAM_DISPATCH

WSK_SOCKET

WskCloseSocket

WskControlSocket

WskReceiveFrom

WskReceiveFromEvent