请教虚拟磁盘技术原理!!!

qibo999 2002-09-15 01:20:56
不知各位高手是否知道虚拟磁盘技术的原理?它是怎样实现的?我怎么也搞不明白,噢,分不够可以加啊
...全文
691 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
CityHost 2002-12-29
  • 打赏
  • 举报
回复
自己编写磁盘控制器
linyudie 2002-10-11
  • 打赏
  • 举报
回复
CCLIS(正职不明,业余编程),呵呵,"在WINDOWS里使用虚拟盘,也需要在CONFIG里进行设定",怎么设啊,我不明白,呜呜,惭愧,
"而COONFIG里的设定是在COMMAND.COM调用前就调用了,牵涉到很底层的东西,既要考虑到文件的句柄问题,还要考虑到DOS中的INT 13磁盘中断,"是指9x么??句柄??int 13??是vxd吧??我不大会,但是不好意思,想知道一下,:)
到底是什么意思,你是说挂接vxd得虚拟int13,然后写文件??可要是在command.com之前的话,你怎么能打开文件的啊,那时候系统还没有配好啊??不懂:(
linyudie 2002-10-11
  • 打赏
  • 举报
回复
呜呜,做好了,不过真的没有什么可说的,都是按照ddk一步步来的,在开始建立一个
FILE_DEVICE_DISK得设备,自定义一个IO控制码,用来打开文件,在IRP_MJ_READ,
IRP_MJ_WRITE的时候
ZwReadFile(...,MmGetSystemAddress,...),
ZwWriteFile(...,MmGetSystemAddress,...),你打开的文件,
不过打开和读写文件要放在一个线程函数,需要得时候用一个事件通知

大部分得控制码pIrp->IoStatus.Status=STATUS_SUCCESS,pIrp->IoStatus.Information=0就可以了结了:)
linyudie 2002-10-05
  • 打赏
  • 举报
回复
不好意思,病倒了,养了好几天病,呜呜,:)
csz_cmy(PIC&C51) ,我的现在已经可以用了,但是怎么弄成别的文件系统格式,我只能是fat16(不过可以用长文件名),我格式化的时候总是出错,说不能格式化,还有我要是把zwcreatefile和zwwritefile 分在irp_mj_deviceiocontrol和irp_mj_read/write里,file_disk_device的话就不行,错误码c00000024,0的个数可能不对,自己数吧,呵呵:)

害的我只好把他们放在一个线程了,呜呜:(
CCLIS 2002-10-05
  • 打赏
  • 举报
回复
好象WINDOWS里没有虚拟盘的概念,虚盘只是在DOS下使用的东东,在WINDOWS里使用虚拟盘,也需要在CONFIG里进行设定。

而COONFIG里的设定是在COMMAND。COM调用前就调用了,牵涉到很底层的东西,既要考虑到文件的句柄问题,还要考虑到DOS中的INT 13磁盘中断,呵呵,看来在WINDOWS下编写的难度有点高。

==================================================================
http://www.cclis.com
linyudie 2002-09-22
  • 打赏
  • 举报
回复
呜呜,那你还是先看看驱动程序吧,因为driver和application不一样的,你会看到一堆从没见过的概念,函数,roution,和一堆到处找不到的结构,地址也变得怪怪的,而且原来的C函数和API差不多一个也不能用了:(

对了,也不能用什么面向对象的方法(VTOOLS例外,那是专门封装的),讨厌死了,还不好调试(我用的是softice,而且一有错就是一个蓝屏,重启,烦啊,呜呜)

代码的话,我正好在写一个差不多的,顺利的话过几天帖一点(现在的还没有试呢,不知道又没有错)
csz_cmy 2002-09-22
  • 打赏
  • 举报
回复
我正在做......
kernelspirit 2002-09-22
  • 打赏
  • 举报
回复
高深,关注!
huzhangyou 2002-09-17
  • 打赏
  • 举报
回复
尤其有当停电时
内存的东西如何保存
huzhangyou 2002-09-17
  • 打赏
  • 举报
回复
同意xdspower的
这个问题真的很低层
可能你要对系统非常了解
TopCat 2002-09-17
  • 打赏
  • 举报
回复
我认为这主要是一个驱动程序的问题吧,大体思路应该这样:
驱动程序申请一块内存,然后实现磁盘操作的接口,在里面实现文件保存、删除之类的操作(当然是在那个内存里)等等,

没做过驱动,应该是这样一个思路吧。


============================================
★仗剑走江湖 小侠令狐虫★
============================================
毕加索的画 2002-09-17
  • 打赏
  • 举报
回复
有意思!
xdspower 2002-09-17
  • 打赏
  • 举报
回复
应该可以的,应该要设计驱动程序(毕竟有些操作比较底层)其实你可以想的就是把win的虚拟内存技术反着用
qibo999 2002-09-17
  • 打赏
  • 举报
回复
感谢各位的发言,我的意思是指动态磁盘映射:将内存或者什么映射成一个虚拟盘,并生成虚拟盘映射文件,动态修改映射文件。

这个技术真的很难吗?希望各位高手讨论一下,大家共同学习嘛!我想这应该属于VxD/WDM的概念吧,愿抛砖引玉。
qibo999 2002-09-17
  • 打赏
  • 举报
回复
谢谢 linyudie(linyudie)!
能否系统一点说明一下过程(尽量详细点啊),我没有接触过驱动编程,所以没有着方面经验,或者能给点原码、介绍点资料也行啊,多谢了!
linyudie 2002-09-17
  • 打赏
  • 举报
回复
写错了,第一句话是说用一个文件作为映射,因为在zwcreatefile的时候是要用的:)
linyudie 2002-09-17
  • 打赏
  • 举报
回复
用一个来做映射文件,而后做一个驱动程序,在DriverEntry里将那个文件建立为设备(设备类型一定要用file_disk_device,不要像平时那样使用unknow),实现全部的irp_mj_XXX(当然有irj_mn_XXX也别放过哦,呵呵),重要的是还要自己仿照硬盘虚拟出它的逻辑结构(就是柱面扇区的了),其实到可以用很大一部分系统自己的东西,比如很多irp是可以直接下传的,

不过TopCat说的实现文件保存、删除之类的操作是没有的,那些不属于设备驱动的部分,当建立正确的设备之后,有相应的高层fsd,过滤器驱动,类驱动去处理,我们要做的只是作为一个设备应当作的工作
qibo999 2002-09-17
  • 打赏
  • 举报
回复
我见过有好多应用了类似技术的软件,作过的朋友能否说说?也让大家学习学习?
qibo999 2002-09-17
  • 打赏
  • 举报
回复
我觉得内存的东西是动态保存的,它和一个硬盘映像文件建立关系,只是它们是怎么对应的,格式是什么,以及怎样不受物理内存大小限制?实在搞不明白,这里这么多业内高手,不会每人知道吧?
gfh21cn 2002-09-15
  • 打赏
  • 举报
回复
是阿,
每见识过这种技术
难度很大。
加载更多回复(2)

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧