我们正面临着从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.Value.然后我们用这个来添加程序到其他文件夹。下面的代码用于获取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;
}