如何创建虚拟Windows驱动器

22
我正在尝试创建一个Windows虚拟驱动器(如c:\)来映射远程存储。主要目的是以清晰的方式向用户展示,因此用户不会知道他正在从另一个站点读写。
我正在寻找可用产品,发现FUSE在Windows中不是一个选项,WebDAV直接映射驱动器,我想在Windows和远程存储之间构建一个中间层以实现某种服务。还有其他选择,例如Dokan,但非常昂贵,System.IO.IsolatedStorage命名空间似乎没有明确地创建新的Windows驱动器。
可能pismo(http://www.pismotechnic.com/)最符合我的要求,但我想知道是否有其他选择,包括一些Windows(C ++或.NET)本机API来完成此操作。
谢谢阅读 :)
8个回答

21

据我所见,有几种实现此功能的选项。

“本地”的方法是创建一个自定义驱动程序(.sys文件),拦截I/O操作。微软称其为MiniFilter。这个选项最难,但允许您完全控制。

“懦夫的 ;)”选择是使用现有的库来完成此操作。例如Dokan、GPL (dokan-dev.github.io)、Pismo、免费的 (pismotec.com) 或者Callback File System (callback.com/cbfsconnect)。

然而,如果Windows不是主要目标,则可以使用FUSE,这是一个相当不错的选择。


1
我看到这是一个非常老的问题,但你选择了什么方法,它有多可用?谢谢! - tonek
1
@tonek - 我们使用了Dokan,虽然在与Windows资源管理器和文件系统问题方面有所困难,但我认为dokan是最好的免费选择。如果您想要付费的选项,则可以选择Eldos。 - HyLian
有人试过http://www.codeproject.com/KB/winsdk/Galaxy_Toolkit.aspx吗?我还没有尝试过,但从描述来看,它做的事情很相似。 - VHanded
刚刚看了一下GalaxyTK,我认为它只提供Windows Shell NameSpace Extension,不能像映射驱动器一样使用(请参见MSalters对Paul-Jan的回复)。 - Eric F.
1
我看到很多程序创建了虚拟的“映射网络驱动器”,而不是虚拟硬盘驱动器。这是因为前者更容易实现吗?如果我想要前者来进行虚拟数据输入/输出(例如,一个用于网站存储的虚拟网络驱动器),Prismo仍然是最好的选择吗? - Damn Vegetables

2

1

在您的应用程序中启动的脚本中使用SUBST命令可能是一个选项。


subst是一个不错的选择,但是如果我想要实现一种中间层,我希望能够“捕捉”读写事件。我认为用subst无法实现这一点。 也许我可以制作一个“守护进程”程序来持续监视“替换”的文件夹,但我更喜欢另一种选择。 - HyLian

0

如上所述,我们的回调文件系统是一款受支持的产品,具有全面的功能集、示例和支持。我们还提供免费的非商业许可证。


11
很不幸,这是一个黑盒子,并且需要花费金钱。 - Ivan G.
这不是一个营销平台。在推荐公司之前,请披露您是该公司的员工。这有助于建立透明度和信任。 - IsakBosman
@Bozzy 请注意答复的日期再进行评论。规则在那些日子里是不同的。而且友善的态度对你也没有坏处(给你一个友好的提示)。 - Eugene Mayevski 'Callback
1
@EugeneMayevski'EldoS 啊,既然你知道了新政策,你可以在披露中进行编辑。 - ErikE

0

1
谢谢您的回复,但那不是我想要的 :) - HyLian

0

你可以编写一个Shell命名空间扩展,使你能够将任何东西表示为驱动器(带有子文件夹、文件、自定义菜单等),但你必须从头开始构建所有功能。好处是网络上有很多示例,比如this


2
然而,这些对象仅存在于Shell(资源管理器)级别。您无法在CreateFile()调用中使用它们。 - MSalters

0

0

1
这不是原帖作者想要的。 - Eugene Mayevski 'Callback

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接