Программное добавление разрешений в папку
У меня есть проблема, когда мне нужно добавить доступ к папке для всех пользователей, прошедших проверку подлинности, для хранения настроек, связанных с приложением. Я обнаружил, что это можно сделать с помощью кода ниже...
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));