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 头文件中定义。
可以使用以下值。
值 | 含义 |
---|---|
|
提供无连接 (数据报) 服务。 如果未设置,则协议支持面向连接的数据传输。 |
|
保证发送的所有数据都将到达预期目标。 |
|
保证数据仅按发送顺序到达,并且不会重复。 此特征不一定意味着数据始终传递,但传递的任何数据都按发送顺序传递。 |
|
遵循消息边界 - 与没有消息边界概念的面向流的协议相反。 |
|
面向消息的协议,但对于所有回执,将忽略消息边界。 当应用程序不希望通过协议完成消息帧时,这很方便。 |
|
支持两阶段 (正常关闭) 。 如果未设置,则仅执行中止关闭。 |
|
支持快速 (紧急) 数据。 |
|
支持连接数据。 |
|
支持断开连接数据。 |
|
支持广播机制。 |
|
支持多点或多播机制。 下面指示了控件和数据平面属性。 |
|
指示控制平面是根 (值 = 1) 还是非根 (值 = 0) 。 |
|
指示数据平面是根 (值 = 1) 还是非根 (值 = 0) 。 |
|
支持服务质量请求。 |
|
保留位。 |
|
协议在发送方向上是单向的。 |
|
协议在 recv 方向上是单向的。 |
|
提供程序返回的套接字描述符是操作系统可安装文件系统 (IFS) 句柄。 |
|
WSASend 和 WSASendTo 支持 MSG_PARTIAL 标志。 |
|
协议提供对 SAN 的支持。
Windows 7 和 Windows Server 2008 R2 支持此值。 |
dwServiceFlags2
类型:DWORD
保留给附加协议属性定义。
dwServiceFlags3
类型:DWORD
保留给附加协议属性定义。
dwServiceFlags4
类型:DWORD
保留给附加协议属性定义。
dwProviderFlags
类型:DWORD
一组标志,用于提供有关此协议在 Winsock 目录中的表示方式的信息。 此成员的可能值在 Winsock2.h 头文件中定义。
可以使用以下值。
值 | 含义 |
---|---|
|
指示这是单个协议的两个或多个条目之一, (来自给定提供程序) 能够实现多个行为。 其中一个示例是 SPX,在接收方,它可以充当面向消息的协议或面向流的协议。 |
|
指示这是能够实现多个行为的协议的建议或最常用的条目。 |
|
由提供程序设置,以指示 Ws2_32.dll 不应在 WSAEnumProtocols 生成的结果缓冲区中返回此协议。 显然,Windows 套接字 2 应用程序永远不会看到具有此位集的条目。 |
|
指示 socket 或 WSASocket 的协议参数中的值零与此协议条目匹配。 |
|
由提供程序设置,以指示支持网络直接访问。
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_INET 和 PF_INET) ,因此可以使用任一常量。
下表列出了地址系列的常见值,尽管许多其他值是可能的。
iAddressFamily | 含义 |
---|---|
|
Internet 协议版本 4 (IPv4) 地址系列。 |
|
IPX/SPX 地址系列。 仅当安装了 NWLink IPX/SPX NetBIOS 兼容传输协议时,才支持此地址系列。
Windows Vista 及更高版本不支持此地址系列。 |
|
AppleTalk 地址系列。 仅当安装了 AppleTalk 协议时,才支持此地址系列。
Windows Vista 及更高版本不支持此地址系列。 |
|
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 编程接口。 |
|
Internet 协议版本 6 (IPv6) 地址系列。 |
|
IrDA) 地址系列 (红外数据关联。
仅当计算机安装了红外端口和驱动程序时,才支持此地址系列。 |
|
蓝牙地址系列。
如果计算机安装了蓝牙适配器和驱动程序,则 SP2 或更高版本的 Windows XP 支持此地址系列。 |
iMaxSockAddr
类型: int
最大地址长度(以字节为单位)。
iMinSockAddr
类型: int
最小地址长度(以字节为单位)。
iSocketType
类型: int
要作为套接字类型参数传递给 套接字 或 WSASocket 函数的值,以便为此协议打开套接字。 套接字类型的可能值在 Winsock2.h 头文件中定义。
下表列出了 Windows 套接字 2 支持的 iSocketType 成员的可能值:
iSocketType | 含义 |
---|---|
|
一种套接字类型,它通过 OOB 数据传输机制提供排序的可靠双向基于连接的字节流。 此套接字类型使用 Internet 地址系列 (AF_INET 或AF_INET6) 的传输控制协议 (TCP) 。 |
|
支持数据报的套接字类型,这些数据报是固定 (通常较小) 最大长度的无连接、不可靠的缓冲区。 此套接字类型对 Internet 地址系列 (AF_INET 或AF_INET6) 使用用户数据报协议 (UDP) 。 |
|
一种套接字类型,它提供允许应用程序操作下一层协议标头的原始套接字。 若要操作 IPv4 标头,必须在套接字上设置 IP_HDRINCL 套接字选项。 若要操作 IPv6 标头,必须在套接字上设置 IPV6_HDRINCL 套接字选项。 |
|
提供可靠消息数据报的套接字类型。 此类型的一个示例是 Windows 中的实用常规多播 (PGM) 多播协议实现,通常称为 可靠多播编程。
仅当安装了可靠多播协议时,才支持此值。 |
|
提供基于数据报的伪流数据包的套接字类型。 |
iProtocol
类型: int
要作为 协议 参数传递给 套接字 或 WSASocket 函数的值,以便打开此协议的套接字。 iProtocol 成员的可能选项特定于指定的地址系列和套接字类型。
在为 Windows Vista 及更高版本发布的 Windows SDK 上,此成员可以是 Ws2def.h 头文件中定义的 IPPROTO 枚举类型的值之一。 请注意, Ws2def.h 头文件会自动包含在 Winsock2.h 中,永远不应直接使用。
在适用于 Windows Server 2003 及更早版本的平台 SDK 上, iProtocol 成员的可能值在 Winsock2.h 和 Wsrm.h 头文件中定义。
下表列出了 iProtocol 的常见值,尽管许多其他值是可能的。
iProtocolMaxOffset
类型: int
向 socket 和 WSASocket 提供协议参数的值时,可以添加到 iProtocol 成员的最大值。 并非所有协议都允许一系列值。 在这种情况下, iProtocolMaxOffset 为零。
iNetworkByteOrder
类型: int
目前,这些值是 BIGENDIAN 和 LITTLEENDIAN) 的清单常 (量,分别指示值为 0 和 1 的 big-endian 或 little-endian。
iSecurityScheme
类型: int
采用的安全方案类型 (任何) 。 值 SECURITY_PROTOCOL_NONE (0) 用于不包含安全规定的协议。
dwMessageSize
类型:DWORD
协议支持的最大消息大小(以字节为单位)。 这是可以从任何主机的本地接口发送的最大大小。 对于不支持消息帧的协议,可以发送到给定地址的实际最大值可能会更少。 没有用于确定最大入站消息大小的标准预配。 定义了以下特殊值。
值 | 含义 |
---|---|
|
该协议面向流,因此消息大小的概念不相关。 |
|
发送) 消息的最大出站 (大小取决于基础网络 MTU (最大大小传输单元) ,因此在绑定套接字后才能知道。 在套接字绑定到本地地址后,应用程序应使用 getsockopt 检索 SO_MAX_MSG_SIZE 的值。 |
|
该协议是面向消息的,但对可以传输的消息大小没有最大限制。 |
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 |