Инструмент, который я разрабатываю, должен предоставить права доступа Full Control к созданному им файлу. Его необходимо прочитать, изменить и удалить из всех учетных записей Windows и даже из возможных будущих учетных записей. Могло ли это быть достигнуто?
Я знаю, что могу попробовать это для SPECIFIC_USER:
FileSystemAccessRule rule = new FileSystemAccessRule(SPECIFIC_USER, FileSystemRights.FullControl, AccessControlType.Allow);
FileSecurity fSecurity = File.GetAccessControl(filePath);
fSecurity.SetAccessRule(rule);
File.SetAccessControl(filePath, fSecurity);
Но как мне предоставить его всем пользователям? И даже возможные будущие аккаунты? Если последняя часть невозможна, как выполнить первое требование?
Спасибо.
РЕДАКТИРОВАТЬ:
Это код, который работал для меня. Взято из ссылки ответчика.
private void GrantAccess(string fullPath)
{
DirectoryInfo dInfo = new DirectoryInfo(fullPath);
DirectorySecurity dSecurity = dInfo.GetAccessControl();
dSecurity.AddAccessRule(new FileSystemAccessRule(
new SecurityIdentifier(WellKnownSidType.WorldSid, null),
FileSystemRights.FullControl,
InheritanceFlags.ObjectInherit |
InheritanceFlags.ContainerInherit,
PropagationFlags.NoPropagateInherit,
AccessControlType.Allow));
dInfo.SetAccessControl(dSecurity);
}
Обратите внимание на PropagationFlags.NoPropagateInherit
, который требуется (упоминается последним в ссылке). Это дает привилегию даже будущим учетным записям.
new SecurityIdentifier(WellKnownSidType.WorldSid, null)
, который возвращает объект SecurityIdentifier. Все работают только с установками Windows на английском языке, использование другого метода обеспечивает совместимость с несколькими языковыми версиями. - person Angelo Vargas   schedule 24.04.2013