如何使用活动目录服务接口中 Microsoft Visual C# 以编程方式设置 NTFS 文件系统文件夹的权限

适用于: Windows Servers

简介


本文分步介绍如何以编程方式使用活动目录服务接口 (ADSI) 在 Microsoft Visual C# 设置 NTFS 文件系统文件夹的权限。

更多信息


构建示例应用程序

若要运行以下示例应用程序,必须具有 ADsSecurity.dll 文件和安装的 ADsSecurity.dll 文件。这些文件将包含在活动目录服务接口 2.5 的软件开发工具包 (SDK)。若要为活动目录服务接口 2.5 下载 SDK,请访问下面的 Microsoft 网站:注意:若要运行该示例应用程序,您必须在计算机上具有管理凭据。若要生成示例应用程序,请执行以下步骤:
  1. 启动 Microsoft Visual Studio.NET 或 Microsoft Visual Studio 2005。
  2. 文件菜单上单击新建,然后单击项目
  3. Visual C# 项目中,单击模板下的Windows 应用程序注意:在 Visual Studio 2005, Visual C# 项目将变为C#
  4. 名称框中,键入NTFSPermissions,,然后单击确定
  5. 将一个按钮控件添加到 Form1 窗体。
  6. 项目菜单上,单击添加引用
  7. 单击COM选项卡,单击以选择以下各项,然后单击确定:
    • 活动的 DS 类型库
    • ADsSecurity 2.5 类型库
  8. Form1窗体上,用鼠标右键单击,然后单击查看代码
  9. 将以下using语句添加到 Form1 窗体中的源代码的顶部。
    using ADSSECURITYLib;using ActiveDs;
  10. 将下面的方法添加到Form1类中。
    public void SetPermissions(String vPath, String UserName ){ADsSecurity objADsSec;SecurityDescriptor objSecDes;AccessControlList objDAcl;AccessControlEntry objAce1;AccessControlEntry objAce2;Object objSIdHex;ADsSID objSId;objADsSec = new ADsSecurityClass();objSecDes = (SecurityDescriptor) (objADsSec.GetSecurityDescriptor("FILE://" + vPath));objDAcl = (AccessControlList)objSecDes.DiscretionaryAcl;objSId = new ADsSIDClass();objSId.SetAs((int)ADSSECURITYLib.ADS_SID_FORMAT.ADS_SID_SAM, UserName.ToString());objSIdHex = objSId.GetAs((int)ADSSECURITYLib.ADS_SID_FORMAT.ADS_SID_SDDL);// Add a new access control entry (ACE) object (objAce) so that the user has Full Control permissions on NTFS file system files.objAce1 = new AccessControlEntryClass();objAce1.Trustee = (objSIdHex).ToString();objAce1.AccessMask = (int)ActiveDs.ADS_RIGHTS_ENUM.ADS_RIGHT_GENERIC_ALL;objAce1.AceType = (int)ActiveDs.ADS_ACETYPE_ENUM.ADS_ACETYPE_ACCESS_ALLOWED;objAce1.AceFlags = (int)ActiveDs.ADS_ACEFLAG_ENUM.ADS_ACEFLAG_INHERIT_ACE | (int)ActiveDs.ADS_ACEFLAG_ENUM.ADS_ACEFLAG_INHERIT_ONLY_ACE | 1;objDAcl.AddAce(objAce1);// Add a new access control entry object (objAce) so that the user has Full Control permissions on NTFS file system folders.objAce2 = new AccessControlEntryClass();objAce2.Trustee = (objSIdHex).ToString();objAce2.AccessMask =  (int)ActiveDs.ADS_RIGHTS_ENUM.ADS_RIGHT_GENERIC_ALL;objAce2.AceType = (int)ActiveDs.ADS_ACETYPE_ENUM.ADS_ACETYPE_ACCESS_ALLOWED;objAce2.AceFlags = (int)ActiveDs.ADS_ACEFLAG_ENUM.ADS_ACEFLAG_INHERIT_ACE | 1;objDAcl.AddAce(objAce2);objSecDes.DiscretionaryAcl = objDAcl;// Set permissions on the NTFS file system folder.objADsSec.SetSecurityDescriptor(objSecDes,"FILE://" + vPath);}
  11. 单击要切换到设计模式的Form1.cs [设计]选项卡。
  12. 双击button1。下面的代码替换button1_Click事件代码。
    private void button1_Click(object sender, System.EventArgs e){try {// Set <Domain> to your domain name.// Set <UserName> to the user account.SetPermissions("C:\\Test", "<Domain>\\<UserName>");MessageBox.Show("Full Access control granted.");}catch (Exception ex){MessageBox.Show(ex.Message);}}
    注意< 域 >替换为域名称。< 用户名 >替换为您要向其授予权限的用户的名称。
  13. 单击生成菜单上的生成解决方案

测试示例应用程序

  1. 在驱动器 C 的根文件夹中创建一个文件夹。名称测试的文件夹。
  2. 在 Windows 资源管理器中,测试文件夹中,用鼠标右键单击,然后单击属性
  3. 测试的属性对话框中,单击安全选项卡。
  4. 选择运行此测试的域帐户。如果未列出该帐户,单击添加,然后向列表中添加的域帐户。
  5. 权限单击以清除完全控制复选框,以限制此用户的测试文件夹上的权限。然后,单击确定
  6. 运行 NTFSPermission.exe 应用程序。默认情况下,Form1将显示。
  7. 单击button1。您会收到以下消息:
    授予完全访问权限控制。
  8. 单击确定以关闭消息框。
  9. 关闭窗体以退出应用程序。
  10. 在 Windows 资源管理器,打开C:\文件夹。
  11. 测试文件夹中,用鼠标右键单击,然后单击属性
  12. 测试的属性对话框中,单击安全选项卡。
  13. 选择为其正在运行此测试,并验证测试文件夹上的权限的域帐户。
指定为用户提供了在测试文件夹的完全控制权限。

参考


有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
279682如何使用 ADsSecurity.dll 来将访问控制项添加到 NTFS 文件夹
266461如何使用 ADSI 来设置自动继承的文件/文件夹的权限