PFN_WSK_SEND回调函数 (wsk.h)

WskSend 函数通过面向连接的或流套接字将数据发送到远程传输地址。

语法

PFN_WSK_SEND PfnWskSend;

NTSTATUS PfnWskSend(
  [in]      PWSK_SOCKET Socket,
  [in]      PWSK_BUF Buffer,
  [in]      ULONG Flags,
  [in, out] PIRP Irp
)
{...}

参数

[in] Socket

指向 WSK_SOCKET 结构的指针,该结构指定要发送数据的套接字的套接字对象。

[in] Buffer

指向已初始化 WSK_BUF 结构的指针,该结构描述包含通过套接字发送的数据的数据缓冲区。

[in] Flags

一个 ULONG 值,该值包含以下标志的组合的按位 OR:

WSK_FLAG_NODELAY

指示基础传输立即将数据和任何以前排队的数据发送到远程应用程序,而不会延迟。

Microsoft TCP/IP 传输协议支持此标志。 其他传输协议可能不支持此标志。

[in, out] Irp

指向调用方分配的 IRP 的指针,WSK 子系统使用该 IRP 以异步方式完成发送操作。 有关将 IRP 与 WSK 函数配合使用的详细信息,请参阅 将 IRP 与 Winsock 内核函数配合使用

返回值

WskSend 返回以下 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 函数以尽快关闭套接字。
STATUS_NOT_SUPPORTED
基础网络传输不支持指定的标志。
其他状态代码
出现了错误。 IRP 将以失败状态完成。

注解

WSK 应用程序只能在以前已连接到远程传输地址的面向连接的或流套接字上调用 WskSend 函数。 面向连接的套接字通过以下方法之一连接到远程传输地址:

  • WSK 应用程序通过调用 WskConnect 函数来连接套接字。
  • WSK 应用程序通过调用 WskSocketConnect 函数创建、绑定和连接套接字。
  • 当 WSK 应用程序接受侦听套接字上的传入连接请求时,WSK 子系统将连接套接字。
如果 WskSend 函数返回STATUS_PENDING,则 Buffer 参数指向的 WSK_BUF 结构中描述的 MDL 链必须在内存中保持锁定状态,直到 IRP 完成。

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

要求

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

另请参阅

WSK_BUF

WSK_PROVIDER_CONNECTION_DISPATCH

WSK_PROVIDER_STREAM_DISPATCH

WSK_SOCKET

WskCloseSocket

WskReceive

WskReceiveEvent