阅读:2376回复:9
USB MASS Storage写错误
各位大侠,小弟这里有一个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(); } ........................ 请各位大侠帮忙啊~~~~~~~~~ |
|
沙发#
发布于:2010-03-17 11:10
使用DDK中的bulkusb例子中的应用程序rwbulk,也是相同情况,请大家费点心,解解惑啊!!!
|
|
板凳#
发布于:2010-03-17 12:39
CreateFile的时候,后面的参数用这个,看怎样
GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); |
|
|
地板#
发布于:2010-03-17 12:41
WriteFile(m_hWrite, (LPCVOID)Buf, 31, &dwBytesWritten, 0))
把(LPCVOID)去掉呢 |
|
|
地下室#
发布于:2010-03-17 13:55
回 2楼(misssir) 的帖子
感谢关注,但两种修改方式都不行。我现在比较关心两个问题: 1、使用Windows自带的USB驱动是否可行?还是我必须自己写一个自己设备的驱动? 2、WriteFile报参数错误的原因? |
|
5楼#
发布于:2010-03-17 15:01
你是通过CreateFile来打开USB设备的管道来实现直接读,但Mass Storage驱动好象是不支持这样的方法,也不支持File Read/Write的操作。
象你这样情况,有种解决办法:通过CreateFile打开设备,然后再通过IOCTL_SCSI_PASS_THROUGH或IOCTL_SCSI_PASS_THROUGH_DIRECT来发送/接收数据 |
|
6楼#
发布于:2010-03-17 15:09
回 5楼(jally76) 的帖子
谢谢,我试试用DeviceIoControl来实现下。 |
|
7楼#
发布于:2010-03-19 14:41
感谢jally76方向性指导,目前已经解决问题。
MS的MASS STORAGE驱动确实不支持ReadFile和WriteFile。可以通过DeviceIoControl,使用SCSI_PASS_THROUGH_DIRECT和SCSI_PASS_THROUGH来实现通讯。 |
|
8楼#
发布于:2010-03-20 20:21
继续问一个,咱们的随便一个U盘能用DDK的BULKUSB例子驱上用吗?
|
|
9楼#
发布于:2010-03-21 16:49
|
|