命名空间服务提供程序

命名空间提供程序在 Winsock 命名空间 SPI 与现有名称服务(如 DNS、X.500 或 NetWare 目录服务)的本机编程接口之间实现接口映射, (NDS) 。 虽然命名空间提供程序只支持一个命名空间,但可以安装给定命名空间的多个提供程序。 单个 DLL 也可以创建多个命名空间提供程序的实例。 安装命名空间提供程序时,会维护 WSANAMESPACE_INFO 结构的目录。 应用程序可以使用 WSAEnumNameSpaceProviders 来发现计算机上支持的命名空间。

在 Windows Vista 及更高版本上,提供了增强 的 WSANAMESPACE_INFOEX 结构和 WSAEnumNameSpaceProvidersEx 函数。

在 64 位平台上,提供了类似的 WSCEnumNameSpaceProviders32WSCEnumNameSpaceProvidersEx32 函数来枚举 32 位目录。

有关详细信息,请参阅 Winsock 命名空间服务提供程序要求

旧版 GetXbyY 服务提供程序

Windows 套接字 2 完全支持 Windows 套接字版本 1.1 中特定于 TCP/IP 的名称解析功能。 它通过在 SPI 中包含 GetXbyY 函数集来执行此操作。 但是,这组函数的处理方式与 SPI 函数的其余部分略有不同。 SPI 中出现的 GetXbyY 函数以GETXBYYSP_开头,下表汇总了这些函数。

伯克利样式函数

SPI 函数名称 说明
GETXBYYSP_gethostbyaddr 为指定的主机地址提供 宿主 结构。
GETXBYYSP_gethostbyname 为指定的 主机名提供宿主 结构。
GETXBYYSP_getprotobyname 为指定的协议名称提供 结构。
GETXBYYSP_getprotobynumber 为指定的协议编号提供 结构。
GETXBYYSP_getservbyname 为指定的服务 nam.e 提供服务结构
GETXBYYSP_getservbyport 在指定端口处为服务提供服务 结构
GETXBYYSP_gethostname 返回本地计算机的标准主机名。

 

异步样式函数

SPI 函数名称 说明
GETXBYYSP_WSAAsyncGetHostByAddr 为指定的主机地址提供 宿主 结构。
GETXBYYSP_WSAAsyncGetHostByName 为指定的 主机名提供宿主 结构。
GETXBYYSP_WSAAsyncGetProtoByName 为指定的协议名称提供 结构。
GETXBYYSP_WSAAsyncGetProtoByNumber 为指定的协议编号提供 结构。
GETXBYYSP_WSAAsyncGetServByName 为指定的服务名称提供 servent 结构。
GETXBYYSP_WSAAsyncGetServByPort 在指定端口处为服务提供服务 结构
GETXBYYSP_WSACancelAsyncRequest 取消异步 GetXbyY 操作。

 

SPI 中这些 GetXbyY 函数的语法和语义与 API 规范中记录的语法和语义完全相同,因此此处不再重复。

Windows 套接字 2 DLL 只允许一个服务提供商提供这些服务。 因此,无需在启动时从服务提供商接收的过程表中包括指向这些函数的指针。 在 Windows 环境中,从以下注册表路径中找到的值检索实现这些函数的 DLL 的路径。 默认情况下,此注册表项不存在:

\ HKEY_LOCAL_MACHINE系统\CurrentControlSet\服务\WinSock2\参数\GetXByYLibraryPath

Built-In默认 GetXbyy 服务提供程序

默认 GetXbyY 服务提供程序集成到标准 Windows 套接字 2 运行时组件中。 此默认提供程序实现上述所有函数,因此不需要由任何命名空间提供程序实现这些函数。 但是,命名空间提供程序可以自由地提供这些函数 (,从而重写) 默认值,只需将字符串(该字符串是实现这些函数的 DLL 的路径)存储在指定的注册表项中。 命名提供程序 DLL 未导出的任何 GetXbyY 函数都将通过内置默认值提供。 但请注意,如果提供程序选择提供 GetXbyY 函数的任何异步版本,他应提供所有异步函数,以便取消操作能够正常工作。

默认 GetXbyY 服务提供程序的当前实现驻留在Wsock32.dll中。 根据通过控制面板建立 TCP/IP 设置的方式,将使用 DNS 或本地主机文件进行名称解析。 使用 DNS 时,默认 GetXbyY 服务提供程序使用标准 Windows 套接字 1.1 API 调用来与 DNS 服务器通信。 这些事务将使用配置为默认 TCP/IP 堆栈的任何 TCP/IP 堆栈进行。 然而,两个特殊案件值得特别提及。

GETXBYYSP_gethostname的默认实现从注册表获取本地主机名。 这将对应于分配给“我的电脑”的名称。 GETXBYYSP_gethostbyname 和 GETXBYYSP_WSAAsyncGetHostByName 的默认实现始终将提供的主机名与本地主机名进行比较。 如果它们匹配,则默认实现使用专用接口来探测 Microsoft TCP/IP 堆栈,以发现其本地 IP 地址。 因此,为了完全独立于 Microsoft TCP/IP 堆栈,命名空间提供程序必须同时实现 GETXBYYSP_gethostbyname 和 GETXBYYSP_WSAAsyncGetHostByName。