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
通訊協定是正向的單向通訊協定。
XP1_IFS_HANDLES
0x00020000
提供者傳回的通訊端描述元是作業系統可安裝檔案系統 (IFS) 控制碼。
XP1_PARTIAL_MESSAGE
0x00040000
WSASendWSASendTo支援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 Sockets 2 應用程式應該永遠不會看到已設定此位的專案。
PFL_MATCHES_PROTOCOL_ZERO
0x00000008
表示通訊端WSASocket通訊協定參數中的零值符合此通訊協定專案。
PFL_NETWORKDIRECT_PROVIDER
0x00000010
由提供者設定,表示支援網路直接存取。

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

ProviderId

類型: GUID

由服務提供者廠商指派給提供者的全域唯一識別碼 (GUID) 。 這個值適用于一個以上的服務提供者能夠實作特定通訊協定的實例。 應用程式可以使用 ProviderId 成員來區別可能不區分的提供者。

dwCatalogEntryId

類型: DWORD

每個 WSAPROTOCOL_INFO 結構 WS2_32.DLL 指派的唯一識別碼。

ProtocolChain

類型: WSAPROTOCOLCHAIN

與通訊協定相關聯的 WSAPROTOCOLCHAIN 結構。 如果鏈結的長度為 0,則此 WSAPROTOCOL_INFO 專案代表分層通訊協定,其具有 Windows Sockets 2 SPI 作為其上邊緣和下邊緣。 如果鏈結的長度等於 1,則這個專案代表基底通訊協定,其目錄專案識別碼位於WSAPROTOCOL_INFO結構的dwCatalogEntryId成員中。 如果鏈結的長度大於 1,此專案代表通訊協定鏈結,此鏈結是由基底通訊協定之上的一或多個分層通訊協定所組成。 對應的目錄專案識別碼位於 ProtocolChain.ChainEntries 陣列中,從最上方的分層通訊協定開始, (ProtocolChain.ChainEntries 陣列中的零個專案) 並以基底通訊協定結尾。 如需通訊協定鏈結的詳細資訊,請參閱 Windows Sockets 2 服務提供者介面規格。

iVersion

類型: int

通訊協定版本識別碼。

iAddressFamily

類型: int

要當做位址系列參數傳遞至 通訊端WSASocket 函式的值,以便開啟此通訊協定的通訊端。 這個值也會唯一定義通訊協定所使用的 sockaddr 通訊協定位址結構。

在針對 Windows Vista 和更新版本發行的 Windows SDK 上,位址系列的可能值定義在 Ws2def.h 標頭檔中。 請注意, Ws2def.h 標頭檔會自動包含在 Winsock2.h中,不應該直接使用。

在 Windows Server 2003 和較舊版本的 Platform SDK 版本上,位址系列的可能值定義在 Winsock2.h 標頭檔中。

目前支援的值是AF_INET或AF_INET6,這是 IPv4 和 IPv6 的網際網路位址系列格式。 如果已安裝位址系列 Windows Sockets 服務提供者,則支援位址系列 (AF_NETBIOS 用於 NetBIOS 的其他選項,例如) 。 請注意,AF_位址系列和PF_通訊協定系列常數的值 (相同,例如, AF_INETPF_INET) ,因此可以使用任一個常數。

下表列出位址系列常見的值,但可能有許多其他值。

iAddressFamily 意義
AF_INET
2
網際網路通訊協定第 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 Sockets 提供者時,才支援此位址系列。

32 位版本的 Windows 支援 NetBIOS 的 Windows Sockets 提供者。 此提供者預設安裝在 32 位版本的 Windows 上。

64 位版本的 Windows 不支援 NetBIOS 的 Windows Sockets 提供者,包括 Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003 或 Windows XP。

NetBIOS 的 Windows Sockets 提供者僅支援 類型 參數設定為 SOCK_DGRAM的通訊端。

NetBIOS 的 Windows Sockets 提供者與 NetBIOS 程式設計介面不直接相關。 Windows Vista、Windows Server 2008 及更新版本不支援 NetBIOS 程式設計介面。

AF_INET6
23
網際網路通訊協定第 6 版 (IPv6) 位址系列。
AF_IRDA
26
Infrared Data Association (IrDA) 位址系列。

只有在電腦已安裝基礎結構埠和驅動程式時,才支援此位址系列。

AF_BTH
32
藍牙位址系列。

如果電腦已安裝藍牙介面卡和驅動程式,Windows XP SP2 或更新版本支援此位址系列。

iMaxSockAddr

類型: int

最大位址長度,以位元組為單位。

iMinSockAddr

類型: int

最小位址長度,以位元組為單位。

iSocketType

類型: int

要當做通訊端類型參數傳遞至 通訊端WSASocket 函式的值,以便開啟此通訊協定的通訊端。 通訊端類型的可能值定義在 Winsock2.h 標頭檔中。

下表列出 Windows Sockets 2 支援的 iSocketType 成員可能值:

iSocketType 意義
SOCK_STREAM
1
通訊端類型,提供具有 OOB 資料傳輸機制的循序、可靠、雙向、以連線為基礎的位元組資料流程。 此通訊端類型會針對網際網路位址系列 (AF_INET 或AF_INET6) 使用傳輸控制通訊協定 (TCP) 。
SOCK_DGRAM
2
支援資料包的通訊端類型,這些資料包是無連接、不可靠的固定緩衝區 (通常很小) 最大長度。 此通訊端類型會針對網際網路位址系列 (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
網際網路控制訊息通訊協定 (ICMP) 。

Windows XP 和更新版本支援此值。

IPPROTO_IGMP
2
網際網路群組管理通訊協定 (IGMP) 。

Windows XP 和更新版本支援此值。

BTHPROTO_RFCOMM
3
藍牙無線電頻率通訊 (藍牙 RFCOMM) 通訊協定。

Windows XP SP2 或更新版本支援此值。

IPPROTO_TCP
6
傳輸控制通訊協定 (TCP) 。
IPPROTO_UDP
17
使用者資料包通訊協定 (UDP) 。
IPPROTO_ICMPV6
58
網際網路控制訊息通訊協定第 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 或 small-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