阅读:1321回复:4
98下的虚拟光驱中读写扇区
诸位可能已经知道做一个虚拟的磁盘PDR,假如是FAT或FAT32,
可以在内寸中模拟出他的磁盘信息,系统会依次读出信息,象RAMDISK, 但是在虚拟光驱中,怎么光驱的信息只在映象文件如ISO中,怎么办? |
|
沙发#
发布于:2002-06-01 21:57
cdrom only support cdfs ( for extend driver, support udf).
the sector size is fix for isso9660 . 2048. for cd-ma , mpeg2, the size of sector is a little different. but never over 2352. a standard iso file only support one session - one track format cdrom media. it is arranged as 2352 * last_lba. just think you media is a iso9660 form1 or form2 media.(no XA) so if it ask data from Lba=n(from 0). you should get data from iso by shift 2352 * n. then skip first 16 bytes for data mode 1 ( skip first 24 bytes.for mode2) [编辑 - 6/1/02 by zdhe] |
|
板凳#
发布于:2002-06-01 22:16
iso及ISO文件我是比较了解了,不知道您有没有看过本站实现虚拟光驱的代码,汇编的,我和他做的原理相同,只不过我用C,
我的问题是在响应IOR_READ时候,我按ISO文件中逻辑顺序数据读给它 它并不能正常使用。比如它读0扇区我就把文件0--2048读给它, 在2000中就可以正常实现,不知道为什么 |
|
地板#
发布于:2002-06-01 23:04
take care of data.
---------- so if it ask data from Lba=n(from 0). you should get data from iso by shift 2352 * n. then skip first 16 bytes for data mode 1 ( skip first 24 bytes.for mode2) ---------- and i think win2k does not support mpr(LE format). the realizatin must be quite diffirent.you can not simplely compare win2k driver and win9x driver. |
|
地下室#
发布于:2002-06-03 10:29
谢谢您的答复,我和本站的虚拟光驱一样的实现,我还是有几点不明白,
1,按理论,9X下的的文件系统里,CD最下面是MPD,它的上层有CDFS,但是我不了解 系统依据什么来把的驱动放到CDFS之下,是在声明设备里DRP_MISC_PD?还是因为 指定类型DCB_type_cdrom? 2,我用C实现的一样的PDR,在IOR_READ时候它只是读0,1,6扇区,和FAT类似, 但是在ISO镜象文件中,前16个扇区数据都是0,我不知道给它什么数据, 3,在得到的IOR_GEN_IOCTL中只有0X440D的及DOS21中断,没有代码中的CD_** 之类的请求,不知道为什么? 谢谢您! |
|