lidr2002
驱动牛犊
驱动牛犊
  • 注册日期2002-12-16
  • 最后登录2004-09-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2287回复:12

虚拟出来的磁盘在格式化时,怎样可以拦截到?

楼主#
更多 发布于:2003-02-24 18:18
我用FileDisk虚拟出来的磁盘,在格式化时,我想做一些额外的工作:
1)先将用来虚拟的文件清0,然后再进行格式化。
2)我还想在格式化的时候,在用来虚拟的文件头空出10k个字节。

请高手帮帮忙。

谢谢!
luxs200
驱动牛犊
驱动牛犊
  • 注册日期2001-07-23
  • 最后登录2015-03-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-02-24 18:45
在格式化的时候,系统首先会UNMOUNT你虚拟的卷,截获UNMOUNT
 IRP包,然后再做下面的事情.
lidr2002
驱动牛犊
驱动牛犊
  • 注册日期2002-12-16
  • 最后登录2004-09-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-02-25 08:50
谢谢!
请讲一下格式化时程序的执行过程。
(我想:在格式化时,应该把格式化的信息写入那个文件中,这样我就可以在调用ZwWriteFile和ZwReadFile之前处理一下文件当前的读写位置――加一个偏移量)请问这个想法有问题吗?
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-02-25 12:34
1)先将用来虚拟的文件清0,然后再进行格式化。
 -> 除非快速格式化,否则格式化会自行清0

2)我还想在格式化的时候,在用来虚拟的文件头空出10k个字节。
 -> 加一个偏移量可行,但必须是该虚拟文件所在逻辑盘扇区大小的整数倍
lidr2002
驱动牛犊
驱动牛犊
  • 注册日期2002-12-16
  • 最后登录2004-09-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-02-25 13:14
谢谢!
1,如果加偏移量,我必须在 对虚拟文件进行读和写的所有地方进行偏移量处理。

但在filedisk.c文件中只有线程函数的IRP_MJ_READ:和IRP_MJ_WRITE:处有读写操作,而且这两个位置的读写不是可逆的。

请问:读写虚拟文件都有那些地方?

2,在格式化时,我如何拦截虚拟文件读写操作?

感谢!
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-02-25 14:31
那个线程里的IRP_MJ_READ/WRITE就是读写的全部,没有别的地方
lidr2002
驱动牛犊
驱动牛犊
  • 注册日期2002-12-16
  • 最后登录2004-09-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-02-25 14:55
但是我遇到下面两个问题:
1,我在IRP_MJ_READ/WRITE处设断点,然后格式化,程序没有运行到断点处。
2,1)我用32M的a文件(已经清0),虚拟成f:,然后格式化。
   2)Umount f盘;
   3)把文件a里的所有数据与0xDD异或;
   4)修改filedisk.c处理IRP_MJ_READ/WRITE,使读写时把从a文件读或写的数据与0xDD异或,从新编译;
   5)加载a文件到f盘;
   6)在f盘上进行新建文档和目录;

   经过以上操作之后,发现:
   1)刚开始使用正常;
   2)反复读写文件后,目录开始混乱,并不可以在使用。
   3)卸载后,查看a文件发现里面的数据少执行了一次异或操作。
  
   所以我觉得还应该有其他地方对文件进行了读写操作。

  请指教, 谢谢!
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-02-25 17:35
你不是用的sparse文件吧?sparse不能直接异或
lidr2002
驱动牛犊
驱动牛犊
  • 注册日期2002-12-16
  • 最后登录2004-09-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-02-25 17:51
1,我是用UEdit做的文件。
2,即使我不进行异或处理,format时,IRP_MJ_READ/WRITE处的断点也不会被执行,这说明format时的文件读写肯定不是在IRP_MJ_READ/WRITE中进行的。
3,我用SoftICE在format时可以拦截到ZwWriteFile操作。
birch2002
驱动牛犊
驱动牛犊
  • 注册日期2003-01-16
  • 最后登录2003-05-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-02-25 18:48
我现在也在看这东西啊,我也又点不懂,能不能聊聊啊,我的QQ是15622711
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-02-26 09:52
怎么可能没停住啊???你是用Softice么?

Format到了底层就是变成read/write
具体的Format操作是FSD实现的,Storage Driver不管这事,只负责读写
lidr2002
驱动牛犊
驱动牛犊
  • 注册日期2002-12-16
  • 最后登录2004-09-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-02-26 10:14
1,确实没有停住,我的断点是用DbgBreakPoint做的。
2,我如果用在虚盘上建文件或目录或浏览虚盘,在断点处就会停下。
3,我用的是SoftIce, 驱动程序是用DriverMonitor启动的。
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-02-26 10:55
哦,这样啊
可能什么地方出了问题,我在read/write 加了DbgPrint,Format时能看见
游客

返回顶部