为什么得不到SCSI 命令12 INQUIRY?

mh2488   2010-6-15 14:33 楼主
改的WDK上的diskperf例子,看到在

    if (irpStack->MajorFunction==IRP_MJ_INTERNAL_DEVICE_CONTROL)
    {
        //DbgPrint(("liushuanglin tested for cdb ############################"));

        CurSrb=irpStack->Parameters.Scsi.Srb;
        cdb = (PCDB)CurSrb->Cdb;
        
        opCode=cdb->CDB6GENERIC.OperationCode;
        iqCode = cdb->CDB6INQUIRY.OperationCode;
        //gPrint("======================r cdb : %x\n", iqCode);
        if (opCode==SCSIOP_MODE_SENSE)
        {
            DbgPrint("观察:进入U盘写保护\n");
            modeData = (PMODE_PARAMETER_HEADER)CurSrb->DataBuffer;
            if( IsReadOnly )
            {
                DbgPrint("U盘写保护\n");
                modeData->DeviceSpecificParameter |= MODE_DSP_WRITE_PROTECT;
            }
        }
        //liushuanglin added for capture 12 begin
        if(iqCode == 12 ){

            DbgPrint(("---------------capture 12 code \n"));
            inquiryDate= (PINQUIRYDATA)CurSrb->DataBuffer;
            DbgPrint("---------------inquiry data device type=%d\n",inquiryDate->DeviceType);
            
        }
        iqCode = cdb->CDB6INQUIRY3.OperationCode;
        DbgPrint("@@@@@@@@@@@@@@@@@@@@@@@@@liushuanglin tested for cdb : %x\n", iqCode);

        

        //liushuanglin added for capture 12 end
    }


为啥得不到12,看到dbgview里面能得到25,28,0这些SCSI,为啥得不到12呢?

回复评论 (6)

没用过该例子。

但是看了WDK, INQUIRY命令应该是通过IRP_MJ_DEVICE_CONTROL/IOCTL_SCSI_GET_INQUIRY_DATA来获取的。

所以,有可能是你的跟踪代码加的地方不对,不应该监控irpStack->MajorFunction==IRP_MJ_INTERNAL_DEVICE_CONTROL下的命令。
点赞  2010-6-15 17:42
这个驱动是加到了类的lowerfilters,不是应用发的啊
点赞  2010-6-15 18:15
即使是Lower Level Filter Driver,也可以过滤IRP_MJ_DEVICE_CONTROL啊。你过滤一下IRP_MJ_DEVICE_CONTROL看看,确认一下。
点赞  2010-6-15 22:02
难道所有的SCSI不是在一起处理的吗
点赞  2010-6-15 22:26
不清楚啊
点赞  2010-6-16 11:27
你可以Filter一下IOCTL_STORAGE_QUERY_PROPERTY。

Only Plug and Play drivers can issue IOCTL_STORAGE_QUERY_PROPERTY requests. Legacy driver should use IOCTL_SCSI_GET_INQUIRY_DATA and IOCTL_SCSI_GET_CAPABILITIES to get inquiry and capabilities data.

"难道所有的SCSI不是在一起处理的吗"
->没有这样的硬性规定。不同的SCSI命令会有不同的处理方式和发生时间。
点赞  2010-6-18 23:15
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复