在 C# 中,两个参数都设置为 false 的 GetAccessRules 是否始终返回空的 AuthorizationRuleCollection?

Does GetAccessRules with both parameters set to false always return an empty AuthorizationRuleCollection in C#?

提问人:Andie2302 提问时间:5/23/2023 最后编辑:Andie2302 更新时间:6/6/2023 访问量:68

问:

'GetAccessRules(false, false)' 是否总是返回一个空的 'AuthorizationRuleCollection'

我已经阅读了文档,但是当两个参数都设置为“false”时,我找不到有关该场景的任何信息。

FileInfo fileInfo = new FileInfo(@"C:\test.txt");
if (!fileInfo.Exists)
{
    using (fileInfo.Create())
    {
    }
}
FileSecurity fileSecurity = fileInfo.GetAccessControl();
bool includeExplicit=false;
bool includeInherited=false;
Type targetType = typeof(SecurityIdentifier);
AuthorizationRuleCollection authorizationRuleCollection = fileSecurity.GetAccessRules(includeExplicit, includeInherited, targetType);
Console.WriteLine(authorizationRuleCollection.Count);  // Output: 0

C# .NET 安全 授权

评论


答:

1赞 Benjamin Michaelis 6/2/2023 #1

GetAccessRules无论如何,返回一个空的 AuthorizationRuleCollection。

若要了解这一点,我们可以查看 dotnet 源代码(前面的链接)。我们看到有问题的方法(GetAccessRules 的源代码)调用(GetRules 的源代码)。在方法开始时,它会创建一个新的 AuthorizationRuleCollection,即使没有添加任何规则,也会返回该集合。GetAccessRulesGetRulesGetRules

1赞 RUV 6/6/2023 #2

我同意@benjamin-Michaelis的观点。

该方法检索文件的访问规则集合,以及与指定对象匹配的可选子限定符。在代码块中看到的 和 参数的 false 值意味着该方法将不包括分别为文件显式设置或从父对象继承的访问规则。GetAccessRulesSecurityIdentifierincludeExplicitincludeInherited

关于 ,这取决于文件的访问规则。如果 method 无法检索任何访问规则,则返回空 .因此,您可以保证 GetAccessRules(false, false) 方法在找不到文件的访问规则时至少会返回一个空。AuthorizationRuleCollectionGetAccessRulesAuthorizationRuleCollectionAuthorizationRuleCollection