找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 5936|回复: 9

发个基于网络的虚拟盘

 火.. [复制链接]

23

主题

117

回帖

1

精华

银牌会员

积分
400
发表于 2010-6-23 09:26:30 | 显示全部楼层 |阅读模式
本帖最后由 364589886 于 2010-6-24 21:24 编辑

分布式存储.rar (188.37 KB, 下载次数: 12, 售价: 10 水晶币) 出盘工具k.rar (46.7 KB, 下载次数: 19, 售价: 10 水晶币) 代码嘛,就不发了这个是基于网络的虚拟盘,也就是将网络上某台电脑上的某分区虚拟为本地分区,系统将此分区和真实本地磁盘分区一样对待,绝对不同于通过网上邻居的共享方式
另外,客户机要求至少有一个分区是NTFS,然后把client里的i8Disk.ini里的C:\调整为此分区

评分

参与人数 4水晶币 +134 +144 收起 理由
本网站最菜的人 + 10 + 20 膜拜
阿杰 + 44 + 44
HoviDelphic + 40 + 40 ~~~
马大哈 + 40 + 40

查看全部评分

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2010-6-24 21:41:22 | 显示全部楼层
不错.

以前玩过ISCSI网络存储,确实比较方便.

后来知道其原理是在驱动里传输基本IO指令,从而实现透明的网络存储.

会驱动的话真的很好啊......HOHO
我就是嗷嗷叫的老马了......

23

主题

117

回帖

1

精华

银牌会员

积分
400
 楼主| 发表于 2010-6-27 11:24:36 | 显示全部楼层
回复 2# 马大哈


    这个不是基于ISCSI的,就是生成了一个磁盘卷,然后利用TDI发起网络通信,传送请求给服务端,然后服务端返回数据,然后驱动再把数据返回给应用层

    这个只是虚拟出了一个分区,SCSI的话可以虚拟出一个磁盘设备出来。不过要是SCSI的话,就要自己写个总线驱动了,这个相对麻烦些

23

主题

117

回帖

1

精华

银牌会员

积分
400
 楼主| 发表于 2010-6-27 11:32:05 | 显示全部楼层
另外,这个驱动虚拟出的盘,是将写操作的数据写在本地的临时文件的,不会去操作服务器上的真实磁盘分区,所以不用担心服务器上的数据安全问题了。。。。之所以要求客户端有至少一个NTFS分区,是因为这个临时文件是稀疏文件(大小和被虚拟的分区一样,但实际占用磁盘空间是写多少数据才占用多少的,这个主要为了查找被写过的数据时方便,因为个文件的每字节偏移与真实磁盘一一对应),必须要NTFS支持

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2010-6-27 12:01:37 | 显示全部楼层
回复 4# 364589886

这么说来,这种方式是与万象最初版的虚拟硬盘是一样的,省去了一套管理机制,代码相对容易,但是好象兼容性不理想

当时我研究ISCSI时也用过万象的,不支持2003.

不过后来就可以支持了,看其结构,已经虚拟了一个设备出来.

这种网络存储很有市场,如果能做得好的话.

我要是当时能有你的水平,估计现在也已经做了一个比较好的游戏更新系统啦,哈哈.

76

主题

375

回帖

0

精华

铜牌会员

积分
231
发表于 2010-6-27 13:45:52 | 显示全部楼层
不错,关注

23

主题

117

回帖

1

精华

银牌会员

积分
400
 楼主| 发表于 2010-6-27 16:06:41 | 显示全部楼层
回复 5# 马大哈

老马,把那个everyone的水晶币转给我嘛,都一千多了
哈哈哈哈哈哈哈哈哈

23

主题

117

回帖

1

精华

银牌会员

积分
400
 楼主| 发表于 2010-6-27 16:12:22 | 显示全部楼层
我不清楚wx一开始怎么搞的
但这个虚拟盘没你说的那个限制
就是IoCreateDevice(...............FILE_DEVICE_DISK....................................)
这样就生成了一个磁盘设备栈
然后再在应用层DefineDosDevice出一个盘符就可以了
然后驱动里对IRP_MJ_READ和IRP_MJ_WRITE进行处理

23

主题

117

回帖

1

精华

银牌会员

积分
400
 楼主| 发表于 2010-6-27 16:18:16 | 显示全部楼层
ISCSI也就是基于网络的SCSI协议
SCSI的磁盘,总线驱动负责处理数据读写问题(比如从真实物理磁盘读写,或者从网络获取数据),上层的驱动处理读写请求,二者之间通过SCSI协议通讯
我的这个虚拟盘,就相当于上层的这个驱动,并且自己处理了所有的读写请求和处理数据的工作,所以就不需要那个总线驱动,但这样做的后果就是,虚拟出的是一个分区

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2010-6-27 23:07:28 | 显示全部楼层
回复 7# 364589886

你都也7XX了,哈哈.

话说回来,以前万象刚开始时也是没有虚拟设备,好象连驱动都没有的.

那时候的我比现在更菜,根本不知道是什么原因,反正2003不支持.

而我当时为了磁盘系统性能的原因给所在的网吧装的是2003系统,结果就换了网众的.

现在想想,有可能是DefineDosDevice一个盘符,再在RING3下直接进行ReadFile与WriteFile等API的HOOK.

这样可以连驱动都不需要.

不过话又说回来,当时的万象技术还很菜,哈哈.

但是...话又再说回来,即使是当时的万象,也比现在的我强啦,哇哈哈哈哈.....
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表