我实现了用户模式程序和Windows文件系统minifilter,它为远程文件存储系统创建用户文件的框架视图。它将远程文件映射到本地驱动器。用户模式程序为远程系统上的每个文件创建重新分析标记。当检测到创建请求(例如,用于读取的CreateFile)时,微过滤器要求用户模式程序下载文件。这应该仅在程序要打开文件以供查看或编辑时才会发生。
但是,我发现Windows资源管理器正在触发我的文件下载。我想阻止Explorer文件窗口和文件打开/保存对话框 触发下载。而且,我还想显示文件缩略图和文件 尺寸。
[更新:我发现我可以使用Windows稀疏文件来显示我的遥控器 Explorer中的文件大小。 ]
因此,我还实现了一个Shell扩展,IThumbnailProvider,用于下载文件的再现。这提供了文件缩略图。
对于我的测试,我已经为所有文件(*)和.jpg文件注册了IThumbnailProvider。
我使用Process Monitor和DebugView(都来自SysInternals)的组合看到了两个有趣的行为: 1.如果我让minifilter拒绝从Explorer打开文件的请求,则调用我的IThumbnailProvider。 2.如果我允许来自资源管理器的打开请求,我会在调用堆栈中看到thumbcache.dll尝试打开该文件而我的IThumbnailProvider未被调用。似乎默认缩略图提供程序读取下载的文件并创建缩略图。
我一定错过了什么。
更新:如果我使用InitializeWithStream而不是InitializeWithFile,则会调用我的处理程序。但是,这也会触发文件的下载。