【问题标题】:Display processes that access a folder显示访问文件夹的进程
【发布时间】:2011-02-07 13:33:54
【问题描述】:

我正在尝试编写一个简单的程序,最好是用 C 语言,它将监视给定的目录。每当一个进程访问该目录时,我只想打印出该进程的名称。看起来很简单,但我在 MSDN 上找不到解决方案。有谁知道为此我需要哪些图书馆电话,或任何有用的建议?我考虑过反复查询给定目录上有哪些进程句柄,并只关注该列表的添加内容。这种方法似乎非常密集,我希望有一种更简单的方法。谢谢。

【问题讨论】:

  • 您是否需要能够编写代码来执行此操作,或者您是否愿意使用现有工具? (换句话说,您是在尝试将此功能添加到某个现有/新程序中,还是将其作为练习以弄清楚如何执行此操作?)
  • 最终它将成为一个更大项目的一部分,但我不知道实现这个功能......

标签: c windows winapi directory


【解决方案1】:

我不确定是否有更简单的方法,但一种方法是使用file system filter driver。或者更简单的file system minifilter driver

您可以过滤、记录、跟踪、控制……所有 IO。

【讨论】:

    【解决方案2】:

    不支持从用户模式执行此操作的方法。您可以使用FindFirstChangeNotification API 来判断文件或目录何时发生更改,但这并不能告诉您是谁做的。你也许可以挂钩一些东西来获取这些信息……但这当然是不支持的。

    如果您可以使用驱动程序,您可以使用Event Tracing for Windows 获取此信息。这就是 Sysinternals ProcMon 使用的。但是安装驱动程序是一个非常侵入性的过程,驱动程序中的错误会导致蓝屏死机,安装驱动程序需要管理员权限。需要注意的事项。

    【讨论】:

    • 你能给我更多关于我需要挂钩的信息吗?
    • 是的,此外,FindFirstChangeNotification 和 [ ReadDirectoryChangesW](msdn.microsoft.com/en-us/library/aa365465%28VS.85%29.aspx) 还将访问事件的报告延迟在 WinXP 上最多 1 天,在 Vista+ 上最多 1 小时,以节省性能。
    猜你喜欢
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    相关资源
    最近更新 更多