Программное добавление разрешений в папку

У меня есть проблема, когда мне нужно добавить доступ к папке для всех пользователей, прошедших проверку подлинности, для хранения настроек, связанных с приложением. Я обнаружил, что это можно сделать с помощью кода ниже...

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

Проблема, которую я обнаружил, заключается в том, что "Аутентифицированные пользователи" - это системная учетная запись, которая находится на окнах, однако на разных языковых версиях Windows это имя учетной записи переводится, например, в Германии эта учетная запись называется "Authentifizierte Benutzer". Есть ли способ узнать собственное имя этой учетной записи (без очевидного прохождения каждого языка и поиска правильного имени учетной записи).

Ответы

Ответ 1

Я бы посоветовал использовать список хорошо известных SID (см. http://support.microsoft.com/kb/243330). Идентифицированный пользователь всегда имеет SID: S-1-5-11. Если вы используете это, это должно быть языковым агностиком (но я не тестировал).

Создайте SecurityIdentifier и используйте это вместо:

var sid = new SecurityIdentifier(WellKnownSidType.AuthenticatedUserSid, null); 

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