以编程方式在AD中更改密码时拒绝访问

时间:2012-05-09 21:57:17

标签: c# dll active-directory

我们已经设置了一个小型库(DLL),用于更新AD中的密码。在我们的测试应用程序中测试此应用程序时,它完全正常。但是一旦我们开始在另一个应用程序中使用该库,我们在尝试更改密码时会收到拒绝访问错误。

当我们调用任何其他函数时,比如执行简单查找以查看用户是否存在的函数,一切正常。

    PrincipalContext ctx = new PrincipalContext(ContextType.Domain, TargetDomainServer, TargetDomainContainer, TargetDomainUser, TargetDomainPassword);
    UserPrincipalExt user = UserPrincipalExt.FindByIdentity(ctx, userLogonName);
    user.SetPassword(userPassword);

关于我做错了什么想法?

1 个答案:

答案 0 :(得分:1)

您的测试应用程序可能以管理员身份运行。要么是因为它是从IDE运行,要么是因为它有一个带有requestedExecutionLevel的清单。

在Windows Vista和7上,以普通用户身份登录时运行应用程序并不意味着该进程不以管理员身份运行。标有requestedExecutionLevel的可执行文件有自动提升。尝试通过右键单击并选择它来以管理员身份运行测试应用程序。

还有自动升降,没有任何故意的可执行标记。 Windows有已知安装程序的内部列表。它实际上通过版本信息和二进制签名识别其中一些,并尝试以管理员身份运行它们,因此安装实际上会成功。 IIRC,另一种识别方法是文件名。名为setup.exe的可执行文件也会被提升(只要requestedExecutionLevel不会覆盖它)。