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