6585|8

74

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

用SCSI_PASS_THROUGH 参数deviceiocontrol返回错误 [复制链接]

用deviceiocontrol向设备发SCSI_PASS_THROUGH 命令,函数返回0,正常为非零,但设备已经收到命令,我要返回的结果,弄了好长时间,不明白,哪位有过类似经验,指点下,谢谢!

最新回复

我也有个问题,我想先利用CreateFile打开设备,然后再打开我一个本地磁盘上的文件,读取文件内容,用DeviceIOControl向设备发送命令,然后再将命令读出来,再把这些内容写入到另一个磁盘里面,可是我不知道怎么去实现!有人能告诉我一下吗?QQ515091847  email:kisswei_liu@163.com  期望早点得到朋友们的指点!  详情 回复 发表于 2009-9-17 16:44
点赞 关注

回复
举报

64

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
另外说明:用deviceiocontrol但用IOCTL_STORAGE_QUERY_PROPERTY这个参数返回就正确,估计就是和SCSI_PASS_THROUGH 有关,不知道如何操作.
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
不懂,up
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

4
 
继续摸索。。。。。。。。。。。。。
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

5
 
错误码是什么?代码怎么写的?
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

6
 
GetLastError()返回的是121,信号量超时(不知道什么意思),不过后来我也用了个相同格式的参数发其他的命令,deviceiocontrol返回是非零,正确的,搞不懂,但发给设备的返回值放在哪里呢?现在需要知道这个。哪位大侠指点下,谢谢!。。。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

7
 
代码是这样的:
                        SCSI_PASS_THROUGH_WITH_BUFFERS *sptwb;        //send 13bytes the first use this;               
                        sptwb=new SCSI_PASS_THROUGH_WITH_BUFFERS();
                        ZeroMemory(sptwb,sizeof(SCSI_PASS_THROUGH_WITH_BUFFERS));   
                        sptwb->spt.Length  = sizeof(SCSI_PASS_THROUGH);
                        sptwb->spt.PathId  = 0;
                        sptwb->spt.TargetId  = 0;
                        sptwb->spt.Lun= 0;
                        sptwb->spt.CdbLength  = CDB10GENERIC_LENGTH;//+CDB6GENERIC_LENGTH
                        sptwb->spt.SenseInfoLength = 0;
                        sptwb->spt.TimeOutValue  = 5;
                        sptwb->spt.SenseInfoOffset=offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS, ucSenseBuf);
                        sptwb->spt.DataBufferOffset = offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS, ucDataBuf);
                        sptwb->spt.DataIn = SCSI_IOCTL_DATA_OUT|SCSI_IOCTL_DATA_IN;
                        sptwb->spt.DataTransferLength = sizeof(sptwb->spt);
                        sptwb->spt.Cdb[0] =0xcf;//SCSIOP_WRITE;
                        sptwb->spt.Cdb[1] =0x01;//Cdb[0]&Cdb[1] is the command which is self defined in the vimicro device cf01:mimayanzhen
                        for(int i=0,j=0;i<6;i++,j++)
                        {
                                psw=strMima.GetAt(j);
                                sptwb->spt.Cdb[2+i] =psw;
                        }               
                        bResult =DeviceIoControl(hDevice,
                                IOCTL_SCSI_PASS_THROUGH,
                                sptwb,
                                sizeof(SCSI_PASS_THROUGH_WITH_BUFFERS),
                                sptwb,
                                sizeof(SCSI_PASS_THROUGH_WITH_BUFFERS),
                                (unsigned long *)&nBytes,
                                NULL);
                        if(!bResult)
                        {
                                int iERR=GetLastError();
                                TRACE("ERROR CODE:%d\n",iERR);
                        }

 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

8
 
要想知道设备返回的数据如何设置啊?又是放在哪个参数里面呢,我试了好多个都不正确。。。。。ZZZZZ
 
 
 

回复

53

帖子

0

TA的资源

一粒金砂(初级)

9
 
我也有个问题,我想先利用CreateFile打开设备,然后再打开我一个本地磁盘上的文件,读取文件内容,用DeviceIOControl向设备发送命令,然后再将命令读出来,再把这些内容写入到另一个磁盘里面,可是我不知道怎么去实现!有人能告诉我一下吗?QQ515091847  email:kisswei_liu@163.com  期望早点得到朋友们的指点!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表