阅读:1525回复:6
CDB的问题
我把filter加到disk.sys下面,只能截到IRP_MJ_INTERNAL_DEVICE_CONTROL,但听说可以通
过访问cdb[0]来得知是否是读写IRP,是这样吗?那我应该在filter里如何访问到cdb[0]呢?它在IRP的哪个域呢? 多谢指点! |
|
沙发#
发布于:2004-09-09 12:42
cdb[0]
??? |
|
板凳#
发布于:2004-09-09 19:22
是CDB[0]
|
|
地板#
发布于:2004-09-09 23:36
PCDB cdb;
PSCSI_REQUEST_BLOCK srb; int OpCode; PIO_STACK_LOCATION currentIrpStack = IoGetCurrentIrpStackLocation(Irp); srb = currentIrpStack->Parameters.Scsi.Srb; cdb = srb->Cdb; OpCode = Cdb->CDB6GENERIC.OperationCode; 如果OpCode为SCSIOP_READ或SCSIOP_READ6, 读操作 如果OpCode为SCSIOP_WRITE或SCSIOP_WRITE6, 写操作 如果你只filter disk.sys, 一般是SCSIOP_READ和SCSIOP_WRITE |
|
地下室#
发布于:2004-09-10 10:01
PCDB cdb; 太感谢了!!! |
|
5楼#
发布于:2004-09-13 20:20
PCDB cdb;
PSCSI_REQUEST_BLOCK srb; srb = currentIrpStack->Parameters.Scsi.Srb; cdb = srb->Cdb; 这条赋值语句好像类型不匹配吧? 我做了如下的声明 UCHAR cdb[16]; 然后再赋值,这样的话u盘插上时filter加载系统重启,我在 softice中看到:Break due to page fault(0Eh) fault=0000 这是什么原因呢? 多谢啊!! 还有一个softice的使用问题: 比如我在e盘build生成一个驱动程序,之后我把它考到c盘drivers目录下,然后我再调用softice的symbol loader 打开这个驱动,然后translate,然后ctrl+d,输入file,为什么显示no symbol table呢?我也选中package source with symbol table 了。 是不是它找不到源文件的路径了呢?可我看到有关的使用说明说如果是check版本的就不用另外指定源文件路径了阿? 大家帮忙啊!!!无法找到源文件是不是就意味着无法设置断点了呢? [编辑 - 9/13/04 by woodoar] [编辑 - 9/13/04 by woodoar] |
|
6楼#
发布于:2004-09-14 22:52
类型不匹配,强制转换一下就可以了。
cdb = (PCDB)srb->Cdb; 您老不会声明了UCHAR cdb[16]后,还用cdb = srb->Cdb吧? 请仔细看看scsi.h和srb.h中关于SCSI_REQUEST_BLOCK和CDB的定义。 关于那个SOFTICE的问题,你在TRANSLATE以后要把你的SYMBOL TABLE加载一下的。SYMBOL LOADER不会给你自动加载的 |
|