zhangjinsuo
驱动牛犊
驱动牛犊
  • 注册日期2002-10-08
  • 最后登录2005-04-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
20楼#
发布于:2002-12-03 13:57
我这个比较特殊,说什么只要有以前的DDK他就会出错(在Readme里特意写出来了不要装以前的DDK,而且它是ME&2K&XP版和在一起的)所以就来个一了百了卸了算了。DDK卸了之后DS也就好多都Build不过了因为IFSKIT少了好多头文件。
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
21楼#
发布于:2002-12-03 13:59
哦,可能我的IFSKIT版本比较老
zhangjinsuo
驱动牛犊
驱动牛犊
  • 注册日期2002-10-08
  • 最后登录2005-04-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
22楼#
发布于:2002-12-03 14:06
我想是的,老版本的是必须装DDK的。我的这个是从霉国刚刚带回来的$1000呀贵就一个字,我只说一次。 :)1CD+2DVDs
zhangjinsuo
驱动牛犊
驱动牛犊
  • 注册日期2002-10-08
  • 最后登录2005-04-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
23楼#
发布于:2002-12-03 14:08
我再按你说的方法试试,不行就还得请教你呀!我写Driver还是菜鸟级,你现在在哪里?
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
24楼#
发布于:2002-12-03 14:17
我不在北京,你可以在这问的,人多解决问题容易:)
zhangjinsuo
驱动牛犊
驱动牛犊
  • 注册日期2002-10-08
  • 最后登录2005-04-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
25楼#
发布于:2002-12-03 14:40
PDEVICE_OBJECT rawDeviceObject;
PFILE_OBJECT fileObject;

RtlInitUnicodeString(&UnicodeString, L\"\\\\Device\\\\CdRom0\");
ntStatus = IoGetDeviceObjectPointer(&UnicodeString, FILE_READ_DATA, &fileObject, &rawDeviceObject);

KeInitializeEvent(&event, NotificationEvent, FALSE);
SetupCDB(cdb);
SetupSRB(srb);
irp = IoBuildDeviceIoControlRequest(IOCTL_SCSI_PASS_THROUGH,rawDeviceObject,&srb, sizeof(SCSI_PASS_THROUGH_DIRECT),&srb, sizeof(SCSI_PASS_THROUGH_DIRECT),FALSE, &event, &ioStatus);

ntStatus = IoCallDriver(rawDeviceObject, irp);
if (ntStatus == STATUS_PENDING){
    KeWaitForSingleObject(&event, Suspended, KernelMode, FALSE, NULL);
    ntStatus = ioStatus.Status;
}
为什么他就重启动机器了?

[编辑 -  12/3/02 by  zhangjinsuo]
yymrhxf
驱动牛犊
驱动牛犊
  • 注册日期2002-08-07
  • 最后登录2011-10-25
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望4点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
26楼#
发布于:2002-12-03 14:51
不清楚.
不过你这里应该complete 这个request,而且KeWaitForSingleObject的第二个参数应该是Executive吧.
zhangjinsuo
驱动牛犊
驱动牛犊
  • 注册日期2002-10-08
  • 最后登录2005-04-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
27楼#
发布于:2002-12-03 15:14
按你说的改了一下问题依旧,你可知道哪里有读光盘扇区的完整源程序?
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
28楼#
发布于:2002-12-03 15:28
rawDeviceObject肯定不是NULL?
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
29楼#
发布于:2002-12-03 15:38
SetupCDB(cdb);
SetupSRB(srb);
irp = IoBuildDeviceIoControlRequest(IOCTL_SCSI_PASS_THROUGH,rawDeviceObject,&srb, sizeof(SCSI_PASS_THROUGH_DIRECT),&srb, sizeof(SCSI_PASS_THROUGH_DIRECT),FALSE, &event, &ioStatus);

-> 如果问题不在SetCDB/SetupSRB上,可能这有问题
IOCTL_SCSI_PASS_THROUGH_DIRECT:
Parameters.DeviceIoControl.InputBufferLength indicates the size in bytes of the buffer at Irp->AssociatedIrp.SystemBuffer, which must be at least (RequestSenseStorageSize + sizeof (SCSI_PASS_THROUGH_DIRECT)). The size of the SCSI_PASS_THROUGH_DIRECT structure is fixed

IOCTL_SCSI_PASS_THROUGH:
Parameters.DeviceIoControl.InputBufferLength indicates the size in bytes of the buffer at Irp->AssociatedIrp.SystemBuffer, which must be at least (RequestSenseStorageSize + sizeof (SCSI_PASS_THROUGH)). The size of the SCSI_PASS_THROUGH structure varies, depending on its DataTransferLength specification.

你怎么把IOCTL_SCSI_PASS_THROUGH和SCSI_PASS_THROUGH_DIRECT混在一起了?我没研究过RequestSenseStorageSize 是什么,但可能不是0吧?
zhangjinsuo
驱动牛犊
驱动牛犊
  • 注册日期2002-10-08
  • 最后登录2005-04-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
30楼#
发布于:2002-12-03 15:46
那可能是我帖贴子的时候弄错了,填写命令这部分不会有错因为我以前在Win32 app里边写过读盘的程序了,是抄过来的。只不过Win32使用CreateFile然后再DeviceIoControl而已。所以现在我总是怀疑我的Device创建的不对或者哪个地方调用的不对。
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
31楼#
发布于:2002-12-03 16:08
如果用的是IOCTL_SCSI_PASS_THROUGH_DIRECT
传入的memory必须是system memory
yymrhxf
驱动牛犊
驱动牛犊
  • 注册日期2002-08-07
  • 最后登录2011-10-25
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望4点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
32楼#
发布于:2002-12-03 16:15
关于你的device object:
在fs mount的时候,它作为一个参数被传进来: IrpSp->Parameters.MountVolume.DeviceObject;那时你应该把它保留在某个地方,比如vcb这个数据结构里面.

关于create device object,请参看ddk\\src\\storage\\class\\cdrom\\cdrom.c,里面有个CreateCdRomDeviceObject,而且scsi的检查也可以参考.

其实,仅仅读的话,在cdrom的class driver上用IoBuild  FsdRequest就够了,比这简单多了,不用考虑这么多细节.

另外,cd和dvd的读取命令和过程是一样的,二者并没有什么不同.
zhangjinsuo
驱动牛犊
驱动牛犊
  • 注册日期2002-10-08
  • 最后登录2005-04-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
33楼#
发布于:2002-12-03 16:17
那按你的意思该如何写IoBuildDeviceIoControlRequest呢?今天弄得我头都烫了明天再说吧。 唉破玩艺儿:)
yymrhxf
驱动牛犊
驱动牛犊
  • 注册日期2002-08-07
  • 最后登录2011-10-25
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望4点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
34楼#
发布于:2002-12-03 16:23
IoBuildDeviceIoControlRequest在cdrom class driver的源码里用的很普遍,你可以参考一下cdrom.c里面的方法. 祝你好运.
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
35楼#
发布于:2002-12-03 16:49
先问一下:你们这种DVD在写入的时候,是按照一个block一个block这样加密的吗?
如果是这样,就不用到File System里面做,直接在Storage Stack里面加一个Filter Driver,放在CDROM下面。这样,每次read的时候,你只要把对应的block解密即可。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
deltali
驱动小牛
驱动小牛
  • 注册日期2002-10-25
  • 最后登录2010-07-06
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望23点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
36楼#
发布于:2002-12-03 19:22
引用:
-----------------------------------------------------------
那可能是我帖贴子的时候弄错了,填写命令这部分不会有错因为我以前在Win32 app里边写过读盘的程序了,是抄过来的。只不过Win32使用CreateFile然后再DeviceIoControl而已。所以现在我总是怀疑我的Device创建的不对或者哪个地方调用的不对。
-----------------------------------------------------------
如果是这样的话,你先把ntStatus = IoCallDriver(rawDeviceObject, irp);这句话注释掉,看会不会出问题,如果没有的话,你在IoGetDeviceObjectPointer()函数成功返回后,调用一下IoAttachDeviceToDeviceStack()函数,恢复IoCallDriver()。
如果不行的话,就是你抄过来的程序有问题啦。
祝你好运!!
我又来了,生命不息,驱动不止。
zhangjinsuo
驱动牛犊
驱动牛犊
  • 注册日期2002-10-08
  • 最后登录2005-04-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
37楼#
发布于:2002-12-04 08:28
先问一下:你们这种DVD在写入的时候,是按照一个block一个block这样加密的吗?
如果是这样,就不用到File System里面做,直接在Storage Stack里面加一个Filter Driver,放在CDROM下面。这样,每次read的时候,你只要把对应的block解密即可。


我的DVD盘不是按照标准的ISO9660格式刻录的所以要对扇区进行判断然后再找到想要的数据,所以要这样做啊。
zhangjinsuo
驱动牛犊
驱动牛犊
  • 注册日期2002-10-08
  • 最后登录2005-04-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
38楼#
发布于:2002-12-04 08:34
多谢各位大哥!我再自己试一试。
特别感谢:
yymrhxf的一针见血指点
Coolice的热情帮助
以及liuyan1 、rayyang2000和deltali的参与
我是刚刚接触Driver就搞了这么一个玩艺儿,感觉有些力不从心,看来我还要多向大家学习呀!
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
39楼#
发布于:2002-12-04 18:04
我这个比较特殊,说什么只要有以前的DDK他就会出错(在Readme里特意写出来了不要装以前的DDK,而且它是ME&2K&XP版和在一起的)所以就来个一了百了卸了算了。DDK卸了之后DS也就好多都Build不过了因为IFSKIT少了好多头文件。


我今天刚拿到这个版本的IFSKIT,和已经安装的DDK不冲突啊,只有网上那个才会提示冲突。
游客

返回顶部