Код в блоге Майка О'Брайенса отлично сработал для меня.

аюсь преодолеть следующую ситуацию.

Имеется каталог, хранящийся на томе NTFS, где:

Владелец каталога установлен кем-то другим (например, непривилегированный пользователь)Каталог DACL настроен для разрешения доступа к определенной группе людей, которая не включает систему или администраторов.DACL в каталоге на самом деле не предоставляет никому права доступа или изменения DACL

(или короче говоря, все администраторы были заблокированы из папки)

Но!

Учетная запись, под которой я работаю, имеет права администратора (SeBackupPrivilege, SeSecurityPrivilege)Существующий DACL можно игнорировать, так как я все равно пишу новыйИспользуя другие инструменты (takeown.exe), я могу получить доступ к рассматриваемому каталогу.

(или короче говоря, у меня есть доступ, чтобы исправить DACL / владельца)

У меня не должно быть проблем со следующим кодом:

WindowsIdentity privilegedUser = System.Security.Principal.WindowsIdentity.GetCurrent();

// I cannot use File.GetAccessControl() as I get access denied
// (working as intended! I have no access to read the ACL!)
// so I have to write a new ACL:
FileSecurity acl = new FileSecurity();
acl.SetOwner(admin.User);
acl.AddAccessRule(new FileSystemAccessRule(privilegedUser.User, FileSystemRights.FullControl, AccessControlType.Allow));

File.SetAccessControl("c:\\path\\to\\broken", acl);

НоSetAccessControl броски вызововUnauthorizedAccessException, Когда я изменяю его, чтобы настроить только владельца, происходит то же самое. Когда я только пытаюсь настроить DACL, то же самое.

Я проверил, что проблема не в UAC, проверив результирующий процесс в Process Explorer, и убедился, что группе «Администраторы» задано значение «Владелец» вместо «Отключено». ядолжен иметь все необходимые права для этого (операторы резервного копирования должны быть посторонними в лице администраторов, но я добавил его для тестирования) - но он просто продолжает выбрасывать доступ запрещен.

Соответствующая техническая документация:http://technet.microsoft.com/en-us/library/cc783530%28WS.10%29.aspx

«Если вы являетесь владельцем объекта, вы можете предоставить любому пользователю или группе безопасности любое разрешение на этот объект, включая разрешение на владение им».Собственность может быть передана следующими способами:Текущий владелец может предоставить разрешение «Взять в собственность» другому пользователю, что позволит ему в любое время стать владельцем. Пользователь должен фактически вступить во владение, чтобы закончить передачу.(К сожалению, владелец не может передать право собственности в этой ситуации.)Администратор может стать владельцем.Пользователь, имеющий право на восстановление файлов и каталогов, может назначить владельца любому пользователю или группе.Возможность владеть файлами и другими объектами является еще одним случаем, когда потребность администратора в поддержке системы имеет приоритет над правом владельца контролировать доступ. Как правило, вы можете стать владельцем объекта, только если его текущий владелец разрешит вам это сделать. Владельцы объектов NTFS могут разрешить другому пользователю вступать во владение, предоставив другому пользователю разрешение на владение; Владельцы объектов Active Directory могут предоставить другому пользователю разрешение «Изменить владельца». Пользователь, обладающий этой привилегией, может стать владельцем объекта без разрешения текущего владельца. По умолчанию привилегия назначается только встроенной группе администраторов. Обычно он используется администраторами для получения и переназначения владения ресурсами, когда их текущий владелец больше не доступен.

Что мне здесь не хватает?

Ответы на вопрос(2)

Ваш ответ на вопрос