导出 (0) 打印
全部展开
此文章由人工翻译。 将光标移到文章的句子上,以查看原文。
译文
原文

Directory.SetAccessControl 方法

DirectorySecurity 对象描述的访问控制列表 (ACL) 项应用于指定的目录。

命名空间:  System.IO
程序集:  mscorlib(在 mscorlib.dll 中)

public static void SetAccessControl(
	string path,
	DirectorySecurity directorySecurity
)

参数

path
类型:System.String
要从中添加或移除访问控制列表 (ACL) 项的目录。
directorySecurity
类型:System.Security.AccessControl.DirectorySecurity
一个 DirectorySecurity 对象,该对象描述要应用于 path 参数所描述的目录的 ACL 项。

异常条件
ArgumentNullException

directorySecurity 参数为 null

DirectoryNotFoundException

未能找到目录。

ArgumentException

path 无效。

UnauthorizedAccessException

当前进程不具有访问由 path 指定的目录的权限。

- 或 -

当前进程没有足够的特权设置 ACL 项。

PlatformNotSupportedException

当前操作系统不是 Windows 2000 或更高版本。

SetAccessControl 方法将访问控制列表 (ACL) 项应用于表示非继承 ACL 列表的文件。

警告说明警告

directorySecurity 参数指定的 ACL 替换该目录的现有 ACL。 若要为新用户添加权限,请使用 GetAccessControl 方法获取现有 ACL 并对其进行修改。

ACL 描述对给定文件或目录具有或没有执行特定操作的权限的个人和/或组。 有关更多信息,请参见ACL 技术概述如何:添加或移除访问控制列表项

SetAccessControl 方法仅保持创建对象之后进行了修改的 DirectorySecurity 对象。如果 DirectorySecurity 对象尚未进行修改,它将不会保持在文件中。因此,无法从文件检索一个 DirectorySecurity 对象并将相同的对象重新应用于其他文件。

将 ACL 信息从一个文件复制到另一个文件:

  1. 使用 GetAccessControl 方法从源文件检索 DirectorySecurity 对象。

  2. 为目标文件创建新的 DirectorySecurity 对象。

  3. 使用 DirectorySecurity 源对象的 GetSecurityDescriptorBinaryFormGetSecurityDescriptorSddlForm 方法检索 ACL 信息。

  4. 使用 SetSecurityDescriptorBinaryFormSetSecurityDescriptorSddlForm 方法将在步骤 3 中检索到的信息复制到 DirectorySecurity 目标对象。

  5. 使用 SetAccessControl 方法将 DirectorySecurity 目标对象设置为目标文件。

在 NTFS 环境中,如果用户对父文件夹具有 ListDirectory 权限,则会向该用户授予 ReadAttributesReadExtendedAttributes 权限。 若要拒绝 ReadAttributesReadExtendedAttributes,请在父目录上拒绝 ListDirectory

下面的代码示例使用 GetAccessControlSetAccessControl 方法添加访问控制列表 (ACL) 项,然后从某个目录中移除一个 ACL 项。 您必须提供有效的用户或组帐户才能运行此示例。


using System;
using System.IO;
using System.Security.AccessControl;

namespace FileSystemExample
{
    class DirectoryExample
    {
        public static void Main()
        {
            try
            {
                string DirectoryName = "TestDirectory";

                Console.WriteLine("Adding access control entry for " + DirectoryName);

                // Add the access control entry to the directory.
                AddDirectorySecurity(DirectoryName, @"MYDOMAIN\MyAccount", FileSystemRights.ReadData, AccessControlType.Allow);

                Console.WriteLine("Removing access control entry from " + DirectoryName);

                // Remove the access control entry from the directory.
                RemoveDirectorySecurity(DirectoryName, @"MYDOMAIN\MyAccount", FileSystemRights.ReadData, AccessControlType.Allow);

                Console.WriteLine("Done.");
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }

            Console.ReadLine();
        }

        // Adds an ACL entry on the specified directory for the specified account.
        public static void AddDirectorySecurity(string FileName, string Account, FileSystemRights Rights, AccessControlType ControlType)
        {
            // Create a new DirectoryInfo object.
            DirectoryInfo dInfo = new DirectoryInfo(FileName);

            // Get a DirectorySecurity object that represents the 
            // current security settings.
            DirectorySecurity dSecurity = dInfo.GetAccessControl();

            // Add the FileSystemAccessRule to the security settings. 
            dSecurity.AddAccessRule(new FileSystemAccessRule(Account,
                                                            Rights,
                                                            ControlType));

            // Set the new access settings.
            dInfo.SetAccessControl(dSecurity);

        }

        // Removes an ACL entry on the specified directory for the specified account.
        public static void RemoveDirectorySecurity(string FileName, string Account, FileSystemRights Rights, AccessControlType ControlType)
        {
            // Create a new DirectoryInfo object.
            DirectoryInfo dInfo = new DirectoryInfo(FileName);

            // Get a DirectorySecurity object that represents the 
            // current security settings.
            DirectorySecurity dSecurity = dInfo.GetAccessControl();

            // Add the FileSystemAccessRule to the security settings. 
            dSecurity.RemoveAccessRule(new FileSystemAccessRule(Account,
                                                            Rights,
                                                            ControlType));

            // Set the new access settings.
            dInfo.SetAccessControl(dSecurity);

        }
    }
}



.NET Framework

受以下版本支持:4、3.5、3.0、2.0

.NET Framework Client Profile

受以下版本支持:4、3.5 SP1

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2

.NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求

社区附加资源

添加
显示:
© 2014 Microsoft