拦截FILESytemCall进行删除

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

Solutions Collecting From Web of "拦截FILESytemCall进行删除"

我认为最简单的方法是使用钩子来通知(并最终停止)该进程。 它不能在.NET中完成,所以你必须DllImport很多结构和P / Invoke功能很少。

让我们用NtSetFileInformation (无文档)函数开始您的工作。 当一个文件需要被删除(使用FileDispositionInformation结构)时,这是由其他任何东西调用的函数。

现在的问题是如何挂钩功能(祝你好运,这是不容易的)。 一个很好的选择可以使用Microsoft Detours 。 看看这篇文章的例子。 它的问题是它不是免费的。 一个替代的解决方案(价格合理,.NET界面)是Deviare,但我从来没有试过甚至免费的版本,所以我不知道它有多好。 如果别人知道一个好的拦截工具…

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

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

或者可以试试ICopyHook接口。

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

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

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