czcty
驱动牛犊
驱动牛犊
  • 注册日期2004-11-04
  • 最后登录2006-11-08
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
阅读:1865回复:6

usb只读过滤驱动问题

楼主#
更多 发布于:2005-06-01 22:12
我根据 http://www.driverdevelop.com/forum/html_90057.html?1117634851  做了如下代码:

case IRP_MJ_INTERNAL_DEVICE_CONTROL:
//case IRP_MJ_SCSI:

// peter add
CurSrb = ExAllocatePoolWithTag(NonPagedPool,
sizeof(SCSI_REQUEST_BLOCK),
DISK_TAG_SRB);
if (CurSrb == NULL) {
DBGOUT((\"no\"));
}else{
DBGOUT((\"ok\"));
}
RtlZeroMemory(CurSrb, SCSI_REQUEST_BLOCK_SIZE);
CurSrb=irpSp->Parameters.Scsi.Srb;
cdb = (PCDB)CurSrb->Cdb;
opCode=cdb->CDB6GENERIC.OperationCode;
if(opCode==SCSIOP_MODE_SENSE && CurSrb->DataBuffer && CurSrb->DataTransferLength >= sizeof(MODE_PARAMETER_HEADER) )
{
DBGOUT((\"test\"));
modeData = (PMODE_PARAMETER_HEADER)CurSrb->DataBuffer;
modeData->DeviceSpecificParameter|=MODE_DSP_WRITE_PROTECT;
}
DBGOUT((\"OperationCode1 (%x)\", cdb->CDB6GENERIC.OperationCode ));
// peter add end

问题是 cdb->CDB6GENERIC.OperationCode 的植始终是 0,进不了if 里面,正确情况是1a ,请指点为什么?
czcty
驱动牛犊
驱动牛犊
  • 注册日期2004-11-04
  • 最后登录2006-11-08
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-06-02 12:05
各位帮个忙,我在等待...
czcty
驱动牛犊
驱动牛犊
  • 注册日期2004-11-04
  • 最后登录2006-11-08
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-06-02 12:57
得到  opCode==EC 和 opCode==30,但是就是没有1A
郁闷,为什么?
czcty
驱动牛犊
驱动牛犊
  • 注册日期2004-11-04
  • 最后登录2006-11-08
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-06-02 13:38
出现的 opCode  值 (56) ,(30),(6C) ,每次出现的不确定,奇怪
nobounded
驱动小牛
驱动小牛
  • 注册日期2003-08-14
  • 最后登录2011-07-07
  • 粉丝0
  • 关注0
  • 积分360分
  • 威望258点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-07-16 13:11
RtlZeroMemory(CurSrb, SCSI_REQUEST_BLOCK_SIZE);
CurSrb=irpSp->Parameters.Scsi.Srb;
cdb = (PCDB)CurSrb->Cdb;
这一段好像有问题吧,你只是改了CurSrb指针的指向而已,没有用你分配出来的内存啊。
至于值为什么是0还有奇怪的值,是你测试的问题吧。
doslin
驱动牛犊
驱动牛犊
  • 注册日期2005-07-17
  • 最后登录2010-10-22
  • 粉丝0
  • 关注0
  • 积分29分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-08-08 16:43
cdb ,opCode的类型是什么喃?
doslin
驱动牛犊
驱动牛犊
  • 注册日期2005-07-17
  • 最后登录2010-10-22
  • 粉丝0
  • 关注0
  • 积分29分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-08-08 19:11
PSCSI_REQUEST_BLOCK CurSrb=
                            pIrpStack->Parameters.Scsi.Srb;

                     PCDB cdb = (PCDB)CurSrb->Cdb;
                    
                     UCHAR opCode=cdb->CDB6GENERIC.OperationCode;
                     if(opCode==SCSIOP_MODE_SENSE
                            && CurSrb->DataBuffer &&
                            CurSrb->DataTransferLength >= sizeof(MODE_PARAMETER_HEADER))
                     {
                            
                            PMODE_PARAMETER_HEADER modeData =
                                   (PMODE_PARAMETER_HEADER)CurSrb->DataBuffer;
                            modeData->DeviceSpecificParameter|=MODE_DSP_WRITE_PROTECT;
                     }
游客

返回顶部