将Google云端硬盘映射到网络驱动器或本地硬盘

时间:2015-06-16 05:04:01

标签: c# google-drive-api

我正在尝试使用C#和Google Drive API连接到我的Google云端硬盘,然后将其映射为网络或本地硬盘。还有其他程序,我知道这样做NetDrive(这是非常有用和强大的),但我希望自己创建一些东西。我在开发人员控制台中创建了一个项目,并且能够使用我的应用程序连接到Drive并执行各种读取和上载操作,因此我知道特定部分是可以的。似乎都设置了访问权限和权限。在将该存储映射为Windows中的可用驱动器时,我根本不知道从哪里开始。任何建议都会有所帮助,非常感谢!

2 个答案:

答案 0 :(得分:2)

实施NetDrive / WebDrive类型的解决方案有两个基本组件。您正在研究的是创建可安装文件系统和网络提供程序。

网络提供程序或NP是处理网络层的用户模式组件,包括驱动器号的映射和取消映射,以及许多其他相当复杂的UNC /网络内容。要了解您的用途,请查看Win32 WNET *()API;你需要专门为你的IFS和'网络'实现所有的WNet()调用。

完成后,您可能有能力在DOS中执行“net use \ MyWebDrive”,在Windows资源管理器中执行Map Network Drive。您也可以使用Windows资源管理器来枚举远程文件系统的内容。

但是,现在您需要确保所有第三方应用程序都可以访问您的网络驱动器...为此,您要实现Win32文件系统API,例如CreateFile,Read(),Write(), CloseHandle(),FindFirst()等

为此,您可以编写可安装文件系统驱动程序FSD,以处理来自用户模式应用程序的所有I / O调用,这些应用程序希望读取/写入该映射网络驱动器上的文件。这很可能是一个内核模式应用程序......一个签名/认证的文件系统设备驱动程序....可能是用旧式C编写的,甚至可能根据你想要的网络IO使用TDI。

微软对安装第三方内核模式驱动程序和网络提供商的要求越来越严格。现在,使用基于Microsoft的TLS证书安全地签署了WebDrive文件系统驱动程序,并且我们的网络提供程序已在Microsoft Windows SDK团队中注册为Windows平台的合法网络提供程序。

一旦你得到这些部分,你就会想到缓存。通过NP / FSD直接通过线路连接到Google的I / O是不切实际的,因此您需要在本地驱动器上安装中间缓存系统。有很多方法可以做到这一点,太多了不能进入这里。但是,请记住,您可能有多个用户模式应用程序同时读取和写入您的网络驱动器(或者一个应用程序,如WinWord打开多个文件句柄),您需要能够正确处理所有这些请求锁定和ACL,然后将这些更改和访问规则映射到远程服务器。

不要失去信心......正如WebDrive和NetDrive所展示的那样,您可以做的事情是可能的,但这并不是一个可以在几个周末被淘汰的项目。我不确定NetDrive的作者,但我们自1997年以来一直在全职开发WebDrive。似乎每个Windows补丁都会改变一些东西,每个新版本的Adobe / Office / XYZ都会做出一些奇怪的IO调用让我们把头发拉出来。

注意:还有另一种实现这种野兽的方法可能绕过FSD,这就是DropBox策略。使用本地硬盘驱动器上的临时文件夹,利用用户模式应用程序中的目录更改通知来监视文件夹中的文件更改,并动态地将更改同步到远程端。 GoogleDrive和许多其他在线存储公司都是这样做的,因为它快速且易于使用;但是,如果在短时间内发生许多更改,则Windows Messaging中的更改通知可能会丢失,并且数据可能会被删除。

我意识到这需要消化很多,但它是可行的......这很酷;祝你好运!

答案 1 :(得分:0)

我建议您在开始编码之前,花些时间彻底了解Google云端硬盘并将其功能映射到Windows或从Windows映射。一些阻抗采样点: -

    驱动器中的
  • 文件夹根本不是
  • 文件夹
  • Drive中的文件=元数据,内容是可选的
  • 云端硬盘包含大量未映射到NTFS的元数据(例如属性)
  • 是否将适用的文件转换为Google文档,或按原样存储
  • 您将如何映射修订
  • 权限

几乎肯定会有更多,这只是我的头脑。您的应用需要就所有这些方面做出决策。通常,Drive提供的功能比NTFS更多,因此如果您只是将它用作备份存储库,那么您应该没问题。