1

有没有办法在 Windows 执行删除之前检测文件的删除?我找到了 FileSystemWatcher 类,但仅在执行删除操作后才引发事件,但我想在用户/进程选择删除它时捕获删除操作。您可以监视文件系统表,但要寻找更好的方法。谢谢你的帮助。

4

3 回答 3

1

您需要一个文件系统过滤器驱动程序。但是我强烈建议,如果您不知道答案,您可能不应该这样做。

http://msdn.microsoft.com/en-us/library/windows/hardware/gg462968.aspx

于 2012-05-23T21:17:41.470 回答
1

我认为最简单的方法是使用挂钩来获得通知(并最终停止)该过程。它不能在 .NET 中完成,因此您必须DllImport使用大量结构和少量函数来 P/Invoke。

NtSetFileInformation让我们从(未记录的)函数开始你的工作。当需要删除文件(使用FileDispositionInformation结构)时,它是由其他任何东西调用的函数。

现在的问题是如何挂钩该函数(祝你好运,这并不容易)。一个不错的选择是使用Microsoft Detours。看看这篇文章的例子。它的问题是它不是免费的。另一种解决方案(价格合理并带有 .NET 界面)是Deviare,但我什至从未尝试过他们的免费版本,所以我不知道它有多好。如果其他人知道一个好的拦截工具......

于 2012-05-23T21:27:59.167 回答
1

或者可以尝试ICopyHook接口。

http://msdn.microsoft.com/en-us/library/windows/desktop/bb776049%28v=vs.85%29.aspx

CopyCallback方法中,使用wFunc 参数中的FO_DELETE来指定删除操作。

缺点: 仅防止在 Windows Shell 中删除。

于 2012-05-24T08:12:32.320 回答