共用方式為


名稱解析資料結構

在名稱解析函式中,有數個重要資料結構廣泛使用。

WSAQUERYSET結構可用來形成WSALookupServiceBegin的查詢,並用來傳遞WSALookupServiceNext的查詢結果。 它是複雜的結構,因為它包含數個其他結構的指標,其中有些則參考其他結構。 WSAQUERYSET結構和其參考結構之間的關聯性如下所示。

wsaqueryset 與其相關聯結構之間的關聯性

WSAQUERYSET 結構中,大部分的成員都是自我說明,但有些成員值得其他說明。 dwSize成員一律必須填入 sizeof (WSAQUERYSET) ,因為命名空間提供者會使用此成員來偵測並適應可能隨著時間出現的不同WSAQUERYSET結構版本。

dwOutputFlags成員是由命名空間提供者用來提供查詢結果的其他資訊。 如需詳細資訊,請參閱 WSALookupServiceNext 函式。

lpversion成員所參考的WSAECOMPARATOR結構同時用於查詢準則約束和結果。 針對查詢, dwVersion 成員會指出所需的服務版本。 ecHow成員是列舉型別,指定如何進行比較。 這些選項COMP_EQUALS,要求在版本中完全相符,或COMP_NOTLESS指定服務的版本號碼不小於 dwVersion 成員的值。

dwNameSpacelpNSProviderId的解譯取決於結構的使用方式,並在使用此結構的個別函式描述中進一步說明。

lpszCoNtext成員會套用至階層命名空間,並指定查詢的起點,或服務所在階層內的位置。 一般規則如下:

  • Null、空白 (「」) 的值會在預設內容開始搜尋。
  • 「\」 值會啟動命名空間頂端的搜尋。
  • 任何其他值會在指定的點啟動搜尋。

如果指定了 「」 或 「\」 以外的任何專案,不支援內含專案的提供者可能會傳回錯誤。 支援有限內含專案,例如群組的提供者應該接受 「」、「'\」 或指定的點。 內容是特定命名空間。 如果 dwNameSpace 成員是NS_ALL,則應該只傳遞 「」 或 「\」 做為內容,因為所有命名空間都會辨識這些成員。

lpszQueryString成員可用來提供額外的命名空間特定查詢資訊,例如描述已知服務和傳輸通訊協定名稱的字串,如 「FTP/TCP」。

lpafpProtocols成員所參考的AFPROTOCOLS結構僅供查詢之用,並提供通訊協定清單來限制查詢。 這些通訊協定會以 (位址系列、通訊協定) 組表示,因為通訊協定值在位址系列的內容中只有意義。

lpcsaBuffer成員所參考之CSADDR_INFO結構的陣列包含建立接聽時使用之服務所需的所有資訊,或讓用戶端用來建立服務的連線。 LocalAddrRemoteAddr成員都直接包含SOCKET_ADDRESS結構。

服務會使用LocalAddr.lpSockaddr-sa_family >iSocketTypeiProtocol作為參數的 Tuple 呼叫通訊端或WSASocket函式來建立通訊端。 服務會使用LocalAddr.lpSockaddrLocalAddr.lpSockaddrLength作為參數,將通訊端系至本機位址。

用戶端會使用LocalAddr.lpSockaddr-sa_family >iSocketTypeiProtocol作為參數的 Tuple 來呼叫通訊端或WSASocket函式來建立其通訊端。 當使用connectConnectExWSAConnect函式進行遠端連線時,用戶端會使用RemoteAddr.lpSockaddrRemoteAddr.lpSockaddrLength做為參數。

服務類別資料結構

安裝新的服務類別時,必須備妥並提供 WSASERVICECLASSINFO 結構。 此結構也包含子結構,其中包含套用至特定命名空間的一系列成員。 類別資訊資料結構如下所示:

服務類別資料結構架構

針對每個服務類別,都有單一 WSASERVICECLASSINFO 結構。 在 WSASERVICECLASSINFO 結構中,服務類別的唯一識別碼包含在 lpServiceClassId 成員中, 而 lpServiceClassName 成員會參考相關聯的顯示字串。 這是 WSAGetServiceClassNameByClassId 函式所傳回的字串。

WSASERVICECLASSINFO結構中的lpClassInfos成員會參考WSANSCLASSINFO結構的陣列,每個結構都會提供適用于指定命名空間的具名和具型別成員。 lpszName成員的值範例包括:「SapId」、「TcpPort」、「UdpPort」 等。這些字串通常專屬於dwNameSpace成員中所識別的命名空間。 dwValueType成員的一般值可能是REG_DWORD、REG_SZ等。dwValueSize成員表示lpValue所指向的資料項目長度。

叫用WSAInstallServiceClass函式時,WSASERVICECLASSINFO結構中所表示的整個資料收集會提供給每個命名空間提供者。 然後,每個個別命名空間提供者會篩選 WSANSCLASSINFO 結構的清單,並保留其適用的資訊。

AFPROTOCOLS

CSADDR_INFO

名稱解析模型

通訊協定獨立名稱解析

註冊和名稱解析

SOCKET_ADDRESS

名稱解析函式的摘要

WSAECOMPARATOR

WSAGetServiceClassNameByClassId

WSAInstallServiceClass

WSALookupServiceBegin

WSAQUERYSET

WSASERVICECLASSINFO