如何以编程方式更改文件夹审核选项下的“适用于”字段(.NET)

我正在尝试以编程方式设置文件夹审核选项下的“适用于”字段。 在MSDN中,这里的代码示例使用FileSystemAuditRule类将新的审计规则添加到文件夹。 在这个class级中没有什么明显的设置特定的审计规则需要应用到什么地方。

这是我用来设置一些权限的代码:

const string myFolder = @"S:\Temp\SomeFolderToAudit"; var account = new SecurityIdentifier(WellKnownSidType.WorldSid, null).Translate(typeof(NTAccount)); FileSecurity fSecurity = File.GetAccessControl(myFolder, AccessControlSections.Audit); fSecurity.AddAuditRule(new FileSystemAuditRule(account, FileSystemRights.WriteData | FileSystemRights.Delete | FileSystemRights.ChangePermissions, AuditFlags.Success)); File.SetAccessControl(myFolder, fSecurity); 

这很好地创build了审计规则,除了下面突出显示的选项: 适用于未设置的选项

我需要这是“ 此文件夹,子文件夹和文件 ”例如或“ 此文件夹只 ”以外的任何东西。 我不想遍历所有的目录和文件,并设置相同的审计规则。 我不想尝试和pipe理inheritance,规则将被保护。 我只需要一种方法来设置这个选项,最好使用托pipe代码(如果这是唯一的方法,则欢迎使用P / Invokes)。

预先感谢您的帮助。

经过一段时间的摆弄,我设法找到了如何设置“适用于”字段。 在创建审计规则对象时,您需要使用InheritanceFlags和PropagationFlags的组合。

以下是示例代码(基于问题示例),向您显示了标志的组合以及结果对“适用于”字段的结果:

 // This folder only (default) fSecurity.AddAuditRule(new FileSystemAuditRule(account, FileSystemRights.WriteData | FileSystemRights.Delete | FileSystemRights.ChangePermissions, InheritanceFlags.None, PropagationFlags.None, AuditFlags.Success)); // This folder and subfolders fSecurity.AddAuditRule(new FileSystemAuditRule(account, FileSystemRights.WriteData | FileSystemRights.Delete | FileSystemRights.ChangePermissions, InheritanceFlags.ContainerInherit, PropagationFlags.None, AuditFlags.Success)); // This folder and files fSecurity.AddAuditRule(new FileSystemAuditRule(account, FileSystemRights.WriteData | FileSystemRights.Delete | FileSystemRights.ChangePermissions, InheritanceFlags.ObjectInherit, PropagationFlags.None, AuditFlags.Success)); // This folder, subfolders and files fSecurity.AddAuditRule(new FileSystemAuditRule(account, FileSystemRights.WriteData | FileSystemRights.Delete | FileSystemRights.ChangePermissions, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AuditFlags.Success)); // Subfolders only fSecurity.AddAuditRule(new FileSystemAuditRule(account, FileSystemRights.WriteData | FileSystemRights.Delete | FileSystemRights.ChangePermissions, InheritanceFlags.ContainerInherit, PropagationFlags.InheritOnly, AuditFlags.Success)); // Files only fSecurity.AddAuditRule(new FileSystemAuditRule(account, FileSystemRights.WriteData | FileSystemRights.Delete | FileSystemRights.ChangePermissions, InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AuditFlags.Success)); // Subfolders and files only fSecurity.AddAuditRule(new FileSystemAuditRule(account, FileSystemRights.WriteData | FileSystemRights.Delete | FileSystemRights.ChangePermissions, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AuditFlags.Success)); 

迈克尔·泰勒在这个非常有用的页面上可以找到关于访问控制的更多信息。