发个基于网络的虚拟盘
本帖最后由 364589886 于 2010-6-24 21:24 编辑代码嘛,就不发了这个是基于网络的虚拟盘,也就是将网络上某台电脑上的某分区虚拟为本地分区,系统将此分区和真实本地磁盘分区一样对待,绝对不同于通过网上邻居的共享方式
另外,客户机要求至少有一个分区是NTFS,然后把client里的i8Disk.ini里的C:\调整为此分区 不错.
以前玩过ISCSI网络存储,确实比较方便.
后来知道其原理是在驱动里传输基本IO指令,从而实现透明的网络存储.
会驱动的话真的很好啊......HOHO 回复 2# 马大哈
这个不是基于ISCSI的,就是生成了一个磁盘卷,然后利用TDI发起网络通信,传送请求给服务端,然后服务端返回数据,然后驱动再把数据返回给应用层
这个只是虚拟出了一个分区,SCSI的话可以虚拟出一个磁盘设备出来。不过要是SCSI的话,就要自己写个总线驱动了,这个相对麻烦些 另外,这个驱动虚拟出的盘,是将写操作的数据写在本地的临时文件的,不会去操作服务器上的真实磁盘分区,所以不用担心服务器上的数据安全问题了。。。。之所以要求客户端有至少一个NTFS分区,是因为这个临时文件是稀疏文件(大小和被虚拟的分区一样,但实际占用磁盘空间是写多少数据才占用多少的,这个主要为了查找被写过的数据时方便,因为个文件的每字节偏移与真实磁盘一一对应),必须要NTFS支持 回复 4# 364589886
这么说来,这种方式是与万象最初版的虚拟硬盘是一样的,省去了一套管理机制,代码相对容易,但是好象兼容性不理想
当时我研究ISCSI时也用过万象的,不支持2003.
不过后来就可以支持了,看其结构,已经虚拟了一个设备出来.
这种网络存储很有市场,如果能做得好的话.
我要是当时能有你的水平,估计现在也已经做了一个比较好的游戏更新系统啦,哈哈. 不错,关注 回复 5# 马大哈
老马,把那个everyone的水晶币转给我嘛,都一千多了
哈哈哈哈哈哈哈哈哈 我不清楚wx一开始怎么搞的
但这个虚拟盘没你说的那个限制
就是IoCreateDevice(...............FILE_DEVICE_DISK....................................)
这样就生成了一个磁盘设备栈
然后再在应用层DefineDosDevice出一个盘符就可以了
然后驱动里对IRP_MJ_READ和IRP_MJ_WRITE进行处理 ISCSI也就是基于网络的SCSI协议
SCSI的磁盘,总线驱动负责处理数据读写问题(比如从真实物理磁盘读写,或者从网络获取数据),上层的驱动处理读写请求,二者之间通过SCSI协议通讯
我的这个虚拟盘,就相当于上层的这个驱动,并且自己处理了所有的读写请求和处理数据的工作,所以就不需要那个总线驱动,但这样做的后果就是,虚拟出的是一个分区 回复 7# 364589886
你都也7XX了,哈哈.
话说回来,以前万象刚开始时也是没有虚拟设备,好象连驱动都没有的.
那时候的我比现在更菜,根本不知道是什么原因,反正2003不支持.
而我当时为了磁盘系统性能的原因给所在的网吧装的是2003系统,结果就换了网众的.
现在想想,有可能是DefineDosDevice一个盘符,再在RING3下直接进行ReadFile与WriteFile等API的HOOK.
这样可以连驱动都不需要.
不过话又说回来,当时的万象技术还很菜,哈哈.
但是...话又再说回来,即使是当时的万象,也比现在的我强啦,哇哈哈哈哈.....
页:
[1]