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

w9apscun  于 2023-06-07  发布在  .NET
关注(0)|答案(2)|浏览(144)

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
eqqqjvef

eqqqjvef1#

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

s4chpxco

s4chpxco2#

我同意@benjamin-Michaelis。
GetAccessRules方法检索文件的访问规则集合沿着与指定SecurityIdentifier对象匹配的可选子限定符。在代码块中看到的includeExplicitincludeInherited参数的值为false,这意味着该方法将不包括分别为文件显式设置的或从父对象继承的访问规则。
关于AuthorizationRuleCollection,它取决于文件的访问规则。如果GetAccessRules方法无法检索任何访问规则,则返回空的AuthorizationRuleCollection。因此,如果GetAccessRules(false,false)方法找不到文件的访问规则,它至少会返回一个空的AuthorizationRuleCollection

相关问题