从映射驱动器获取本地组 c#

Getting local group from mapped drives c#

我们面临从 C# 中授予文件夹对映射路径的访问权限的问题。我们有一个地图驱动器,它是使用代码映射的。它工作正常,我们尝试使用以下代码授予访问权限。

DirectorySecurity dirSec = Directory.GetAccessControl(clientFolder);
dirSec.AddAccessRule(new FileSystemAccessRule(@"Local group Name", FileSystemRights.Modify, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));

添加 AddAccessRule 时出错。

错误:

Some or all identity references could not be translated.

跟踪:

 at System.Security.Principal.NTAccount.Translate(IdentityReferenceCollection sourceAccounts, Type targetType, Boolean forceSuccess)
   at System.Security.Principal.NTAccount.Translate(Type targetType)
   at System.Security.AccessControl.CommonObjectSecurity.ModifyAccess(AccessControlModification modification, AccessRule rule, Boolean& modified)
   at System.Security.AccessControl.CommonObjectSecurity.AddAccessRule(AccessRule rule)

注意:我们正在使用 AD 服务帐户映射 NAS,我们正尝试从父计算机添加本地组。 AD 无法访问该组,并且它是同一个域。

请给我任何想法,将本地服务帐户的访问权限授予 NAS。

我们手动将组添加到一个文件夹,并将 IdentityReference.Value 存储到一个变量中。然后我们很容易得到 IdentityReference,使用它我们将编程添加到其他文件夹。下面的代码用于获取 IdentityReference

        public IdentityReference getReference(string NameOfDirectory)
        {
            DirectorySecurity dirSec = Directory.GetAccessControl(NameOfDirectory);
            AuthorizationRuleCollection accessRules;
            IdentityReference identity = null;
            accessRules = dirSec.GetAccessRules(true, true, typeof(NTAccount));
            foreach (FileSystemAccessRule rule in accessRules)
            {
                if (identity == null)
                {
                    if (rule.IdentityReference.Value != null && rule.IdentityReference.Value.Equals(Constants.securityId))
                    {
                        dirSec.RemoveAccessRuleSpecific(rule);
                        identity = rule.IdentityReference;
                        break;
                    }
                }
            }
            return identity;
        }