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) 。 |
|
支援服務需求品質。 |
|
位是保留的。 |
|
通訊協定在傳送方向中是單向的。 |
|
通訊協定是正向的單向通訊協定。 |
|
提供者傳回的通訊端描述元是作業系統可安裝檔案系統 (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 Sockets 2 應用程式應該永遠不會看到已設定此位的專案。 |
|
表示通訊端或WSASocket之通訊協定參數中的零值符合此通訊協定專案。 |
|
由提供者設定,表示支援網路直接存取。
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_INET 和 PF_INET) ,因此可以使用任一個常數。
下表列出位址系列常見的值,但可能有許多其他值。
iAddressFamily | 意義 |
---|---|
|
網際網路通訊協定第 4 版 (IPv4) 位址系列。 |
|
IPX/SPX 位址系列。 只有在安裝 NWLink IPX/SPX NetBIOS 相容傳輸通訊協定時,才支援此位址系列。
Windows Vista 和更新版本不支援此位址系列。 |
|
AppleTalk 位址系列。 只有在安裝 AppleTalk 通訊協定時,才支援此位址系列。
Windows Vista 和更新版本不支援此位址系列。 |
|
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 程式設計介面。 |
|
網際網路通訊協定第 6 版 (IPv6) 位址系列。 |
|
Infrared Data Association (IrDA) 位址系列。
只有在電腦已安裝基礎結構埠和驅動程式時,才支援此位址系列。 |
|
藍牙位址系列。
如果電腦已安裝藍牙介面卡和驅動程式,Windows XP SP2 或更新版本支援此位址系列。 |
iMaxSockAddr
類型: int
最大位址長度,以位元組為單位。
iMinSockAddr
類型: int
最小位址長度,以位元組為單位。
iSocketType
類型: int
要當做通訊端類型參數傳遞至 通訊端 或 WSASocket 函式的值,以便開啟此通訊協定的通訊端。 通訊端類型的可能值定義在 Winsock2.h 標頭檔中。
下表列出 Windows Sockets 2 支援的 iSocketType 成員可能值:
iSocketType | 意義 |
---|---|
|
通訊端類型,提供具有 OOB 資料傳輸機制的循序、可靠、雙向、以連線為基礎的位元組資料流程。 此通訊端類型會針對網際網路位址系列 (AF_INET 或AF_INET6) 使用傳輸控制通訊協定 (TCP) 。 |
|
支援資料包的通訊端類型,這些資料包是無連接、不可靠的固定緩衝區 (通常很小) 最大長度。 此通訊端類型會針對網際網路位址系列 (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 或 small-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 |