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 函数配合使用的详细信息,请参阅 将 IRP 与 Winsock 内核函数配合使用

返回值

WskSendTo 返回以下 NTSTATUS 代码之一:

返回代码 说明
STATUS_SUCCESS
数据报已成功通过套接字发送。 IRP 将以成功状态完成。 IRP 的 IoStatus.Information 字段包含已发送的字节数。
STATUS_PENDING
WSK 子系统无法立即通过套接字发送数据报。 WSK 子系统在通过套接字发送数据报后,将完成 IRP。 发送操作的状态将在 IRP 的 IoStatus.Status 字段中返回。 如果操作成功,IRP 的 IoStatus.Information 字段将包含已发送的字节数。
STATUS_FILE_FORCED_CLOSED
套接字不再正常工作。 IRP 将以失败状态完成。 WSK 应用程序必须调用 WskCloseSocket 函数以尽快关闭套接字。
其他状态代码
出现了错误。 IRP 将以失败状态完成。

注解

如果 WskSendTo 函数返回STATUS_PENDING,则 Buffer 参数指向的 WSK_BUF 结构中描述的 MDL 链必须在内存中保持锁定状态,直到 IRP 完成。 此外,在 IRP 完成之前, ControlInfo 参数指向的缓冲区也必须保持有效。 如果 WSK 应用程序使用 ExAllocateXxx 函数之一分配了 MDL 链或控制信息缓冲区,则在完成 IRP 之前,它无法使用相应的 ExFreeXxx 函数释放内存。 如果 WSK 应用程序在堆栈上分配了 MDL 链或控制信息缓冲区,则在 IRP 完成之前,它无法从调用 WskSendTo 函数的函数返回。

WSK 子系统在通过套接字发送数据报时不执行任何数据缓冲。 因此,在实际发送所有数据之前,WSK 子系统不会完成对 WskSendTo 函数的调用。

要求

要求
最低受支持的客户端 在 Windows Vista 和更高版本的 Windows 操作系统中可用。
目标平台 通用
标头 wsk.h (包括 Wsk.h)
IRQL <= DISPATCH_LEVEL

另请参阅

CMSGHDR

SOCKADDR

WSK_BUF

WSK_PROVIDER_DATAGRAM_DISPATCH

WSK_SOCKET

WskCloseSocket

WskControlSocket

WskReceiveFrom

WskReceiveFromEvent