【问题标题】:Writing a user mode filesystem for windows?为 Windows 编写用户模式文件系统?
【发布时间】:2009-09-11 19:09:30
【问题描述】:

是否可以在纯用户模式下为 Windows 编写文件系统,或者更具体地说,纯在托管代码中?我正在考虑与 GMAILFS 非常相似的东西。排除它在幕后所做的事情(GMAIL、亚马逊等),主要目标是提供驱动器号并支持所有基本文件操作,甚至可能添加我自己的结构来存储元数据等。

【问题讨论】:

  • 不是骗子,我不是在寻找图书馆来为我做这件事,我想自己做。
  • 虽然我最终可能不得不使用它;)
  • 顺便说一下,虽然我几乎不关心它是否会成为用户模式(我什至更喜欢系统模式,以便系统服务可以使用数据而不需要用户登录)我真的很想用 C# 编写文件系统驱动程序,但到目前为止在这个主题上找不到任何有趣的东西......

标签: c# filesystems


【解决方案1】:

Windows 提供了多种方法来构建用于不同目的的用户模式文件系统,具体取决于您的存储位置和您需要支持的功能。其中两个,Projected File System API 和 Cloud Files API 最近作为 Windows 10 更新的一部分提供。

Windows 投影文件系统 API

Projected File System API 旨在以文件系统的形式表示一些分层数据,例如 Windows 注册表。 与云文件(见下文)不同,它不提供有关文件状态的任何信息,并隐藏了这不是“真实”文件系统的事实。 Example.

Windows 云同步引擎 API

Cloud Sync Engine API(云文件 API、云过滤器 API)在 Windows 10 的 OneDrive 中使用。它提供了第一次请求期间的文件夹内容加载、几种不同模式的按需文件内容加载以及离线文件支持。它直接集成到 Windows 文件管理器和 Windows 通知中心,并提供文件状态(离线、同步、冲突、固定)和文件内容传输进度。 Cloud Files API 在常规用户权限下运行,并且不需要管理员权限来安装文件系统或任何 API 调用。 Example.

Windows Shell 命名空间扩展 API

虽然Shell Namespace Extension 不是真正的文件系统,但在许多情况下,您将使用它来扩展投影文件系统和云文件 API 的功能。例如,您可以在 Windows 文件管理器的上下文菜单中添加自定义命令,还可以创建外观和行为类似于真实文件系统的节点(同样,应用程序无法读取或写入此类节点,这只是一个用户界面)。 Cloud Files API 使用命名空间扩展在 Windows 文件管理器的顶层显示您的同步根。

【讨论】:

  • 借助 Shell 命名空间扩展,您可以使用 3rd 方应用程序完美地读取/写入项目。此外,Cloud Files API 没有使用命名空间扩展。支持(图标、文本、菜单等)直接内置在 Shell 中,快速访问链接只是注册表巫毒:docs.microsoft.com/en-us/windows/win32/shell/…
【解决方案2】:

这很难。我会看看一些为您完成了一些艰苦工作的项目,例如Dokan.

【讨论】:

  • 据我所知,Dokan 需要作为内核模式驱动程序 (Dokan.sys) 安装,只有在此之后,您才能实现自己的用户模式代码(在 .Net 中可选)层层叠叠……
  • 没有办法在商业项目中使用 Dokan,它是在 LGPL 许可下。我建议使用 WebDAV 服务器库(例如webdavsystem.com/server)+ 内置的 Windows/Mac OS X 驱动器安装功能。可能这是实现结果的最快方法,并且在这种情况下,您的服务器将符合标准。
  • @user424257 LGPL 允许在商业项目中使用(实际上 GPL 也是如此)。不过,Dokan 也有自己的缺点,例如大量的错误以及缺乏支持和维护。
【解决方案3】:

是的。这是可能的,并且一直是successfully done for the ext2 filesystem

请注意,您需要编写自己的驱动程序,这需要 Microsoft 签名才能在某些操作系统上运行。

【讨论】:

  • 这个纯用户模式怎么样?它是一个内核驱动程序,不是吗??
  • 修正 - 您不需要 Microsoft 签名即可加载驱动程序。司机必须签名并附上会签,但这是另一回事。 Microsoft 签名(正确地说是 WHQL 认证)是另一回事。
【解决方案4】:

当然,您可以抽象常规文件操作并让它们在云中运行(请参阅 Google Apps、Amazon S3、Microsoft Azure 等)。但是,如果您想与本地设备(包括本地 HD)通信,则必须使用系统 API,而那些使用驱动程序(系统/内核模式)。

只要您想要的只是存储服务-没问题。如果您想要一个真正的操作系统,您需要与真正的硬件对话,这意味着驱动程序。

【讨论】:

  • 我实际上不是与本地硬件对话,而是从它的另一端看..如何使我的抽象文件系统在 Windows 中显示为驱动器。
【解决方案5】:

仅作为参考 - 我们的 Callback File System 是一个维护和支持的解决方案,用于在用户模式下创建文件系统。

【讨论】:

  • 我很感激,虽然它是你的产品,你可以随心所欲地收费,但 4000 美元的“打折”私人商业供应商许可证对我来说有点太贵了
  • @esac 编写驱动程序从来都不便宜,维护它们也相当昂贵。 “免费” Dokan 充满了没有发布周期的错误。因此,您要么用自己的钱,要么用失望的客户付款。
  • 我完全同意,您显然应该为您的产品收费。作为一名在空闲时间编写大量工具的开发人员,其中大部分工具只有我个人使用,而且他们从未见识过,我无法证明 4K 是合理的。我很乐意为个人使用、不可再分发的副本支付少得多的费用,如果出于某种原因我想发布某些东西,我会更愿意支付所需的 4K。
  • 拥有有效期为 6 个月的评估密钥。 6 个月后,用户需要申请进一步的评估密钥。如果您使用这些评估密钥之一在野外看到程序的副本,则不再将其提供给该用户,并且他们的软件将停止工作。
  • @MatBee 我们有私人营业执照和免费的非商业执照。唯一的限制是不能开源。
猜你喜欢
  • 2010-12-14
  • 2011-06-11
  • 2012-01-16
  • 2018-02-28
  • 1970-01-01
  • 2013-12-17
  • 2015-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多