【问题标题】:Windows Explorer and Reparse Point Files: keep Explorer from opening my filesWindows 资源管理器和重新分析点文件:阻止资源管理器打开我的文件
【发布时间】:2015-06-05 22:08:39
【问题描述】:

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

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

[更新:我发现我可以使用 Windows 稀疏文件来显示我的遥控器 资源管理器中的文件大小。 ]

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

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

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

我一定错过了什么。

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

【问题讨论】:

  • 设置FILE_ATTRIBUTE_OFFLINE 文件属性。这表示the file is will trigger a download when accessed。 Explorer 尊重此属性并尝试避免自动触发下载。其他 shell 扩展也应该尊重该属性。
  • @RaymondChen - 我正在 Windows Server 2012 上尝试使用 FILE_ATTRIBUTE_OFFLINE。我已取消注册我的 Shell 扩展并重新启动资源管理器。资源管理器在“属性”窗格中将文件显示为脱机(可用性:仅联机)。但是,我仍然看到 IRP_CREATE 的微过滤器 PostCreateCallback 被 Explorer.exe 中的 STATUS_REPARSE 调用,所需访问权限为 0x00120089。从 ProcMon 看来,它似乎正在被 thumbcache.dll 打开。

标签: windows explorer shell-extensions


【解决方案1】:

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

来自具有相同问题的开发人员的问题:firstsecond。解决方案是创建命名空间外壳扩展。 NSE 可以控制对您文件的所有访问。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多