C#设置与获取目录权限(.net控制ACL) 想用c#来设置和读取ntfs分区上的目录权限,找了很多资料,未果。终于发现了一段vb.net的代码,做了修改,以C#展示给大家。íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
using System;íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
using System.Collections;íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
using System.IO;íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
using System.Security.AccessControl;íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
staticíÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
class TesteríÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
{íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
   
publicíÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
staticíÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
void Main()íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
   
{íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
       
tryíÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
       
{íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
           
string filename =íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
@"f:\k"; //目标目录íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
string account =íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
@"Administrator";//用户名íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
string userrights =íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
@"RW";//权限字符串,自己定义的íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
            AddDirectorySecurity(filename, account, userrights);íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
            Console.ReadLine();íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
        }
íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
       
catch (Exception e)íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
       
{íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
            Console.WriteLine(e);íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
            Console.ReadLine();íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
        }
íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
    }
íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
   
staticíÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
publicíÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
void AddDirectorySecurity(string FileName, string Account, string UserRights)íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
   
{íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
        FileSystemRights Rights
=íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
new FileSystemRights();íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
       
if (UserRights.IndexOf("R") >=íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
0)íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
       
{íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
            Rights
= Rights | FileSystemRights.Read;íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
        }
íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
       
if (UserRights.IndexOf("C") >=íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
0)íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
       
{íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
            Rights
= Rights | FileSystemRights.ChangePermissions;íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
        }
íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
       
if (UserRights.IndexOf("F") >=íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
0)íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
       
{íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
            Rights
= Rights | FileSystemRights.FullControl;íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
        }
íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
       
if (UserRights.IndexOf("W") >=íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
0)íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
       
{íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
            Rights
= Rights | FileSystemRights.Write;íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
        }
íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
       
bool ok;íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
        DirectoryInfo dInfo
=íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
new DirectoryInfo(FileName);íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
        DirectorySecurity dSecurity
= dInfo.GetAccessControl();íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
        InheritanceFlags iFlags
=íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
new InheritanceFlags();íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
        iFlags
= InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
        FileSystemAccessRule AccessRule2
=íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
new FileSystemAccessRule(Account, Rights, iFlags, PropagationFlags.None, AccessControlType.Allow);íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
        dSecurity.ModifyAccessRule(AccessControlModification.Add, AccessRule2,
out ok);íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
        dInfo.SetAccessControl(dSecurity);íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
       
//列出目标目录所具有的权限íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
        DirectorySecurity sec = Directory.GetAccessControl(FileName, AccessControlSections.All);íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
       
foreach (FileSystemAccessRule rule in sec.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
       
{íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
            Console.WriteLine(
"----------------------------------");íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
            Console.WriteLine(rule.IdentityReference.Value);íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
           
if ((rule.FileSystemRights & FileSystemRights.Read) !=íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
0)íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
                Console.WriteLine(rule.FileSystemRights.ToString());íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
        }
íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
        Console.Read();íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
    }
íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
}
íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ
对照MSDN,很容易看懂上面的代码。 但是貌似这个程序需要以管理员身份来运行。^_^íÉ ò±?Cçwww.netcsharp.cnMá!¿WeëßfÈ