【问题标题】:How does Pismo File Mount mount ZIP files onto Windows Explorer?Pismo File Mount 如何将 ZIP 文件挂载到 Windows 资源管理器中?
【发布时间】:2014-06-05 11:38:25
【问题描述】:

我已经使用Pismo File Mount 很多年了,我一直想知道它实际上是如何工作的。

假设,我目前正在开发一个创建类似于ZIP format 的包格式的应用程序。为了便于访问,我想创建一个 shell 扩展,它的工作方式类似于 Pismo File Mount 的工作方式。对于那些以前没有使用过 Pismo File Mount 的人来说,它是这样工作的:

  1. 用户在 Windows 资源管理器中右键单击 ZIP 文件。
  2. 然后用户点击“挂载”来挂载 ZIP 文件。
  3. 用户现在可以立即访问他/她的文件。
  4. 用户无需解压 ZIP 文件即可查看其内容。

有一个问题。我确实想使用 Pismo File Mount API,可能是出于商业或法律等各种原因。

问题是,就 Windows API 和 C++ 而言,Pismo File Mount 如何以编程方式将自身集成到 Windows Explorer 中?

【问题讨论】:

  • 这个问题似乎跑题了,因为它不是一个编程问题。
  • 这是纯编程问题。它是关于如何在 C++ 中做同样的事情。

标签: c++ zip windows-explorer


【解决方案1】:

我编写了 Pismo File Mount,并在 PFM 审计包中包含了 ZIP 阅读器。

这个问题没有简明的或实际可发布的答案。要在 C/C++ 中对 Windows API(内核和用户)执行 PFM 所做的工作,需要数千行困难代码和大量时间投入。

PFM 被构建为文件系统驱动程序(内核模块),具有用户模式支持 DLL 和可执行文件。驱动程序使用协议与用户模式格式化代码(例如)解码 ZIP 文件格式并通过内核模式驱动程序将内容提供给客户端应用程序。

【讨论】:

    【解决方案2】:

    有两种方式:

    1. Shell 命名空间扩展。由 shell 命名空间扩展创建的文件夹不是实际的文件系统文件夹,并且此类文件夹中文件的可访问性通常仅限于资源管理器本身和知道 shell 扩展及其使用方式的应用程序。

    2. 在现有磁盘上创建虚拟目录的文件系统过滤器驱动程序。所有应用程序都将此类目录视为真实目录,这些应用程序可以在其中读取和写入文件和子目录。所有文件系统操作都通过这样的驱动程序。

    Pismo File Mount 通过过滤器驱动程序 AFAIK 工作。

    我们的 CallbackFilter 产品提供了一种创建虚拟目录和文件的方法。它包括一个驱动程序并调用您的用户模式代码以进行实际操作。但是过滤器方法有点复杂——由于过滤器驱动程序堆栈和文件系统驱动程序的体系结构不同,使用文件系统驱动程序(例如,使用我们的回调文件系统产品)创建的虚拟磁盘更容易实现和管理。

    【讨论】:

    • PFM 没有作为文件系统过滤器或命名空间扩展来实现。至于插入式 Eldos 产品,我鼓励任何希望在购买之前实现文件系统以与这两个平台和 Dokan (以及 FUSE,如果便携性是一个问题)一起工作的人。
    【解决方案3】:

    听起来像是一个相当普通的 shell 扩展。 Explorer 具有强大的扩展机制,允许它列出非文件对象,例如打印机和 zip 文件的内容。特定细节(列和行)由 DLL 提供。

    您可以通过压缩一组图像来观察这一点;普通的缩略图视图可能无法正常工作,因为资源管理器的那部分通常不会被复制。

    【讨论】:

    • PFM 未实现为外壳命名空间扩展。如果是,则必须在“打开”文件时将文件提取到本地存储。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 2020-04-14
    • 1970-01-01
    • 2011-06-19
    • 2010-12-06
    相关资源
    最近更新 更多