C#设置与获取目录权限(.net控制ACL)
想用c#来设置和读取ntfs分区上的目录权限,找了很多资料,未果。终于发现了一段vb.net的代码,做了修改,以C#展示给大家。
 using System;
using System;
 using System.Collections;
using System.Collections;
 using System.IO;
using System.IO;
 using System.Security.AccessControl;
using System.Security.AccessControl;
 static class Tester
static class Tester
 {
{

 public static void Main()
    public static void Main()
 {
    {
 try
        try
 {
        {
 string filename = @"f:\k"; //目标目录
            string filename = @"f:\k"; //目标目录
 string account = @"Administrator";//用户名
            string account = @"Administrator";//用户名
 string userrights = @"RW";//权限字符串,自己定义的
            string userrights = @"RW";//权限字符串,自己定义的
 AddDirectorySecurity(filename, account, userrights);
            AddDirectorySecurity(filename, account, userrights);
 Console.ReadLine();
            Console.ReadLine();
 }
        }
 catch (Exception e)
        catch (Exception e)
 {
        {
 Console.WriteLine(e);
            Console.WriteLine(e);
 Console.ReadLine();
            Console.ReadLine();
 }
        }
 }
    }

 static public void AddDirectorySecurity(string FileName, string Account, string UserRights)
    static public void AddDirectorySecurity(string FileName, string Account, string UserRights)
 {
    {
 FileSystemRights Rights = new FileSystemRights();
        FileSystemRights Rights = new FileSystemRights();

 if (UserRights.IndexOf("R") >= 0)
        if (UserRights.IndexOf("R") >= 0)
 {
        {
 Rights = Rights | FileSystemRights.Read;
            Rights = Rights | FileSystemRights.Read;
 }
        }
 if (UserRights.IndexOf("C") >= 0)
        if (UserRights.IndexOf("C") >= 0)
 {
        {
 Rights = Rights | FileSystemRights.ChangePermissions;
            Rights = Rights | FileSystemRights.ChangePermissions;
 }
        }
 if (UserRights.IndexOf("F") >= 0)
        if (UserRights.IndexOf("F") >= 0)
 {
        {
 Rights = Rights | FileSystemRights.FullControl;
            Rights = Rights | FileSystemRights.FullControl;
 }
        }
 if (UserRights.IndexOf("W") >= 0)
        if (UserRights.IndexOf("W") >= 0)
 {
        {
 Rights = Rights | FileSystemRights.Write;
            Rights = Rights | FileSystemRights.Write;
 }
        }

 bool ok;
        bool ok;
 DirectoryInfo dInfo = new DirectoryInfo(FileName);
        DirectoryInfo dInfo = new DirectoryInfo(FileName);
 DirectorySecurity dSecurity = dInfo.GetAccessControl();
        DirectorySecurity dSecurity = dInfo.GetAccessControl();
 InheritanceFlags iFlags = new InheritanceFlags();
        InheritanceFlags iFlags = new InheritanceFlags();
 iFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;
        iFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;
 FileSystemAccessRule AccessRule2 = new FileSystemAccessRule(Account, Rights, iFlags, PropagationFlags.None, AccessControlType.Allow);
        FileSystemAccessRule AccessRule2 = new FileSystemAccessRule(Account, Rights, iFlags, PropagationFlags.None, AccessControlType.Allow);
 dSecurity.ModifyAccessRule(AccessControlModification.Add, AccessRule2, out ok);
        dSecurity.ModifyAccessRule(AccessControlModification.Add, AccessRule2, out ok);

 dInfo.SetAccessControl(dSecurity);
        dInfo.SetAccessControl(dSecurity);

 //列出目标目录所具有的权限
        //列出目标目录所具有的权限
 DirectorySecurity sec = Directory.GetAccessControl(FileName, AccessControlSections.All);
        DirectorySecurity sec = Directory.GetAccessControl(FileName, AccessControlSections.All);
 foreach (FileSystemAccessRule rule in sec.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
        foreach (FileSystemAccessRule rule in sec.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
 {
        {
 Console.WriteLine("----------------------------------");
            Console.WriteLine("----------------------------------");
 Console.WriteLine(rule.IdentityReference.Value);
            Console.WriteLine(rule.IdentityReference.Value);
 if ((rule.FileSystemRights & FileSystemRights.Read) != 0)
            if ((rule.FileSystemRights & FileSystemRights.Read) != 0)
 Console.WriteLine(rule.FileSystemRights.ToString());
                Console.WriteLine(rule.FileSystemRights.ToString());

 }
        }
 Console.Read();
        Console.Read();
 }
    }

 }
}
对照MSDN,很容易看懂上面的代码。 但是貌似这个程序需要以管理员身份来运行。^_^
其中的Directory.GetAccessControl(FileName, AccessControlSections.All); 第二个参数如果为AccessControlSections.Access ,就可以使得运行在IIS中的Web应用程序获得目录权限了。
 using System;
using System; using System.Collections;
using System.Collections; using System.IO;
using System.IO; using System.Security.AccessControl;
using System.Security.AccessControl; static class Tester
static class Tester {
{
 public static void Main()
    public static void Main() {
    { try
        try {
        { string filename = @"f:\k"; //目标目录
            string filename = @"f:\k"; //目标目录 string account = @"Administrator";//用户名
            string account = @"Administrator";//用户名 string userrights = @"RW";//权限字符串,自己定义的
            string userrights = @"RW";//权限字符串,自己定义的 AddDirectorySecurity(filename, account, userrights);
            AddDirectorySecurity(filename, account, userrights); Console.ReadLine();
            Console.ReadLine(); }
        } catch (Exception e)
        catch (Exception e) {
        { Console.WriteLine(e);
            Console.WriteLine(e); Console.ReadLine();
            Console.ReadLine(); }
        } }
    }
 static public void AddDirectorySecurity(string FileName, string Account, string UserRights)
    static public void AddDirectorySecurity(string FileName, string Account, string UserRights) {
    { FileSystemRights Rights = new FileSystemRights();
        FileSystemRights Rights = new FileSystemRights();
 if (UserRights.IndexOf("R") >= 0)
        if (UserRights.IndexOf("R") >= 0) {
        { Rights = Rights | FileSystemRights.Read;
            Rights = Rights | FileSystemRights.Read; }
        } if (UserRights.IndexOf("C") >= 0)
        if (UserRights.IndexOf("C") >= 0) {
        { Rights = Rights | FileSystemRights.ChangePermissions;
            Rights = Rights | FileSystemRights.ChangePermissions; }
        } if (UserRights.IndexOf("F") >= 0)
        if (UserRights.IndexOf("F") >= 0) {
        { Rights = Rights | FileSystemRights.FullControl;
            Rights = Rights | FileSystemRights.FullControl; }
        } if (UserRights.IndexOf("W") >= 0)
        if (UserRights.IndexOf("W") >= 0) {
        { Rights = Rights | FileSystemRights.Write;
            Rights = Rights | FileSystemRights.Write; }
        }
 bool ok;
        bool ok; DirectoryInfo dInfo = new DirectoryInfo(FileName);
        DirectoryInfo dInfo = new DirectoryInfo(FileName); DirectorySecurity dSecurity = dInfo.GetAccessControl();
        DirectorySecurity dSecurity = dInfo.GetAccessControl(); InheritanceFlags iFlags = new InheritanceFlags();
        InheritanceFlags iFlags = new InheritanceFlags(); iFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;
        iFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit; FileSystemAccessRule AccessRule2 = new FileSystemAccessRule(Account, Rights, iFlags, PropagationFlags.None, AccessControlType.Allow);
        FileSystemAccessRule AccessRule2 = new FileSystemAccessRule(Account, Rights, iFlags, PropagationFlags.None, AccessControlType.Allow); dSecurity.ModifyAccessRule(AccessControlModification.Add, AccessRule2, out ok);
        dSecurity.ModifyAccessRule(AccessControlModification.Add, AccessRule2, out ok);
 dInfo.SetAccessControl(dSecurity);
        dInfo.SetAccessControl(dSecurity);
 //列出目标目录所具有的权限
        //列出目标目录所具有的权限 DirectorySecurity sec = Directory.GetAccessControl(FileName, AccessControlSections.All);
        DirectorySecurity sec = Directory.GetAccessControl(FileName, AccessControlSections.All); foreach (FileSystemAccessRule rule in sec.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
        foreach (FileSystemAccessRule rule in sec.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount))) {
        { Console.WriteLine("----------------------------------");
            Console.WriteLine("----------------------------------"); Console.WriteLine(rule.IdentityReference.Value);
            Console.WriteLine(rule.IdentityReference.Value); if ((rule.FileSystemRights & FileSystemRights.Read) != 0)
            if ((rule.FileSystemRights & FileSystemRights.Read) != 0) Console.WriteLine(rule.FileSystemRights.ToString());
                Console.WriteLine(rule.FileSystemRights.ToString());
 }
        } Console.Read();
        Console.Read(); }
    }
 }
}对照MSDN,很容易看懂上面的代码。 但是貌似这个程序需要以管理员身份来运行。^_^
其中的Directory.GetAccessControl(FileName, AccessControlSections.All); 第二个参数如果为AccessControlSections.Access ,就可以使得运行在IIS中的Web应用程序获得目录权限了。
 
                    
                     
                    
                 
                    
                


 
     
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号