функция обратного вызова 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:
Возвращаемый код | Описание |
---|---|
|
Диаграмма данных успешно отправлена по сокету. IRP будет завершен с состоянием успешности. Поле IoStatus.Information IRP содержит количество отправленных байтов. |
|
Подсистема WSK не могла немедленно отправить диаграмму данных через сокет. Подсистема WSK завершит IRP после отправки диаграммы данных по сокету. Состояние операции отправки будет возвращено в поле IoStatus.Status IRP. Если операция выполнена успешно, поле IoStatus.Information IRP будет содержать количество отправленных байтов. |
|
Сокет больше не работает. 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 |