【问题标题】:C# File change/create/delete eventC# 文件更改/创建/删除事件
【发布时间】:2014-07-30 21:44:25
【问题描述】:

我目前正在研究安全问题并尝试构建一个基本的“访问限制器”,如果特定目录(包括子目录)中的文件或文件夹被创建、更改、删​​除等,它应该注册。

在使用FileSystemWatcher 执行操作后,我已经想出了如何执行此操作,但我想在请求/事件发生处理之前捕获它。我已经搜索了一段时间,但还没有真正找到解决方案。

如果有可能,我将不胜感激提示或简短的示例/参考。 提前致谢。

【问题讨论】:

  • 您的程序是否会做任何使用标准 Windows 文件权限无法做到的事情?
  • 谢谢@Blorgbeard。这也是我的担心
  • 它更多地是关于限制对特定进程/程序的特定文件的访问,或者如果另一个程序想要更改某些内容,则会收到通知
  • @ThexBasic 如果您不使用权限,则无法限制对特定文件的访问。这些文件仍然是可修改的,您只会收到通知(通过FileSystemWatcher,正如您所说)。
  • FileSystemWatcher 会在之后通知您,因此您不能使用它来抑制/取消操作。您需要为与文件 I/O 相关的 WINAPI 函数建立挂钩 - 是的,这将涉及一些 P/Invoke 恶作剧。 (请参阅here 以获取有关一些使挂钩更容易的本机(!)库的一些链接和 cmets)。你真的想这样做吗?

标签: c# file directory filesystemwatcher


【解决方案1】:

正如您所说,您已经可以看到在对文件执行某些操作之后会发生什么。据我所知,您不能从 .Net 抢占文件系统访问权限,因为这发生在低得多的层(就在存储之上)。如果您想确保安全性,最好关注 NTFS/共享级别的安全性(如 Blorgbeard 所说的标准权限)。

如果您真的想拦截文件系统调用,文件系统过滤器驱动程序可能是您所追求的,但看起来非常困难。

进入概念:http://msdn.microsoft.com/en-us/library/windows/hardware/dn641617

另一个 SO 答案重申了同样的事情(我基于上面的链接):How to intercept the access to a file in a .NET Program

或者,您可以定制您的安全应用程序以枚举文件/文件夹上的安全设置作为预防措施,以确保正确的文件系统安全设置到位,或者在不正确的情况下采取纠正措施。您可以使用 FileSecurity 类来了解您可以使用什么(相当多!):http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.filesecurity(v=vs.110).aspx

如果您想走审计路线并坚持使用 FileSecurity 和/或 DirectorySecurity 类,我会发布一个单独的问题,我们可以解决这个问题。

编辑: 编写过滤器驱动程序的一些实际代码,如果您愿意的话(注意,没有.net): http://www.codeproject.com/Articles/43586/File-System-Filter-Driver-Tutorial

【讨论】:

  • 谢谢,这实际上帮助了很多。可能有更简单的方法可以做到这一点,但我想我会看看 Filter-driver-tutorial。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-23
  • 2016-05-31
  • 1970-01-01
  • 2012-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多