PFN_WSK_SOCKET_CONNECT回调函数 (wsk.h)

WskSocketConnect 函数创建一个新的面向连接的套接字,将其绑定到本地传输地址,将其连接到给定的远程传输地址,并返回指向关联套接字对象的指针。

语法

PFN_WSK_SOCKET_CONNECT PfnWskSocketConnect;

NTSTATUS PfnWskSocketConnect(
  [in]           PWSK_CLIENT Client,
  [in]           USHORT SocketType,
  [in]           ULONG Protocol,
  [in]           PSOCKADDR LocalAddress,
  [in]           PSOCKADDR RemoteAddress,
                 ULONG Flags,
  [in, optional] PVOID SocketContext,
  [in, optional] const WSK_CLIENT_CONNECTION_DISPATCH *Dispatch,
  [in, optional] PEPROCESS OwningProcess,
  [in, optional] PETHREAD OwningThread,
  [in, optional] PSECURITY_DESCRIPTOR SecurityDescriptor,
  [in, out]      PIRP Irp
)
{...}

参数

[in] Client

指向通过 WskProviderNpi 参数返回的 WSK_CLIENT 结构的指针 WskCaptureProviderNPI 函数。

[in] SocketType

正在创建的套接字的类型。 支持以下套接字类型:

SOCK_STREAM

支持可靠的面向连接的字节流通信。

SOCK_DGRAM

支持不可靠的无连接数据报通信。

SOCK_RAW

支持对传输协议的原始访问。

有关每个受支持的地址系列支持的套接字类型的详细信息,请参阅
WSK 地址家庭

[in] Protocol

正在创建的套接字的传输协议。 有关每个受支持地址系列支持的协议的详细信息,请参阅 WSK 地址系列

[in] LocalAddress

指向一个结构的指针,该结构指定要将套接字绑定到的本地传输地址。 WSK 应用程序必须指定指向特定 SOCKADDR 结构类型的指针,该类型对应于要创建的套接字的地址系列。

[in] RemoteAddress

指向一个结构的指针,该结构指定要连接到套接字的远程传输地址。 WSK 应用程序必须指定指向特定 SOCKADDR 结构类型的指针,该类型对应于要创建的套接字的地址系列。

Flags

此参数保留供系统使用。 WSK 应用程序必须将此参数设置为零。

[in, optional] SocketContext

指向所创建的套接字的调用方提供的上下文的指针。 WSK 子系统将此指针传递给套接字的事件回调函数。 上下文信息对 WSK 子系统不透明,并且必须存储在非分页内存中。 如果 WSK 应用程序不会在新套接字上启用任何事件回调函数,则应将此指针设置为 NULL

[in, optional] Dispatch

指向常量的指针 WSK_CLIENT_CONNECTION_DISPATCH 结构。 此结构是一个调度表,其中包含指向新套接字的事件回调函数的指针。 如果 WSK 应用程序不会为新套接字启用所有事件回调函数,则应将调度表中的指针设置为为其未启用的那些事件回调函数 NULL。 如果 WSK 应用程序不会在新套接字上启用任何事件回调函数,则应将此指针设置为 NULL

[in, optional] OwningProcess

指向 WSK 子系统从中检索在绑定套接字时要使用的安全上下文的进程的指针。 WSK 子系统使用安全上下文来确定如果该地址已在使用,是否可以共享本地传输地址。 若要指定当前进程,WSK 应用程序会将此指针设置为 NULL

[in, optional] OwningThread

指向特定线程的指针,WSK 子系统将从中检索绑定套接字时要使用的安全上下文。 WSK 子系统使用安全上下文来确定如果该地址已在使用,是否可以共享本地传输地址。 如果 WSK 应用程序不需要指定特定线程,则将此指针设置为 NULL

[in, optional] SecurityDescriptor

指向SECURITY_DESCRIPTOR结构的指针,该结构指定要应用于所创建的套接字的安全描述符。 安全描述符控制套接字绑定到的本地传输地址的共享。 如果 WSK 应用程序指定非NULL 指针,则必须使用 WSK_CACHE_SD 控制代码调用 WskControlClient 函数来指定指向安全描述符的缓存副本的指针。 若要指定不允许共享本地传输地址的默认安全描述符,WSK 应用程序会将 SecurityDescriptor 设置为 NULL

有关SECURITY_DESCRIPTOR结构的详细信息,请参阅 Microsoft Windows SDK 文档中SECURITY_DESCRIPTOR的参考页。

[in, out] Irp

指向调用方分配的 IRP 的指针,WSK 子系统用于异步完成新套接字的创建。 有关将 IRP 与 WSK 函数配合使用的详细信息,请参阅 将 IRP 与 Winsock 内核函数配合使用

返回值

WskSocketConnect 返回以下 NTSTATUS 代码之一:

返回代码 描述
STATUS_SUCCESS
已成功创建新套接字。 IRP 将以成功状态完成。
STATUS_PENDING
WSK 子系统无法立即创建套接字。 创建新套接字后,WSK 子系统将完成 IRP。 将在 IRP 的 IoStatus.Status 字段中返回套接字创建状态。
其他状态代码
发生错误。 IRP 将以失败状态完成。

言论

如果 IRP 以成功状态完成,则 IRP IoStatus.Information 字段包含指向新套接字的套接字对象结构的指针(WSK_SOCKET)。

WSK 应用程序可以通过使用 WSK_TRANSPORT_LIST_QUERY 控制代码调用 WskControlClient 函数来获取可用传输协议的列表。 WskControlClient 返回一个 WSK_TRANSPORT 结构列表,其中包含 SocketType协议 参数的所有有效组合。

WSK 子系统从 SOCKADDR 结构中指定的地址系列确定新套接字的地址系列,该结构由 LocalAddress 参数所指向。

如果 WSK 应用程序需要在绑定或连接套接字之前在套接字上设置套接字选项或发出 I/O 控制作,WSK 应用程序必须调用 WskSocketWskBind,以及 WskConnect 函数,而不是调用 WskSocketConnect 函数。

当 WSK 应用程序成功创建新套接字时,默认情况下会禁用新套接字上的所有事件回调函数。 有关启用任何新套接字的事件回调函数的详细信息,请参阅 启用和禁用事件回调函数

如果 WSK 应用程序为 SecurityDescriptor 参数指定了非NULL 指针,则在 IRP 完成后,它不得释放缓存的安全描述符。

WSK 子系统代表 WSK 应用程序为新套接字分配套接字对象结构的内存(WSK_SOCKET)。 关闭套接字时,WSK 子系统会解除分配此内存。

要求

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

另请参阅

SOCKADDR

WSK_CLIENT

WSK_CLIENT_CONNECTION_DISPATCH

WSK_PROVIDER_DISPATCH

WSK_PROVIDER_NPI

WSK_SOCKET

WskCaptureProviderNPI

WskCloseSocket

WskControlClient

WskSocket