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