是否有可能以某种方式调用文件操作(例如打开或关闭),我可以在操作系统继续请求之前处理它,如果可能的话,由.NET取消它?如果 .NET 没有这样的能力,我该怎么做呢?
4 回答
您要求做的事情可以完成。例如,病毒扫描程序一直都在这样做。您可以使用Process Monitor轻松监控文件活动。您也可以使用FileSystemWatcher Class在 C# 中以编程方式执行此操作。但是试图阻止程序打开或试图阻止程序访问文件不能在 C# 中完成。您将需要使用 C 或 C++。您需要创建一个文件系统过滤器驱动程序。构建它是一件复杂的事情,但它正是您所需要的。引用 MSDN:
A file system filter driver intercepts requests targeted at a file system or another file system filter driver. By intercepting the request before it reaches its intended target, the filter driver can extend or replace functionality provided by the original target of the request. Examples of file system filter drivers include anti-virus filters, backup agents, and encryption products.
如果您愿意,可以挂钩 Windows API。在 .NET/C# 中查看这种方式:
Sysinternals 提供了一个名为 Process Monitor 的免费工具,其中一个功能是附加到任意 Windows 进程(包括 .NET 应用程序)并捕获系统调用,包括文件打开、关闭、读取等。
您可以在Process Monitor Download Page下载它。
编辑
当我重新阅读您的问题时,我看到您在询问拦截并可能取消此类操作。我相信这个FileSystemWatcher
类将是你最好的选择,虽然我不认为它可以单方面取消文件操作——你需要建立某种合作机制来通知调用者中止它的操作。
我很确定你必须在这种操作上进入内核,我很确定这意味着你需要用 C 编写代码。看看File System Drivers。
更新:这个SO 链接可能会有所帮助。