Hi Tuan,
Codeproject article :
Adding File Access Permissions using DirectoryServices
Code given below sets a folder's and all child folders/files permission for a specific user to "Full Control".
string Folder = "C:\TestFolder";
string Account = "a_user_account";
DirectorySecurity dSecurity = Directory.GetAccessControl(Folder,
AccessControlSections.All);
dSecurity.AddAccessRule(new FileSystemAccessRule(Account,
FileSystemRights.FullControl,
InheritanceFlags.ContainerInherit|InheritanceFlags.ObjectInherit,
PropagationFlags.None,
AccessControlType.Allow));
Directory.SetAccessControl(folder, dSecurity);
C# - Set Folder Permission
1 ) Set Access Control
DirectoryInfo dInfo = new DirectoryInfo(fileName);
DirectorySecurity dSecurity = dInfo.GetAccessControl();
dSecurity.AddAccessRule(new FileSystemAccessRule("everyone",FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit,PropagationFlags.InheritOnly,AccessControlType.Allow));
dInfo.SetAccessControl(dSecurity);
2) Sharing foldel
ManagementClass mc = new ManagementClass("win32_share");
ManagementBaseObject inParams = mc.GetMethodParameters("Create");
inParams("Description") = "My Shared Folder";
inParams("Name") = "Shared Folder Name";
inParams("Path") = "C:\\Folder1";
inParams("Type") = ShareResourceType.DiskDrive;
inParams("MaximumAllowed") = null;
inParams("Password") = null;
inParams("Access") = null;
ManagementBaseObject outParams = classObj.InvokeMethod("Create", inParams, null);
3) Only in Windows 7 and Vista, upgrade "Everyone" sharing right
NTAccount ntAccount = new NTAccount("Everyone");
SecurityIdentifier userSID = (SecurityIdentifier)ntAccount.Translate(typeof(SecurityIdentifier));
byte[] utenteSIDArray = new byte[userSID.BinaryLength];
userSID.GetBinaryForm(utenteSIDArray, 0);
ManagementObject userTrustee = new ManagementClass(new ManagementPath("Win32_Trustee"), null);
userTrustee["Name"] = "Everyone";
userTrustee["SID"] = utenteSIDArray;
ManagementObject userACE = new ManagementClass(new ManagementPath("Win32_Ace"), null);
userACE["AccessMask"] = 2032127;
userACE["AceFlags"] = AceFlags.ObjectInherit | AceFlags.ContainerInherit;
userACE["AceType"] = AceType.AccessAllowed;
userACE["Trustee"] = userTrustee;
ManagementObject userSecurityDescriptor = new ManagementClass(new ManagementPath("Win32_SecurityDescriptor"), null);
userSecurityDescriptor["ControlFlags"] = 4;
userSecurityDescriptor["DACL"] = new object[] { userACE };
ManagementClass mc = new ManagementClass("Win32_Share");
ManagementObject share = new ManagementObject(mc.Path + ".Name='" + CondivisionName + "'");
share.InvokeMethod("SetShareInfo", new object[] { Int32.MaxValue, description, userSecurityDescriptor });