拦截FIleSytemCall删除

时间:2012-05-23 21:07:24

标签: .net windows visual-c++ operating-system

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

或者可以尝试 ICopyHook 界面。

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

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

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

相关问题