private bool HasRights(FileSystemRights fileSystemRights_, string fileName_, bool isFile_)
{
bool hasRights = false;
WindowsIdentity WinIdentity = System.Security.Principal.WindowsIdentity.GetCurrent();
WindowsPrincipal WinPrincipal = new WindowsPrincipal(WinIdentity);
AuthorizationRuleCollection arc = null;
if (isFile_)
{
FileInfo fi = new FileInfo(@fileName_);
arc = fi.GetAccessControl().GetAccessRules(true, true, typeof(NTAccount));
}
else
{
DirectoryInfo di = new DirectoryInfo(@fileName_);
arc = di.GetAccessControl().GetAccessRules(true, true, typeof(NTAccount));
}
foreach (FileSystemAccessRule rule in arc)
{
if (WinPrincipal.IsInRole(rule.IdentityReference.Value))
{
if (((int)rule.FileSystemRights & (int)fileSystemRights_) > 0)
{
if (rule.AccessControlType == AccessControlType.Allow)
hasRights = true;
else if (rule.AccessControlType == AccessControlType.Deny)
{
hasRights = false;
break;
}
}
}
}
return hasRights;
}
上面的代码块导致了我的问题。执行WinPrincipal.IsInRole(rule.IdentityReference.Value)时,会发生以下异常:
“主域和受信任域之间的信任关系失败。”。
我很擅长使用身份,原则等,所以我不知道问题是什么。我假设它是使用NTAccount吗?
由于
答案 0 :(得分:0)
我可以尝试通过建议您使用SecurityIdentifier来解决您的问题,但是这里还有许多其他问题仍然是show-stoppers,即使这已得到解决。我不是在谈论低效率,例如使用FileInfo而不是File,而是你试图用来解释DACL的基本逻辑。
看看:http://msdn.microsoft.com/en-us/library/cc230290(PROT.10).aspx