Code Snippet: Setting NTFS permissions
My previous post shows how to use Windows32.Security to read and set permissions to the registry. Doing the same for a NTFS is even simpler:
public bool TestNTFSPermissions(string path, string userName)
{
SecurityDescriptor secDesc = SecurityDescriptor.GetFileSecurity(path, SECURITY_INFORMATION.DACL_SECURITY_INFORMATION);
Dacl dacl = secDesc.Dacl;
return TestAcl(dacl, userName);
}
public void SetNTFSPermissions(string path, string userName)
{
SecurityDescriptor secDesc = SecurityDescriptor.GetFileSecurity(path, SECURITY_INFORMATION.DACL_SECURITY_INFORMATION);
Dacl dacl = secDesc.Dacl;
Sid sidUser = new Sid (userName);
// allow: folder, subfolder and files
dacl.AddAce (new AceAccessAllowed (sidUser, AccessType.GENERIC_ALL, AceFlags.OBJECT_INHERIT_ACE | AceFlags.CONTAINER_INHERIT_ACE));
secDesc.SetDacl(dacl);
secDesc.SetFileSecurity(path, SECURITY_INFORMATION.DACL_SECURITY_INFORMATION);
}
There is one caviat - I couldn't find a way to automagically apply a setting to a folder and recursively to all the subfolders & files. The following snippet takes care of that:
public void SetRecursiveNTFSPermissions(string path, string userName)
{
SetNTFSPermissions(path,userName);
foreach(string file in Directory.GetFiles(path))
SetNTFSPermissions(file,userName);
foreach(string dir in Directory.GetDirectories(path))
SetRecursiveNTFSPermissions(dir,userName);
}
Comments
- Anonymous
May 31, 2009
PingBack from http://outdoorceilingfansite.info/story.php?id=19825 - Anonymous
June 16, 2009
PingBack from http://workfromhomecareer.info/story.php?id=24333