目录服务函数 (AD DS)

目录服务函数提供一个实用工具,用于在 Windows NT 或 Windows 2000 域中查找域控制器 (DC)。 该体系结构与所有版本的 Windows NT 和 Windows 2000 中的客户端以及服务器进行交互。 使用以下函数,开发人员能够使用目录服务中的域控制器和域成员身份:

DC 定位器 DsGetDcName 由 Netlogon 服务实现。 每个 DC 使用特定于传输的机制(例如,在 WINS 中)在 DNS 服务器上注册其 DNS 名称及其 NetBIOS 名称。 DC 定位器查找名称,然后将数据报发送到注册该名称的 DC 或 ping。 对于 NetBIOS 域名,数据报是 mailslot 消息。 对于 DNS 域名,数据报是 LDAP UDP 搜索。 每个这样的 DC 响应指示其当前正在运行。 第一个响应的 DC 将返回给调用方。

返回的 DC 被缓存,这样后续调用方就不需要重复前面的算法,因此鼓励所有调用方使用相同的DC。 这样可以确保单个客户端对 DC 的内容具有一致视图。

当通过 DNS 域名搜索 DC 时,DC 定位器会尝试在“最近”的站点中查找 DC。 每个 DC 都会注册其他 DNS 记录,这些记录指示 DC 位于哪个站点以及 DC 包含哪些站点。 DC 定位器首先搜索此特定于站点的 DNS 记录,然后再搜索非特定于站点的 DNS 记录,从而优先选择该站点中的 DC。 当 DC 定位器向 DC 发送数据报时,DC 会在 DS 的配置/站点/子网容器中查找客户端的 IP 地址,以查找子网对象。 子网对象的 siteObject 属性定义包含客户端的站点的名称。 DC 使用包含客户端的站点的名称以及此 DC 是否覆盖该站点的指示符来响应 ping。 如果 DC 不包含该站点,并且 DC 定位器尚未尝试在该站点中查找 DC,则 DC 定位器会再次尝试在站点中查找 DC。

若要查找包含客户端的站点的名称,请使用 DsGetSiteName 函数。 Configuration/Sites/Subnet 容器中对象的名称必须是有效的子网名称。 DsValidateSubnetName 函数指示指定的子网名称是否有效。