using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.AccessControl;
using System.Security.Principal;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
string fileName = AppDomain.CurrentDomain.BaseDirectory + "test.txt";
string dir = AppDomain.CurrentDomain.BaseDirectory;
try
{
Console.WriteLine("File ACL");
using (FileStream fs = new FileStream(fileName, FileMode.Open,FileAccess.Read))
{
FileSecurity fsec = fs.GetAccessControl();
foreach(FileSystemAccessRule rule in fsec.GetAccessRules(true,true,typeof(NTAccount)))
{
Console.WriteLine("{0} {1} {2} acess for {3}", Path.GetFileName(fileName),
rule.AccessControlType == AccessControlType.Allow ? "Provides" : "denies",
rule.FileSystemRights, rule.IdentityReference);
}
FileSystemAccessRule newRule = new FileSystemAccessRule(new System.Security.Principal.NTAccount(@"BUILTIN\Users"), FileSystemRights.FullControl, AccessControlType.Allow);
fsec.AddAccessRule(newRule);
File.SetAccessControl(fileName, fsec);
Console.WriteLine();
Console.WriteLine("Add ACL");
foreach (FileSystemAccessRule rule in fsec.GetAccessRules(true, true, typeof(NTAccount)))
{
Console.WriteLine("{0} {1} {2} acess for {3}", Path.GetFileName(fileName),
rule.AccessControlType == AccessControlType.Allow ? "Provides" : "denies",
rule.FileSystemRights, rule.IdentityReference);
}
}
Console.WriteLine("Directory ACL");
DirectoryInfo di = new DirectoryInfo(dir);
DirectorySecurity dsec = di.GetAccessControl();
foreach (FileSystemAccessRule rule in dsec.GetAccessRules(true,true,typeof(NTAccount)))
{
Console.WriteLine("{0} {1} {2} acess for {3}", dir,
rule.AccessControlType == AccessControlType.Allow ? "Provides" : "denies",
rule.FileSystemRights, rule.IdentityReference);
}
Console.Read();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.Read();
}
}
}
}