我多年来一直在使用Pismo File Mount,我一直想知道它是如何运作的。
假设我正在开发一个创建类似于ZIP format的包格式的应用程序。为了便于访问,我想创建一个类似于Pismo File Mount工作方式的 shell扩展。对于那些之前没有使用Pismo File Mount的人来说,这是它的工作原理:
有一个问题。我不想要使用Pismo File Mount API,可能出于商业或法律等各种原因。
问题是,根据Windows API和C ++,Pismo File Mount如何以编程方式将自身集成到Windows资源管理器中?
答案 0 :(得分:1)
听起来像一个相当普通的shell扩展。 Explorer具有强大的扩展机制,允许它列出非文件对象,如打印机和zip文件的内容。特定细节(列和行)由DLL提供。
你可以通过拉上一组图像来观察它;普通的缩略图视图可能无法正常工作,因为资源管理器的那部分通常不会被复制。
答案 1 :(得分:1)
有两种方式:
Shell命名空间扩展。 shell命名空间扩展创建的文件夹不是实际的文件系统文件夹,此类文件夹中文件的可访问性通常仅限于Explorer本身和应用程序知道shell扩展以及使用它们的方法。
文件系统过滤器驱动程序,它在现有磁盘上创建虚拟目录。所有应用程序都将此类目录视为真实目录,其中这些应用程序可以读取和写入文件和子目录。所有文件系统操作都经过这样的驱动程序
Pismo File Mount通过过滤器驱动程序AFAIK工作。
我们的CallbackFilter产品提供了一种创建虚拟目录和文件的方法。它包含一个驱动程序,并调用您的用户模式代码进行实际操作。但是过滤器方法有点复杂 - 由于过滤器驱动程序堆栈和文件系统驱动程序的体系结构不同,使用文件系统驱动程序创建的虚拟磁盘(例如,使用我们的回调文件系统产品)更容易实现和管理。
答案 2 :(得分:1)
我写了Pismo File Mount,以及PFM Audit Package中包含的ZIP阅读器。
对这个问题没有任何建议或现实可回答的答案。要完成PFM在C / C ++中对Windows API(内核和用户)所做的事情,需要花费数十万行代码和大量时间投资。
PFM构建为文件系统驱动程序(内核模块),用户模式支持DLL和可执行文件。驱动程序使用协议与用户模式格式化代码进行通信(例如)解码ZIP文件格式,并通过内核模式驱动程序将内容提供给客户端应用程序。