Я понял это с помощью друга, который работает в Microsoft. На самом деле процесс, который я использовал для установки ACL, был точным. Я неправильно интерпретировал результаты. По сути, это не проблема при настройке ACL для каталога таким образом, если вы пытаетесь внести изменения в качестве администратора.
Точные разрешения для папки были доступны для просмотра (в Vista):
- Щелкните правой кнопкой мыши нужную папку и выберите свойства
- Выберите вкладку Безопасность
- Нажмите Дополнительно
- Нажмите Редактировать
- Выберите объект, для которого вы хотите просмотреть разрешения, и нажмите «Изменить».
Это та часть, которую мне не хватало. Путь CommonApplicationData уже имеет разрешения, установленные для сущности BUILTIN \ Users. Так что после того, как я запустил свой код, я фактически получил две сущности. Один говорит «Читай и выполняй», а другой - «Специальные разрешения». Когда я редактирую сущность со специальными разрешениями, я фактически вижу, что у BUILTIN \ Users есть доступ к каталогу.
Я действительно искал, чтобы BUILTIN \ Users имел доступ к каталогу и всем его дочерним папкам и объектам. Вот фрагмент кода из того, что я в итоге использовал. Я смог подтвердить, что мой код работал как через тестовый набор, так и вручную, проверяя списки ACL для файлов и каталогов.
DirectorySecurity directorySecurity = Directory.GetAccessControl(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData));
FileSystemAccessRule accessRule
= new FileSystemAccessRule(@"BUILTIN\Users", FileSystemRights.FullControl,
InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit,
PropagationFlags.None,
AccessControlType.Allow);
bool modified=false;
directorySecurity.ModifyAccessRule(AccessControlModification.Add,
accessRule,
out modified);
if (modified)
{
source.Create(directorySecurity);
}
else
{
source.Create();
}