Windows 资源管理器和重新分析点文件 : keep Explorer from opening my files

标签 windows explorer shell-extensions

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

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

[Update: I've found I can use Windows sparse files to show my remote file size in Explorer. ]

因此,我还实现了一个 Shell 扩展 IThumbnailProvider,它可以下载文件的再现。这提供了文件缩略图。

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

我看到结合使用 Process Monitor 和 DebugView(均来自 SysInternals)的两个有趣行为: 1. 如果我让我的微过滤器拒绝从资源管理器打开文件的请求,那么我的 IThumbnailProvider 就会被调用。 2. 如果我允许来自 Explorer 的打开请求,我会在调用堆栈中看到 thumbcache.dll 试图打开该文件并且我的 IThumbnailProvider 没有被调用。默认缩略图提供程序似乎读取下载的文件并创建缩略图。

我一定是遗漏了什么。

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

最佳答案

有许多 shell 扩展类型可以访问您的文件。图标处理程序可以读取文件以创建图标,信息提示处理程序可以读取文件以创建文本提示,数据对象处理程序可以读取文件以创建剪贴板数据等。

同样问题的开发者提问:firstsecond .解决方案是创建 namespace 外壳扩展。 NSE 可以控制对您文件的所有访问。

关于Windows 资源管理器和重新分析点文件 : keep Explorer from opening my files,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30517268/

相关文章:

windows - 如何防止 .NET 服务在等待相关服务时超时

c++ - 我的命名空间扩展未在“文件打开”对话框中列出

windows - 在先前无法加载的explorer.exe中重新加载 namespace 扩展

c++ - 在 C++ 代码中使用 Windows 的 native 程序打开文件

activex - Lazarus/FPC 中的接口(interface) : Multiple inheritance

c# - shell 扩展如何将多个选定的文件传递给我自己的程序?

ruby - 在 ruby​​ 中使用其 PID 终止进程

windows - FileReference:加载 Windows 锁定文件

c++ - 更改最近文件的总数