qiaoroger
驱动牛犊
驱动牛犊
  • 注册日期2005-02-03
  • 最后登录2010-03-22
  • 粉丝0
  • 关注0
  • 积分111分
  • 威望92点
  • 贡献值1点
  • 好评度7点
  • 原创分0分
  • 专家分0分
阅读:2376回复:9

USB MASS Storage写错误

楼主#
更多 发布于:2010-03-17 10:34
各位大侠,小弟这里有一个USB mass storage设备,但只支持自定义SCSI协议。现在想使用Windows自带的USB驱动,应用程序能够找到设备,也能打开设备,但使用WriteFile写命令时就报0x57错误,说是参数错误。

请问各位,目前这种情况,使用Windows自带USB驱动应该是可以的吧?如果是,为什么写数据会报参数错误???

相关代码如下:
    memset( szCompleteDeviceName, 0x00, sizeof(szCompleteDeviceName) );
        strcat( szCompleteDeviceName, m_functionClassDeviceData->DevicePath);
        strcat( szCompleteDeviceName, "\\PIPE01" );
        m_hWrite = CreateFile( szCompleteDeviceName, GENERIC_WRITE,
                                                 FILE_SHARE_WRITE, (LPSECURITY_ATTRIBUTES)NULL, OPEN_EXISTING,
                    0, NULL);
        BYTE Buf[256] = {0x55,0x53,0x42,0x43,0xd8,0x96,0xee,0x88,0x12,0x00,0x00,0x00,0x80,0x00,0x0c,0x03,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
        DWORD dwBytesWritten = 0;
            
        if (!WriteFile(m_hWrite, (LPCVOID)Buf, 31, &dwBytesWritten, 0))
        {
    dwBytesWritten = GetLastError();
        }
........................

请各位大侠帮忙啊~~~~~~~~~
qiaoroger
驱动牛犊
驱动牛犊
  • 注册日期2005-02-03
  • 最后登录2010-03-22
  • 粉丝0
  • 关注0
  • 积分111分
  • 威望92点
  • 贡献值1点
  • 好评度7点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2010-03-17 11:10
使用DDK中的bulkusb例子中的应用程序rwbulk,也是相同情况,请大家费点心,解解惑啊!!!
misssir
驱动牛犊
驱动牛犊
  • 注册日期2007-10-25
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分143分
  • 威望183点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2010-03-17 12:39
CreateFile的时候,后面的参数用这个,看怎样
GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
还是原始社会好 / QQ: 13633292
misssir
驱动牛犊
驱动牛犊
  • 注册日期2007-10-25
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分143分
  • 威望183点
  • 贡献值0点
  • 好评度12点
  • 原创分0分
  • 专家分0分
地板#
发布于:2010-03-17 12:41
WriteFile(m_hWrite, (LPCVOID)Buf, 31, &dwBytesWritten, 0))
把(LPCVOID)去掉呢
还是原始社会好 / QQ: 13633292
qiaoroger
驱动牛犊
驱动牛犊
  • 注册日期2005-02-03
  • 最后登录2010-03-22
  • 粉丝0
  • 关注0
  • 积分111分
  • 威望92点
  • 贡献值1点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2010-03-17 13:55
回 2楼(misssir) 的帖子
感谢关注,但两种修改方式都不行。
我现在比较关心两个问题:
1、使用Windows自带的USB驱动是否可行?还是我必须自己写一个自己设备的驱动?
2、WriteFile报参数错误的原因?

jally76
驱动牛犊
驱动牛犊
  • 注册日期2005-04-28
  • 最后登录2010-11-23
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望590点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2010-03-17 15:01
你是通过CreateFile来打开USB设备的管道来实现直接读,但Mass Storage驱动好象是不支持这样的方法,也不支持File Read/Write的操作。

象你这样情况,有种解决办法:通过CreateFile打开设备,然后再通过IOCTL_SCSI_PASS_THROUGH或IOCTL_SCSI_PASS_THROUGH_DIRECT来发送/接收数据
qiaoroger
驱动牛犊
驱动牛犊
  • 注册日期2005-02-03
  • 最后登录2010-03-22
  • 粉丝0
  • 关注0
  • 积分111分
  • 威望92点
  • 贡献值1点
  • 好评度7点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2010-03-17 15:09
回 5楼(jally76) 的帖子
谢谢,我试试用DeviceIoControl来实现下。
qiaoroger
驱动牛犊
驱动牛犊
  • 注册日期2005-02-03
  • 最后登录2010-03-22
  • 粉丝0
  • 关注0
  • 积分111分
  • 威望92点
  • 贡献值1点
  • 好评度7点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2010-03-19 14:41
感谢jally76方向性指导,目前已经解决问题。
MS的MASS STORAGE驱动确实不支持ReadFile和WriteFile。可以通过DeviceIoControl,使用SCSI_PASS_THROUGH_DIRECT和SCSI_PASS_THROUGH来实现通讯。
tianweishuiguo
驱动牛犊
驱动牛犊
  • 注册日期2009-06-01
  • 最后登录2010-10-06
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望141点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2010-03-20 20:21
继续问一个,咱们的随便一个U盘能用DDK的BULKUSB例子驱上用吗?
jally76
驱动牛犊
驱动牛犊
  • 注册日期2005-04-28
  • 最后登录2010-11-23
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望590点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2010-03-21 16:49
引用第8楼tianweishuiguo于2010-03-20 20:21发表的  :
继续问一个,咱们的随便一个U盘能用DDK的BULKUSB例子驱上用吗?


用BulkUsb是可以支持的,只是文件系统部分你要自己来支持,难度会很大
游客

返回顶部