SPI 中的服务类数据结构
安装新服务类时,必须准备并提供 WSASERVICECLASSINFO 结构。 此结构还包含包含一系列应用于特定命名空间的参数的子结构。
对于每个服务类,都有一个 WSASERVICECLASSINFO 结构。 在 WSASERVICECLASSINFO 结构中,服务类的唯一标识符包含在 lpServiceClassId中,lpServiceClassName引用关联的显示字符串。
WSASERVICECLASSINFO 结构中的 lpClassInfos 成员引用 WSANSCLASSINFO 结构的数组,每个结构都提供应用于指定命名空间的命名参数和类型化参数。 lpszName 成员的值示例包括:SAPID、TCPPORT、UDPPORT 等。这些字符串通常特定于在 dwNameSpace中标识的命名空间。 dwValueType 的典型值可能是REG_DWORD、REG_SZ等。dwValueSize 成员指示由 lpValue指向的数据项的长度。
WSASERVICECLASSINFO 结构中表示的整个数据集合通过 NSPInstallServiceClass提供给每个命名空间提供程序。 然后,每个命名空间提供程序筛选 WSANSCLASSINFO 列表 结构,并保留适用的信息。 此体系结构还设想将来存在一个特殊的命名空间提供程序,该提供程序将保留所有命名空间的所有服务类架构信息。 Ws2_32.dll 将查询此提供程序以获取 WSASERVICECLASSINFO 在调用 NSPLookupServiceBegin以启动查询时提供给命名空间提供程序时,以及调用 NSPSetService注册服务时。 命名空间提供程序暂时不应依赖此功能,而应该具有特定于提供程序的方法来获取任何所需的服务类架构信息。 如果没有存储所有命名空间的所有服务类架构的提供程序,Ws2_32.dll 将使用 NSPGetServiceClassInfo 从每个单独的命名空间提供程序获取此类信息。