阅读:3568回复:4
如何应用IOCTL_SCSI_PASS_THROUGH向USB设备发送控制命令???
现在要求采用IOCTL_SCSI_PASS_THROUGH方式向存储类设备发送控制命令,但是USB设备的命令请求老是出错,还望高手给予指点,谢谢!!
我的spt结构如下: sptwb.Spt.Length = sizeof(SCSI_PASS_THROUGH); sptwb.Spt.PathId = 0; sptwb.Spt.TargetId = 1; sptwb.Spt.Lun = 0; sptwb.Spt.CdbLength = CDB6GENERIC_LENGTH; sptwb.Spt.SenseInfoLength = 24; sptwb.Spt.DataIn = SCSI_IOCTL_DATA_IN; sptwb.Spt.DataTransferLength = 192; sptwb.Spt.TimeOutValue = 2; sptwb.Spt.DataBufferOffset = offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS,DataBuf); sptwb.Spt.SenseInfoOffset = offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS,SenseBuf); sptwb.Spt.Cdb[0] = SCSIOP_INQUIRY; sptwb.Spt.Cdb[1] = 0x08; sptwb.Spt.Cdb[2] = MODE_PAGE_CAPABILITIES; sptwb.Spt.Cdb[4] = 192; length = offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS,DataBuf) + sptwb.Spt.DataTransferLength; status = DeviceIoControl(hDevice, IOCTL_SCSI_PASS_THROUGH, &sptwb, sizeof(SCSI_PASS_THROUGH), &sptwb, length, &returned, FALSE); |
|
|
沙发#
发布于:2004-08-07 12:00
你的问题解决了吗?我试过好像应用程序没什么题,USB设备也正常回复,但我不知道如果我想在驱动程序里下发这种SCSI命令,因该怎么做,我在驱动程序里用IoBuildDeviceIoControlRequest想向设备发送
Inquiry命令,设备返回数据全为0,bus hound报错,说我参数错 |
|
板凳#
发布于:2004-08-12 20:45
请问存诸类的GUID是什么呀?郁闷
|
|
地板#
发布于:2004-08-13 08:42
介绍你一篇文章
http://dev.csdn.net/develop/article/17/17209.shtm |
|
地下室#
发布于:2004-08-13 11:10
感谢 ruyili9803!!
我用MS的一个例子EnumCD(http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q305184),想通过IOCTL_SCSI_PASS_THROUGH获得设备的更详细的信息,包括CDROM的只读&可写属性,但是USB设备一直不能成功,我估计可能是MS说的,USB设备不符合SCSI-3 MMC specification。 |
|
|