C#设置与获取目录权限(.net控制ACL)
2017-05-27 22:34
423 查看
C#设置与获取目录权限(.net控制ACL)
想用c#来设置和读取ntfs分区上的目录权限,找了很多资料,未果。终于发现了一段vb.net的代码,做了修改,以C#展示给大家。![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
using System;
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
using System.Collections;
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
using System.IO;
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
using System.Security.AccessControl;
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
static class Tester
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
public static void Main()
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
try
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
string filename = @"f:\k"; //目标目录
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
string account = @"Administrator";//用户名
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
string userrights = @"RW";//权限字符串,自己定义的
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
AddDirectorySecurity(filename, account, userrights);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Console.ReadLine();
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
catch (Exception e)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Console.WriteLine(e);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Console.ReadLine();
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
static public void AddDirectorySecurity(string FileName, string Account, string UserRights)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
FileSystemRights Rights = new FileSystemRights();
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if (UserRights.IndexOf("R") >= 0)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Rights = Rights | FileSystemRights.Read;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if (UserRights.IndexOf("C") >= 0)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Rights = Rights | FileSystemRights.ChangePermissions;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if (UserRights.IndexOf("F") >= 0)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Rights = Rights | FileSystemRights.FullControl;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if (UserRights.IndexOf("W") >= 0)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Rights = Rights | FileSystemRights.Write;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
bool ok;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
DirectoryInfo dInfo = new DirectoryInfo(FileName);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
DirectorySecurity dSecurity = dInfo.GetAccessControl();
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
InheritanceFlags iFlags = new InheritanceFlags();
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
iFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
FileSystemAccessRule AccessRule2 = new FileSystemAccessRule(Account, Rights, iFlags, PropagationFlags.None, AccessControlType.Allow);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
dSecurity.ModifyAccessRule(AccessControlModification.Add, AccessRule2, out ok);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
dInfo.SetAccessControl(dSecurity);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
//列出目标目录所具有的权限
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
DirectorySecurity sec = Directory.GetAccessControl(FileName, AccessControlSections.All);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
foreach (FileSystemAccessRule rule in sec.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Console.WriteLine("----------------------------------");
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Console.WriteLine(rule.IdentityReference.Value);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if ((rule.FileSystemRights & FileSystemRights.Read) != 0)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Console.WriteLine(rule.FileSystemRights.ToString());
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Console.Read();
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
对照MSDN,很容易看懂上面的代码。 但是貌似这个程序需要以管理员身份来运行。^_^
其中的Directory.GetAccessControl(FileName, AccessControlSections.All); 第二个参数如果为AccessControlSections.Access ,就可以使得运行在IIS中的Web应用程序获得目录权限了。
相关文章推荐
- (证实可用)C#设置与获取目录权限(.net控制ACL)
- C#设置与获取目录权限(.net控制ACL)
- C#设置与获取目录权限(.net控制ACL)
- c#设置目录权限(.net控制alc)
- 用 C# 给文件夹设置 NTFS 权限(ACL)
- 获取和设置c# 应用程序目录
- 您未被授权查看该页 您不具备查看该目录或页面的权限,因为访问控制列表 (ACL) 对 Web 服务器上的该资源进行了配置
- 【ZkClient】com.101tec的zkclient包,ACL权限控制遇到第二级目录no auth的问题
- 获取和设置c# 应用程序目录 (转)
- ZooKeeper设置ACL权限控制
- IIS中遇到无法预览的问题(HTTP 错误 401.3 - Unauthorized 由于 Web 服务器上此资源的访问控制列表(ACL)配置或加密设置,您无权查看此目录或页面。)
- 您不具备查看该目录或页面的权限,因为访问控制列表 (ACL) 对Web服务器上的该资源进行了配置
- 获取和设置c# 应用程序目录
- 如何在Linux下设置访问控制列表(ACL)来控制用户的权限
- 获取和设置c# 应用程序目录
- apache 设置目录权限控制
- .Net下查看和修改文件夹的ACL安全权限(C#)
- 设置Windows系统NTFS某个目录的用户访问权限(c#)
- C#改动文件或目录的权限,为指定用户、用户组加入全然控制权限
- 获取和设置c# 应用程序目录