SPI 中的服务类数据结构

安装新的服务类时,必须准备并提供 WSASERVICECLASSINFO 结构。 此结构还包含子结构,这些子结构包含应用于特定命名空间的一系列参数。

显示适用于特定命名空间的 WSASERVICECLASSINFO 结构、子结构和参数的关系图。

对于每个服务类,都有一个 WSASERVICECLASSINFO 结构。 在 WSASERVICECLASSINFO 结构中,服务类的唯一标识符包含在 lpServiceClassId 中,lpServiceClassName 引用关联的显示字符串。

WSASERVICECLASSINFO 结构中的 lpClassInfos 成员引用 WSANSCLASSINFO 结构的数组,其中每个结构都提供应用于指定命名空间的命名和类型化参数。 lpszName 成员的值示例包括:SAPID、TCPPORT、UDPPORT 等。这些字符串通常特定于 dwNameSpace 中标识的命名空间。 dwValueType 的典型值可能是REG_DWORD、REG_SZ等。dwValueSize 成员指示 lpValue 指向的数据项的长度。

WSASERVICECLASSINFO 结构中表示的整个数据集合通过 NSPInstallServiceClass 提供给每个命名空间提供程序。 然后,每个单独的命名空间提供程序筛选 WSANSCLASSINFO 结构的列表,并保留适用于它的信息。 此体系结构还设想将来存在一个特殊的命名空间提供程序,该提供程序将保留所有命名空间的所有服务类架构信息。 当调用 NSPLookupServiceBegin 来启动查询时,当调用 NSPLookupServiceBegin 时,当调用 NSPSetService 以注册服务时,Ws2_32.dll将查询此提供程序以获取提供给命名空间提供程序所需的 WSASERVICECLASSINFO 数据。 命名空间提供程序目前不应依赖此功能,而应具有特定于提供程序的方法来获取任何所需的服务类架构信息。 如果没有存储所有命名空间的所有服务类架构的提供程序,Ws2_32.dll将使用 NSPGetServiceClassInfo 从每个单独的命名空间提供程序获取此类信息。