Windows - 在FileNotFound文件系统中按需下载文件?

时间:2011-11-14 16:07:02

标签: windows filesystems hook driver

我想在windows中添加某种“钩子”(只需要在Windows Server 2008 R2及更高版本上工作),当我在磁盘上请求文件但它不存在时,它会从Web服务器请求它在本地缓存它。

文件是不可变的,并且具有唯一的文件名。

尝试打开这些文件的应用程序是用C语言编写的,只是以正常方式使用操作系统打开文件。假设它呼叫OpenFile询问c:\scripts\1234.12.script,那就是那里它会正常打开它。如果它然后它要求c:\scripts\1234.13.script然后它不在那么我操作系统中的钩子将去询问我的web服务该文件,下载它然后返回该文件,因为它一直在那里。

我更喜欢将其写为用户模式进程(我从未编写过Windows驱动程序),它只应在特定文件夹中找不到文件时触发,并且我希望尽可能将其写入托管语言(C#将是完美的)。文件很小(<50kB),网络服务很快,互联网连接也很快,所以我不希望下载文件的时间超过一秒钟。

我的问题是 - 我从哪里开始寻找有关此类事情的信息?如果有人做过类似的事情 - 你知道我有什么选择(例如可以在C#中完成吗?)?

2 个答案:

答案 0 :(得分:1)

您需要创建一个内核模式文件系统过滤器驱动程序,它将拦截打开此类文件的请求,并“伪造”这些文件。我应该说,即使对于驱动程序开发,这也是一项非常复杂的任务。我们的CallbackFilter产品能够解决您的问题,但“伪造”文件的机制尚未准备就绪(我们为CallbackFilter 3计划此功能)。在那之前,我不知道任何用户模式解决方案(坦率地说,也没有内核模式解决方案)可以解决您的问题。

如果您可以更改应用程序正在访问的文件夹,则可以创建虚拟文件系统并将其映射到驱动器盘符或NTFS驱动器上的文件夹。从虚拟文件系统,您可以将大多数请求定向到实际磁盘,如果文件不存在,您可以下载该文件并对其进行缓存。我们的其他产品Callback File System可让您按用户模式执行操作。如果您需要完成一次性任务,并且没有预算,请联系我们,也许我们可以找到一些解决方案。还有一个开源解决方案具有类似(但不是那么全面)的功能,名为Dokan,但我将不会评论其质量。

答案 1 :(得分:0)

您也可以尝试Dokan,它是开源的,您可以查看discussion group 的问题和指南。