Windows资源pipe理器和重新分析点文件:保持资源pipe理器打开我的文件

我已经实现了一个用户模式程序和一个Windows文件系统微filter,为远程文件存储系统创build用户文件的骨架视图。 它将远程文件映射到本地驱动器。 用户模式程序为远程系统上的每个文件创build一个重新分析标记。 当检测到创build请求(例如,用于读取的CreateFile)时,微filter要求用户模式程序下载文件。 这只能在程序想要打开文件进行查看或编辑时才会发生。

但是,我发现Windows资源pipe理器正在触发我的文件下载。 我想阻止浏览器文件窗口和文件打开/保存对话框触发下载。 而且,我也想显示文件缩略图和文件大小。

[更新:我发现我可以使用Windows稀疏文件在资源pipe理器中显示我的远程文件大小。 ]

因此,我还实现了一个Shell Extension,IThumbnailProvider,用于下载文件的呈现。 这提供了文件缩略图。

对于我的testing,我已经为所有文件(*)和.jpg文件注册了IThumbnailProvider。

我看到两个有趣的行为,使用进程监视器和DebugView(都来自SysInternals):1.如果我让我的微filter拒绝请求从资源pipe理器打开文件,那么我的IThumbnailProvider被调用。 2.如果我允许来自资源pipe理器的打开请求,我会在调用堆栈中看到thumbcache.dll试图打开文件,我的IThumbnailProvider不会被调用。 看起来,默认缩略图提供程序读取下载的文件并创build缩略图。

我肯定错过了什么。

更新:如果我使用InitializeWithStream而不是InitializeWithFile,它看起来我的处理程序被调用。 但是,这也会触发文件的下载。

有许多外壳扩展类型可以访问你的文件。 图标处理程序可以读取文件来创建图标,Info tip handler可以读取文件来创建文本提示,Data object handler可以读取文件来创建剪贴板数据等等。

来自开发者的问题: 第一个和第二个问题。 解决方案是创建命名空间外壳扩展。 NSE可以控制对你的文件的所有访问。