bounty还有2天到期。此问题的答案有资格获得+50声望奖励。Andie2302正在寻找一个答案从一个有信誉的来源。
' 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
2条答案
按热度按时间eqqqjvef1#
GetAccessRules
无论如何都返回空的AuthorizationRuleCollection。要了解这一点,我们可以查看dotnet源代码(前面的链接)。我们可以看到,问题中的方法
GetAccessRules
(GetAccessRules的源代码)调用了GetRules
(GetRules的源代码)。在GetRules
方法的开始,它创建了一个新的AuthorizationRuleCollection,即使没有规则添加到它,它也会返回。s4chpxco2#
我同意@benjamin-Michaelis。
GetAccessRules
方法检索文件的访问规则集合沿着与指定SecurityIdentifier
对象匹配的可选子限定符。在代码块中看到的includeExplicit
和includeInherited
参数的值为false,这意味着该方法将不包括分别为文件显式设置的或从父对象继承的访问规则。关于
AuthorizationRuleCollection
,它取决于文件的访问规则。如果GetAccessRules
方法无法检索任何访问规则,则返回空的AuthorizationRuleCollection
。因此,如果GetAccessRules(false,false)方法找不到文件的访问规则,它至少会返回一个空的AuthorizationRuleCollection
。