SPI 中的服務類別資料結構
安裝新的服務類別時,必須備妥並提供 WSASERVICECLASSINFO 結構。 此結構也包含子結構,其中包含套用至特定命名空間的一系列參數。
針對每個服務類別,都有單一 WSASERVICECLASSINFO 結構。 在WSASERVICECLASSINFO結構中,服務類別的唯一識別碼包含在lpServiceClassId 中,而 lpServiceClassName會參考相關聯的顯示字串。
WSASERVICECLASSINFO結構中的lpClassInfos成員會參考WSANSCLASSINFO結構的陣列,每個結構都會提供適用于指定命名空間的具名和具型別參數。 lpszName成員的值範例包括:SAPID、TCPPORT、UDPPORT 等。這些字串通常專屬於dwNameSpace中所識別的命名空間。 dwValueType的一般值可能是REG_DWORD、REG_SZ等。dwValueSize成員表示lpValue所指向的資料項目長度。
WSASERVICECLASSINFO結構中所表示的整個資料收集會透過NSPInstallServiceClass提供給每個命名空間提供者。 然後,每個個別命名空間提供者會篩選 WSANSCLASSINFO 結構清單,並保留其適用的資訊。 此架構也會想像未來存在特殊命名空間提供者,以保留所有命名空間的所有服務類別架構資訊。 當叫用 NSPLookupServiceBegin以起始查詢時,以及叫用NSPSetService來註冊服務時,Ws2_32.dll會查詢此提供者,以取得提供給命名空間提供者所需的WSASERVICECLASSINFO資料。 命名空間提供者目前不應該依賴這項功能,而且應該改為有提供者特定的方法,以取得任何所需的服務類別架構資訊。 如果沒有提供者儲存所有命名空間的所有服務類別架構,Ws2_32.dll將會使用 NSPGetServiceClassInfo 從每個個別命名空間提供者取得這類資訊。