WSAPROTOCOL_INFOW 结构 (winsock2.h)

WSAPROTOCOL_INFOW结构用于存储或检索给定协议的完整信息。 协议名称表示为 Unicode 字符数组。

语法

typedef struct _WSAPROTOCOL_INFOW {
  DWORD            dwServiceFlags1;
  DWORD            dwServiceFlags2;
  DWORD            dwServiceFlags3;
  DWORD            dwServiceFlags4;
  DWORD            dwProviderFlags;
  GUID             ProviderId;
  DWORD            dwCatalogEntryId;
  WSAPROTOCOLCHAIN ProtocolChain;
  int              iVersion;
  int              iAddressFamily;
  int              iMaxSockAddr;
  int              iMinSockAddr;
  int              iSocketType;
  int              iProtocol;
  int              iProtocolMaxOffset;
  int              iNetworkByteOrder;
  int              iSecurityScheme;
  DWORD            dwMessageSize;
  DWORD            dwProviderReserved;
  WCHAR            szProtocol[WSAPROTOCOL_LEN + 1];
} WSAPROTOCOL_INFOW, *LPWSAPROTOCOL_INFOW;

成员

dwServiceFlags1

类型:DWORD

描述协议提供的服务的位掩码。 此成员的可能值在 Winsock2.h 头文件中定义。

可以使用以下值。

含义
XP1_CONNECTIONLESS
0x00000001
提供无连接 (数据报) 服务。 如果未设置,则协议支持面向连接的数据传输。
XP1_GUARANTEED_DELIVERY
0x00000002
保证发送的所有数据都将到达预期目标。
XP1_GUARANTEED_ORDER
0x00000004
保证数据仅按发送顺序到达,并且不会重复。 此特征不一定意味着数据始终传递,但传递的任何数据都按发送顺序传递。
XP1_MESSAGE_ORIENTED
0x00000008
遵循消息边界 - 与没有消息边界概念的面向流的协议相反。
XP1_PSEUDO_STREAM
0x00000010
面向消息的协议,但对于所有回执,将忽略消息边界。 当应用程序不希望通过协议完成消息帧时,这很方便。
XP1_GRACEFUL_CLOSE
0x00000020
支持两阶段 (正常关闭) 。 如果未设置,则仅执行中止关闭。
XP1_EXPEDITED_DATA
0x00000040
支持快速 (紧急) 数据。
XP1_CONNECT_DATA
0x00000080
支持连接数据。
XP1_DISCONNECT_DATA
0x00000100
支持断开连接数据。
XP1_SUPPORT_BROADCAST
0x00000200
支持广播机制。
XP1_SUPPORT_MULTIPOINT
0x00000400
支持多点或多播机制。 下面指示了控件和数据平面属性。
XP1_MULTIPOINT_CONTROL_PLANE
0x00000800
指示控制平面是根 (值 = 1) 还是非根 (值 = 0) 。
XP1_MULTIPOINT_DATA_PLANE
0x00001000
指示数据平面是根 (值 = 1) 还是非根 (值 = 0) 。
XP1_QOS_SUPPORTED
0x00002000
支持服务质量请求。
XP1_INTERRUPT
保留位。
XP1_UNI_SEND
0x00008000
协议在发送方向上是单向的。
XP1_UNI_RECV
0x00010000
协议在 recv 方向上是单向的。
XP1_IFS_HANDLES
0x00020000
提供程序返回的套接字描述符是操作系统可安装文件系统 (IFS) 句柄。
XP1_PARTIAL_MESSAGE
0x00040000
WSASend 和 WSASendTo 支持 MSG_PARTIAL 标志。
XP1_SAN_SUPPORT_SDP
0x00080000
协议提供对 SAN 的支持。

Windows 7 和 Windows Server 2008 R2 支持此值。

 
注意 只能设置XP1_UNI_SEND值或XP1_UNI_RECV值之一。 如果协议在任一方向上可以是单向的,则应使用两 个WSAPROTOCOL_INFOW 结构。 如果未设置这两个位,则协议被视为双向协议。
 

dwServiceFlags2

类型:DWORD

保留给附加协议属性定义。

dwServiceFlags3

类型:DWORD

保留给附加协议属性定义。

dwServiceFlags4

类型:DWORD

保留给附加协议属性定义。

dwProviderFlags

类型:DWORD

一组标志,用于提供有关此协议在 Winsock 目录中的表示方式的信息。 此成员的可能值在 Winsock2.h 头文件中定义。

可以使用以下值。

含义
PFL_MULTIPLE_PROTO_ENTRIES
0x00000001
指示这是单个协议的两个或多个条目之一, (来自给定提供程序) 能够实现多个行为。 其中一个示例是 SPX,在接收方,它可以充当面向消息的协议或面向流的协议。
PFL_RECOMMENDED_PROTO_ENTRY
0x00000002
指示这是能够实现多个行为的协议的建议或最常用的条目。
PFL_HIDDEN
0x00000004
由提供程序设置,以指示 Ws2_32.dll 不应在 WSAEnumProtocols 生成的结果缓冲区中返回此协议。 显然,Windows 套接字 2 应用程序永远不会看到具有此位集的条目。
PFL_MATCHES_PROTOCOL_ZERO
0x00000008
指示 socketWSASocket协议参数中的值零与此协议条目匹配。
PFL_NETWORKDIRECT_PROVIDER
0x00000010
由提供程序设置,以指示支持网络直接访问。

Windows 7 和 Windows Server 2008 R2 支持此值。

ProviderId

类型: GUID

服务提供商供应商分配给提供程序的全局唯一标识符 (GUID) 。 此值对于多个服务提供商能够实现特定协议的实例很有用。 应用程序可以使用 ProviderId 成员来区分本来可能无法区分的提供程序。

dwCatalogEntryId

类型:DWORD

由 WS2_32.DLL 为每个WSAPROTOCOL_INFO结构分配的唯 标识符。

ProtocolChain

类型: WSAPROTOCOLCHAIN

与协议关联的 WSAPROTOCOLCHAIN 结构。 如果链的长度为 0,则此 WSAPROTOCOL_INFO 条目表示具有 Windows 套接字 2 SPI 作为其上边缘和下边缘的分层协议。 如果链的长度等于 1,则此条目表示其目录条目标识符位于 WSAPROTOCOL_INFO 结构的 dwCatalogEntryId 成员中的基本协议。 如果链的长度大于 1,则此条目表示一个协议链,该协议链由一个或多个基于基本协议的分层协议组成。 相应的目录条目标识符位于 ProtocolChain.ChainEntries 数组中,从顶部的分层协议开始 (ProtocolChain.ChainEntries 数组中的零个元素) ,以基本协议结束。 有关协议链的详细信息,请参阅 Windows 套接字 2 服务提供程序接口规范。

iVersion

类型: int

协议版本标识符。

iAddressFamily

类型: int

要作为地址系列参数传递给 套接字WSASocket 函数的值,以便为此协议打开套接字。 此值还唯一定义协议使用的 sockaddr 的协议地址结构。

在针对 Windows Vista 及更高版本发布的 Windows SDK 上,地址系列的可能值在 Ws2def.h 头文件中定义。 请注意, Ws2def.h 头文件自动包含在 Winsock2.h 中,不应直接使用。

在 Windows Server 2003 及更早版本的平台 SDK 上,地址系列的可能值在 Winsock2.h 头文件中定义。

当前支持的值AF_INET或AF_INET6,即 IPv4 和 IPv6 的 Internet 地址系列格式。 用于 NetBIOS 的地址系列 (AF_NETBIOS 的其他选项,例如,如果安装了地址系列的 Windows 套接字服务提供程序,则支持) 。 请注意,AF_地址系列和PF_协议系列常量的值 (相同,例如 ,AF_INETPF_INET) ,因此可以使用任一常量。

下表列出了地址系列的常见值,尽管许多其他值是可能的。

iAddressFamily 含义
AF_INET
2
Internet 协议版本 4 (IPv4) 地址系列。
AF_IPX
6
IPX/SPX 地址系列。 仅当安装了 NWLink IPX/SPX NetBIOS 兼容传输协议时,才支持此地址系列。

Windows Vista 及更高版本不支持此地址系列。

AF_APPLETALK
16
AppleTalk 地址系列。 仅当安装了 AppleTalk 协议时,才支持此地址系列。

Windows Vista 及更高版本不支持此地址系列。

AF_NETBIOS
17
NetBIOS 地址系列。 仅当安装了适用于 NetBIOS 的 Windows 套接字提供程序时,才支持此地址系列。

32 位版本的 Windows 支持 NetBIOS 的 Windows 套接字提供程序。 默认情况下,此提供程序安装在 32 位版本的 Windows 上。

64 位版本的 Windows 不支持 NetBIOS 的 Windows 套接字提供程序,包括 Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003 或 Windows XP。

适用于 NetBIOS 的 Windows 套接字提供程序仅支持 类型 参数设置为 SOCK_DGRAM的套接字。

适用于 NetBIOS 的 Windows 套接字提供程序与 NetBIOS 编程接口不直接相关。 Windows Vista、Windows Server 2008 及更高版本不支持 NetBIOS 编程接口。

AF_INET6
23
Internet 协议版本 6 (IPv6) 地址系列。
AF_IRDA
26
IrDA) 地址系列 (红外数据关联。

仅当计算机安装了红外端口和驱动程序时,才支持此地址系列。

AF_BTH
32
蓝牙地址系列。

如果计算机安装了蓝牙适配器和驱动程序,则 SP2 或更高版本的 Windows XP 支持此地址系列。

iMaxSockAddr

类型: int

最大地址长度(以字节为单位)。

iMinSockAddr

类型: int

最小地址长度(以字节为单位)。

iSocketType

类型: int

要作为套接字类型参数传递给 套接字WSASocket 函数的值,以便为此协议打开套接字。 套接字类型的可能值在 Winsock2.h 头文件中定义。

下表列出了 Windows 套接字 2 支持的 iSocketType 成员的可能值:

iSocketType 含义
SOCK_STREAM
1
一种套接字类型,它通过 OOB 数据传输机制提供排序的可靠双向基于连接的字节流。 此套接字类型使用 Internet 地址系列 (AF_INET 或AF_INET6) 的传输控制协议 (TCP) 。
SOCK_DGRAM
2
支持数据报的套接字类型,这些数据报是固定 (通常较小) 最大长度的无连接、不可靠的缓冲区。 此套接字类型对 Internet 地址系列 (AF_INET 或AF_INET6) 使用用户数据报协议 (UDP) 。
SOCK_RAW
3
一种套接字类型,它提供允许应用程序操作下一层协议标头的原始套接字。 若要操作 IPv4 标头,必须在套接字上设置 IP_HDRINCL 套接字选项。 若要操作 IPv6 标头,必须在套接字上设置 IPV6_HDRINCL 套接字选项。
SOCK_RDM
4
提供可靠消息数据报的套接字类型。 此类型的一个示例是 Windows 中的实用常规多播 (PGM) 多播协议实现,通常称为 可靠多播编程

仅当安装了可靠多播协议时,才支持此值。

SOCK_SEQPACKET
5
提供基于数据报的伪流数据包的套接字类型。

iProtocol

类型: int

要作为 协议 参数传递给 套接字WSASocket 函数的值,以便打开此协议的套接字。 iProtocol 成员的可能选项特定于指定的地址系列和套接字类型。

在为 Windows Vista 及更高版本发布的 Windows SDK 上,此成员可以是 Ws2def.h 头文件中定义的 IPPROTO 枚举类型的值之一。 请注意, Ws2def.h 头文件会自动包含在 Winsock2.h 中,永远不应直接使用。

在适用于 Windows Server 2003 及更早版本的平台 SDK 上, iProtocol 成员的可能值在 Winsock2.hWsrm.h 头文件中定义。

下表列出了 iProtocol 的常见值,尽管许多其他值是可能的。

iProtocol 含义
IPPROTO_ICMP
1
Internet 控制消息协议 (ICMP) 。

Windows XP 及更高版本支持此值。

IPPROTO_IGMP
2
Internet 组管理协议 (IGMP) 。

Windows XP 及更高版本支持此值。

BTHPROTO_RFCOMM
3
蓝牙射频通信 (蓝牙 RFCOMM) 协议。

使用 SP2 或更高版本的 Windows XP 支持此值。

IPPROTO_TCP
6
传输控制协议 (TCP) 。
IPPROTO_UDP
17
用户数据报协议 (UDP) 。
IPPROTO_ICMPV6
58
Internet 控制消息协议版本 6 (ICMPv6) 。

Windows XP 及更高版本支持此值。

IPPROTO_RM
113
可靠多播的 PGM 协议。 在针对 Windows Vista 及更高版本发布的 Windows SDK 上,此协议也称为 IPPROTO_PGM

仅当安装了可靠多播协议时,才支持此值。

iProtocolMaxOffset

类型: int

socketWSASocket 提供协议参数的值时,可以添加到 iProtocol 成员的最大值。 并非所有协议都允许一系列值。 在这种情况下, iProtocolMaxOffset 为零。

iNetworkByteOrder

类型: int

目前,这些值是 BIGENDIAN 和 LITTLEENDIAN) 的清单常 (量,分别指示值为 0 和 1 的 big-endian 或 little-endian。

iSecurityScheme

类型: int

采用的安全方案类型 (任何) 。 值 SECURITY_PROTOCOL_NONE (0) 用于不包含安全规定的协议。

dwMessageSize

类型:DWORD

协议支持的最大消息大小(以字节为单位)。 这是可以从任何主机的本地接口发送的最大大小。 对于不支持消息帧的协议,可以发送到给定地址的实际最大值可能会更少。 没有用于确定最大入站消息大小的标准预配。 定义了以下特殊值。

含义
0
该协议面向流,因此消息大小的概念不相关。
0x1
发送) 消息的最大出站 (大小取决于基础网络 MTU (最大大小传输单元) ,因此在绑定套接字后才能知道。 在套接字绑定到本地地址后,应用程序应使用 getsockopt 检索 SO_MAX_MSG_SIZE 的值。
0xFFFFFFFF
该协议是面向消息的,但对可以传输的消息大小没有最大限制。

dwProviderReserved

类型:DWORD

保留供服务提供商使用。

szProtocol[WSAPROTOCOL_LEN + 1]

类型: WCHAR[WSAPROTOCOL_LEN+1]

一个 Unicode 字符数组,其中包含标识协议的人类可读名称,例如“MSAFD Tcpip [UDP/IP]”。 允许的最大字符数是WSAPROTOCOL_LEN,定义为 255。

注解

注意

winsock2.h 标头将 WSAPROTOCOL_INFO 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名的使用与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定

要求

   
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
标头 winsock2.h

另请参阅

WSAPROTOCOLCHAIN

WSAPROTOCOL_INFO

WSASend

WSASendTo

WSASocket

WSCEnumProtocols

WSCEnumProtocols32

getsockopt

socket