C# 当用户拥有完全控制权时,DirectorySecurity.SetAccessControl上的UnauthorizedAccessException

C# 当用户拥有完全控制权时,DirectorySecurity.SetAccessControl上的UnauthorizedAccessException,c#,security,directory,C#,Security,Directory,我有一个C#控制台应用程序,它正在创建一个目录,然后试图将目录的修改访问权授予域用户。应用程序已经运行了很长一段时间,但突然它开始在DirectorySecurity.SetAccessControl方法上抛出UnauthorizedAccessException 我已使用WindowsIdentity.GetCurrent获得当前用户帐户,并确认它是我期望的帐户(它模拟了超级用户,因为登录用户没有足够的访问权限)。我已经检查了超级用户在创建的目录上的权限,他们拥有完全控制权 private D

我有一个C#控制台应用程序,它正在创建一个目录,然后试图将目录的修改访问权授予域用户。应用程序已经运行了很长一段时间,但突然它开始在
DirectorySecurity.SetAccessControl
方法上抛出
UnauthorizedAccessException

我已使用WindowsIdentity.GetCurrent获得当前用户帐户,并确认它是我期望的帐户(它模拟了超级用户,因为登录用户没有足够的访问权限)。我已经检查了超级用户在创建的目录上的权限,他们拥有完全控制权

private DirectoryInfo CreateFolderWithOpenAccess(string directoryPath)
{
  DirectoryInfo directory = Directory.CreateDirectory(directoryPath);
  DirectorySecurity directorySecurity = directory.GetAccessControl();

  if (!HasModifyAccess(directory))
  {
    directorySecurity.AddAccessRule(
      new FileSystemAccessRule(
        Settings.Default.DomainUsers, 
        FileSystemRights.Modify,
        InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
        PropagationFlags.None, 
        AccessControlType.Allow
      )
    );

    directory.SetAccessControl(directorySecurity);
  }

  return directory;
}

有人对我应该检查什么以确保我没有遗漏任何东西有什么建议吗?有其他方法吗?

我与IT部门的同事进行了检查,他们提醒我,正在使用网络文件共享访问我创建的文件夹。事实证明,即使该帐户对共享中的所有文件和文件夹具有“完全控制”权限,但它也无法访问更改权限,因为它在共享级别没有“完全控制”权限。原因是数据服务器上的文件夹被洗牌,其中一名IT人员重新创建了共享,但没有重新创建帐户的“完全控制”权限。共享权限可通过以下方式找到:

  • 打开共享文件夹的属性
  • 单击“共享”选项卡
  • 点击“高级共享”
  • 单击“权限”
  • 确保该帐户具有“完全控制权”