1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Security.AccessControl;
using System.Security.Principal;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
try
{
string dirName = @"C:\";
Console.WriteLine("Adding access control entry for " + dirName);
// Add ACL( access control entry to the directory)
AddDirectorySecurity(dirName, "USERNAME", FileSystemRights.ListDirectory, AccessControlType.Allow);
GetDirectoryNames(dirName);
Console.WriteLine("Removing access control entry from " + dirName);
// Remove ACL.
RemoveDirectorySecurity(dirName, "USERNAME", FileSystemRights.ReadData, AccessControlType.Allow);
Console.WriteLine("Done.");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);;
}
Console.ReadKey();
}
private static void GetDirectoryNames(string path )
{
DirectoryInfo diRoot = new DirectoryInfo(path);
Console.WriteLine("Root Directory :"+ diRoot.Name );
GetFileNames(diRoot);
Console.WriteLine("Directory Names :");
foreach (var di in diRoot.GetDirectories())
{
Console.WriteLine(di.Name);
GetFileNames(di);
}
}
private static void GetFileNames(DirectoryInfo di)
{
foreach (var fi in di.GetFiles())
{
Console.WriteLine(" " + fi.FullName);
}
}
// Adds an ACL entry on the specified directory for the specified account.
private static void AddDirectorySecurity(string FileName, string Account, FileSystemRights Rights, AccessControlType ControlType)
{
// Create a new DirectoryInfoobject.
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.
private static void RemoveDirectorySecurity(string FileName, string Account, FileSystemRights Rights, AccessControlType ControlType)
{
// Create a new DirectoryInfoobject.
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);
}
}
} |
Partager