Search code examples
c#securitypermissionsntfs

Programmatically Adding Permissions to a Folder


I have an issue where I need to add give access to a folder for all authenticated users to store application related settings. I have found that this can be done with the below code...

var Info = new DirectoryInfo(settingsdir);
var Security = Info.GetAccessControl(AccessControlSections.Access);

Security.AddAccessRule(
    new FileSystemAccessRule(
        "Authenticated Users", FileSystemRights.Modify,
        InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
        PropagationFlags.None,
        AccessControlType.Allow));

The problem I have found is that "Authenticated Users" is a system account that is on windows however, on different language versions of Windows this account name is translated, for instance in Germany this account is called 'Authentifizierte Benutzer'. Is there a way to know the proper name of this account (with out the obvious of going through every language and finding the correct account name).


Solution

  • I'd suggest you use the Well Known SID list (see http://support.microsoft.com/kb/243330). Authenticated User is always SID: S-1-5-11. If you use that, it ought to be language agnostic (but I've not tested).

    Create a SecurityIdentifier and use that instead:

    var sid = new SecurityIdentifier(WellKnownSidType.AuthenticatedUserSid, null); 
    
    Security.AddAccessRule(
       new FileSystemAccessRule(
           sid,
           FileSystemRights.Modify,
           InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
           PropagationFlags.None,
           AccessControlType.Allow));