首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Active Directory属性

Active Directory属性
EN

Stack Overflow用户
提问于 2009-11-19 14:39:32
回答 1查看 1.5K关注 0票数 2

在stackoverflow上两个人的帮助下,我想出了如何使用下面的代码来设置“用户不能更改密码”。我现在正在尝试找出如何删除该属性。我认为将拒绝标志设置为“允许”会起作用,但它似乎什么也做不到。我希望代码使用DirectoryEntry,而不是PrincipalContext,如果可能的话,因为我不确定我的应用程序是否会在所有服务器上使用.NET 3.5。在这方面的任何帮助都将非常感谢。

代码语言:javascript
复制
            string PASSWORD_GUID = "{ab721a53-1e2f-11d0-9819-00aa0040529b}";
            string [] trustees = {"NT AUTHORITY\\SELF", "EVERYONE"};

            ActiveDs.IADsSecurityDescriptor sd = (ActiveDs.IADsSecurityDescriptor)User.Properties["ntSecurityDescriptor"].Value;
            ActiveDs.IADsAccessControlList acl = (ActiveDs.IADsAccessControlList) sd.DiscretionaryAcl;
            ActiveDs.AccessControlEntry ace = new ActiveDs.AccessControlEntry();        


            double denied = (double)ActiveDs.ADS_ACETYPE_ENUM.ADS_ACETYPE_ACCESS_DENIED_OBJECT;
            double objectType = (double)ActiveDs.ADS_FLAGTYPE_ENUM.ADS_FLAG_OBJECT_TYPE_PRESENT;
            double dsControl = (double)ActiveDs.ADS_RIGHTS_ENUM.ADS_RIGHT_DS_CONTROL_ACCESS;

            foreach (string trustee in trustees) {
                ace.Trustee = trustee;
                ace.AceFlags = 0;                
                ace.AceType = Convert.ToInt32(Math.Floor(denied));
                ace.Flags = Convert.ToInt32(Math.Floor(objectType));
                ace.ObjectType = PASSWORD_GUID;
                ace.AccessMask = Convert.ToInt32(Math.Floor(dsControl));

                acl.AddAce(ace);
            }
            sd.DiscretionaryAcl = acl;
            User.Properties["ntSecurityDescriptor"].Value
= sd;
            User.CommitChanges();
EN

回答 1

Stack Overflow用户

发布于 2009-11-19 15:09:44

对于这类事情,我更喜欢使用System.DirectoryServices.AccountManagement名称空间(我认为需要.Net 3.5或更高版本)。使用这些对象,您的调用将变得简单得多:

代码语言:javascript
复制
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "Domain"))
{
    UserPrincipal up = UserPrincipal.FindByIdentity(pc, "Domain\\User");
    up.UserCannotChangePassword = false;
    up.Save();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1761312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档