Синатр предоставил следующую ссылку, которая описывает, почему ваш код не работает и как это исправить.Я заметил, что ссылка ссылается на верхнюю часть страницы, а не на раздел замечаний.Это раздел, который содержит необходимую вам информацию.Ниже приведена правильная ссылка.
Метод Directory.SetAccessControl Примечания
Для будущих читателей я приведу здесь краткое изложение состояния документации и приведу небольшой пример кода.
Первая проблема
Вы не можете напрямую использовать объект DirectorySecutrity из одного файла / папки и применять его к другому файлу / папке, используя только GetAccessControl / SetAccessControl.
От Microsoft:
Метод SetAccessControl сохраняет только объекты DirectorySecurity, которые были изменены после создания объекта.Если объект DirectorySecurity не был изменен, он не будет сохранен в файле.Таким образом, невозможно извлечь объект DirectorySecurity из одного файла и повторно применить этот же объект к другому файлу.
Теперь решение
Вотшаги, описанные Microsoft, которые позволят вам скопировать информацию о безопасности из одного файла или папки в другой.Обратите внимание, что комментарии взяты из документации, код - из моей тестовой программы.
using System.Security.AccessControl;
using System.IO;
. . . .
string srcFolder = @"d:\srcFolder", desFolder = @"d:\desFolder";
byte[] securityDescriptor = null;
// Step 1: Use the GetAccessControl method to retrieve the
// DirectorySecurity object from the source file.
DirectorySecurity srcPermissions = Directory.GetAccessControl(srcFolder);
// Step 2: Create a new DirectorySecurity object for the destination file.
DirectorySecurity desPermissions = new DirectorySecurity();
// Step 3: Use the GetSecurityDescriptorBinaryForm method of the
// source DirectorySecurity object to retrieve the ACL information.
securityDescriptor = srcPermissions.GetSecurityDescriptorBinaryForm();
// Step 4: Use the SetSecurityDescriptorBinaryForm method to copy the
// information retrieved in step 3 to the destination
// DirectorySecurity object.
desPermissions.SetSecurityDescriptorBinaryForm(securityDescriptor);
// Step 5: Set the destination DirectorySecurity object to the
// destination file using the SetAccessControl method.
Directory.SetAccessControl(desFolder, desPermissions);
Чтобы проверить это, я создаю две папки.Один называется srcFolder, а другой - desFolder.В desFolder я удаляю все разрешения, кроме моей учетной записи.Обратите внимание, что должна присутствовать хотя бы одна учетная запись группы или пользователя, которая предоставляет доступ.