阅读:2287回复:12
虚拟出来的磁盘在格式化时,怎样可以拦截到?
我用FileDisk虚拟出来的磁盘,在格式化时,我想做一些额外的工作:
1)先将用来虚拟的文件清0,然后再进行格式化。 2)我还想在格式化的时候,在用来虚拟的文件头空出10k个字节。 请高手帮帮忙。 谢谢! |
|
沙发#
发布于:2003-02-24 18:45
在格式化的时候,系统首先会UNMOUNT你虚拟的卷,截获UNMOUNT
IRP包,然后再做下面的事情. |
|
板凳#
发布于:2003-02-25 08:50
谢谢!
请讲一下格式化时程序的执行过程。 (我想:在格式化时,应该把格式化的信息写入那个文件中,这样我就可以在调用ZwWriteFile和ZwReadFile之前处理一下文件当前的读写位置――加一个偏移量)请问这个想法有问题吗? |
|
地板#
发布于:2003-02-25 12:34
1)先将用来虚拟的文件清0,然后再进行格式化。
-> 除非快速格式化,否则格式化会自行清0 2)我还想在格式化的时候,在用来虚拟的文件头空出10k个字节。 -> 加一个偏移量可行,但必须是该虚拟文件所在逻辑盘扇区大小的整数倍 |
|
地下室#
发布于:2003-02-25 13:14
谢谢!
1,如果加偏移量,我必须在 对虚拟文件进行读和写的所有地方进行偏移量处理。 但在filedisk.c文件中只有线程函数的IRP_MJ_READ:和IRP_MJ_WRITE:处有读写操作,而且这两个位置的读写不是可逆的。 请问:读写虚拟文件都有那些地方? 2,在格式化时,我如何拦截虚拟文件读写操作? 感谢! |
|
5楼#
发布于:2003-02-25 14:31
那个线程里的IRP_MJ_READ/WRITE就是读写的全部,没有别的地方
|
|
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文件发现里面的数据少执行了一次异或操作。 所以我觉得还应该有其他地方对文件进行了读写操作。 请指教, 谢谢! |
|
7楼#
发布于:2003-02-25 17:35
你不是用的sparse文件吧?sparse不能直接异或
|
|
8楼#
发布于:2003-02-25 17:51
1,我是用UEdit做的文件。
2,即使我不进行异或处理,format时,IRP_MJ_READ/WRITE处的断点也不会被执行,这说明format时的文件读写肯定不是在IRP_MJ_READ/WRITE中进行的。 3,我用SoftICE在format时可以拦截到ZwWriteFile操作。 |
|
9楼#
发布于:2003-02-25 18:48
我现在也在看这东西啊,我也又点不懂,能不能聊聊啊,我的QQ是15622711
|
|
10楼#
发布于:2003-02-26 09:52
怎么可能没停住啊???你是用Softice么?
Format到了底层就是变成read/write 具体的Format操作是FSD实现的,Storage Driver不管这事,只负责读写 |
|
11楼#
发布于:2003-02-26 10:14
1,确实没有停住,我的断点是用DbgBreakPoint做的。
2,我如果用在虚盘上建文件或目录或浏览虚盘,在断点处就会停下。 3,我用的是SoftIce, 驱动程序是用DriverMonitor启动的。 |
|
12楼#
发布于:2003-02-26 10:55
哦,这样啊
可能什么地方出了问题,我在read/write 加了DbgPrint,Format时能看见 |
|