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);


}



 


Skip to main content