NTAccount的GetAccessControl错误

时间:2010-06-16 14:26:35

标签: c# .net security filesystems

    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吗?

由于

1 个答案:

答案 0 :(得分:0)

我可以尝试通过建议您使用SecurityIdentifier来解决您的问题,但是这里还有许多其他问题仍然是show-stoppers,即使这已得到解决。我不是在谈论低效率,例如使用FileInfo而不是File,而是你试图用来解释DACL的基本逻辑。

看看:http://msdn.microsoft.com/en-us/library/cc230290(PROT.10).aspx