WinNT ADSI提供程序 - 跨域用户查找

时间:2015-01-26 10:55:49

标签: vb.net active-directory adsi

''我在一些身份验证代码中使用WinNT ADSI提供程序,该代码从Active Directory中查找用户并检查其组成员身份。

我们遇到了一个问题,这个问题让这个问题适用于跨域访问。我们按照herehttps://support.microsoft.com/kb/241737?wa=wsignin1.0)列出的步骤在Active Directory中设置了对外部域的交叉引用。这应该是允许WinNT查找用户所需的全部内容。

当代码运行时,我们只在域下找到一个对象(在下面的循环中) - " Schema"。这是不正确的 - 有很多子对象。

这个问题似乎是间歇性的 - 同一个系统一个月前没有这个问题。我意识到这将很难调查,但对ADSI有更好理解的人可能会更清楚。

以下代码说明了问题:

Dim objUser
Dim sUserName
Set ns = GetObject("WinNT://DOMAINNAME")
msgbox "Found " & ns.AdsPath & " (" & ns.Class &")" ' Shown
'ns.Filter = Array("User") ' Commented to show ALL objects
For Each UserObj in ns
    Dim UserName
    UserName = UserObj.Name & " " & UserObj.Class ' Returns "Schema Schema" 
    msgbox UserName
Next

2 个答案:

答案 0 :(得分:1)

此解决方案有效,但我想指出原因。经过几个小时的尝试来确定dns后缀对WinNT提供程序的NetBIOS解析的重要性,我发现客户端首先调用本地域控制器对NetBIOS名称进行LSA_LookupNames调用,然后它返回一个域远程域/林中的控制器转到哪个负责该NetBIOS名称。在该查找之后,它尝试连接到返回的域控制器 - 但服务器的名称是简单主机或NetBIOS名称!因此,它必须查看它并使用DNS,按照客户端的网络配置中规定的顺序尝试后缀。因此,作为查找的一部分,本地AD域正在正确地翻译域,但是客户端无法弄清楚如何到达该DC,因为LSA_LookupNames不返回FQDN,只返回主机名。 / p>

希望这可以节省其他人搜索时间 - 有时候只需要分解并打开wireshark就可以了。

答案 1 :(得分:0)

解决方案是确保运行查询的本地计算机具有远程域的DNS后缀