OS_Dev
驱动中牛
驱动中牛
  • 注册日期2002-01-09
  • 最后登录2004-03-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1188回复:3

一个关于virtual cd-rom的问题!

楼主#
更多 发布于:2002-02-22 15:23
在对付保护光盘时, 他采用了一种技术在扇区标准之间加入一个byte,然后后面的数据后移,我要读它就需要还原成标准格式,必须去掉哪个庸余的字节,然后把后边的数据都前移一个byte.
我现在用的是Direct Buffer方式 fdo->Flags|=DO_DIRECT_IO;读取数据,然而系统一个PAGE_SIZE 是4K,而光盘扇区一个是2K,所以我一次读取最小粒度是4K,而这包含了两个光盘扇区,和中间的一个庸余字节,当我用Retcopymemery(),这个这样我就page falut exception。
所以我想在读的时候如何能够不对中间那个byte读。

各位有什么指点?
I know nothing!
skysky
驱动小牛
驱动小牛
  • 注册日期2001-07-18
  • 最后登录2003-06-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-02-25 15:59
是2048+1+2048吗?
以德服人,以德服人
liuyan1
驱动老牛
驱动老牛
  • 注册日期2001-08-27
  • 最后登录2023-04-18
  • 粉丝0
  • 关注0
  • 积分1031分
  • 威望477点
  • 贡献值0点
  • 好评度187点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2002-02-25 17:50
高手!是的呀,就是这样的情况有办法解决吗?中间哪个字节是不要的,删除它该如何做?如何操作才能修改被直接锁定的4k页内的数据呢?



谢谢谢谢,希望指教,如果知道,跟您作揖了<<<<<
楼上的客,楼下的客,听我老坎说明白,要苛屎有草纸,不要扯我的麦席子,要苛尿有夜壶,不要在床上划地图。
zdhe
驱动太牛
驱动太牛
  • 注册日期2001-12-26
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分72362分
  • 威望362260点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2002-02-26 18:30
if you develop your own cdrom driver(like virtual cdrom), of course you can do what you want .

if you only want read this type of media in a common cdrom or exist virtual cdrom, ou need to make a filter driver, realize you filter driver irp_mj_read dispatch routine like following way:

1.analysis read request (if it data mode 1, offset,size will be aligned to 2048 , if data mode  , it should be 2336)
2.change orignal request to lba  or msf(raw data is 2352 alignment, commonly you need not get subcode area)
3.allocate new irp/mdl and set device io control to IOCTL_CDROM_RAW_READ (build scsi command and set opcode to scsi_op_read_cd  is better, but a little difficult)
4. send it to lower driver
5. get data if success, copy what you want back to user buffer. (when copy , of course you can skip that dummy one byte)
6. free mdl, your allocated irp and complete original request

in 9x/Me, it should be a layer driver.
in 2k/xp, it\'s only a common filer driver.



游客

返回顶部