Active Directory,枚举用户组,COM异常

时间:2011-04-21 08:27:41

标签: c# .net active-directory

通过AD .NET API枚举当前用户的组时,我有时会得到

COMException: Unknown error (0x80005000)

这是我的代码:

        var userName = Environment.UserName;

        var context = new PrincipalContext(ContextType.Domain);
        var user = UserPrincipal.FindByIdentity(context, userName);

        foreach (var userGroup in user.GetGroups())
        {
            Console.WriteLine(userGroup.Name);
        }

有什么问题?我认为每个用户都可以检索HIS组的列表?这似乎是奇怪的行为,有时它可以像这样再现:当在'userA'PC上运行时,它崩溃了,但它成功地枚举了其他'userB'组(在'下'用户A')!

3 个答案:

答案 0 :(得分:2)

尝试使用

var context = new PrincipalContext(ContextType.Domain, "yourcompany.com", "DC=yourcompany,DC=com", ContextOptions.Negotiate);

将ContextOption设置为Negotioate后,使用Kerberos或NTLM对客户端进行身份验证,因此即使未提供用户名和密码,帐户管理API也会使用调用线程的安全上下文绑定到对象。

答案 1 :(得分:1)

0x80005000 = E_ADS_BAD_PATHNAME所以你在某处提供了一个无效的adspath,也许你必须添加LDAP://前缀或对面这两次?设置断点并检查值......

修改 AdsPath应该是类似“LDAP:// CN = Administator,CN = Users,DC = contoso,DC = com”的值,您似乎有错误的路径。

答案 2 :(得分:1)

我遇到了同样的问题,我在创建PrincipalContext时通过提供域名解决了这个问题:

var domain = new PrincipalContext(ContextType.Domain, Environment.UserDomainName);
var user = UserPrincipal.FindByIdentity(domain, Environment.UserName);