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
指向 WSK 子系统用于异步完成发送作的调用方分配的 IRP 的指针。 有关将 IRP 与 WSK 函数配合使用的详细信息,请参阅 将 IRP 与 Winsock 内核函数配合使用。
返回值
WskSendTo 返回以下 NTSTATUS 代码之一:
返回代码 | 描述 |
---|---|
|
数据报已成功通过套接字发送。 IRP 将以成功状态完成。 IRP IoStatus.Information 字段包含已发送的字节数。 |
|
WSK 子系统无法立即通过套接字发送数据报。 WSK 子系统在通过套接字发送数据报后将完成 IRP。 发送作的状态将在 IRP 的 IoStatus.Status 字段中返回。 如果作成功,则 IRP IoStatus.Information 字段将包含已发送的字节数。 |
|
套接字不再正常工作。 IRP 将以失败状态完成。 WSK 应用程序必须调用 WskCloseSocket 函数才能尽快关闭套接字。 |
|
发生错误。 IRP 将以失败状态完成。 |
言论
如果 WskSendTo 函数返回STATUS_PENDING,则在 IRP 完成之前,Buffer 参数指向的 WSK_BUF 结构中所述的 MDL 链必须保持锁定在内存中。 此外,ControlInfo 参数指向的缓冲区也必须保持有效状态,直到 IRP 完成。 如果 WSK 应用程序使用 ExAllocateXxx 函数之一分配了 MDL 链或控制信息缓冲区,则在 IRP 完成后,它才能释放具有相应 ExFreeXxx 函数的内存。 如果 WSK 应用程序在堆栈上分配了 MDL 链或控件信息缓冲区,则它无法从调用 WskSendTo 函数的函数返回,直到 IRP 完成后。
当 WSK 子系统通过套接字发送数据报时,不会对数据执行任何缓冲。 因此,在实际发送所有数据之前,WSK 子系统不会完成对 WskSendTo 函数的调用。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 在 Windows Vista 和更高版本的 Windows作系统中可用。 |
目标平台 | 普遍 |
标头 | wsk.h (包括 Wsk.h) |
IRQL | <= DISPATCH_LEVEL |