USB Mass storage 设备路径疑问,急需解决··········

tianjin666 2014-05-04 10:36:33
最近在研究PC端上位机与Mass storage免驱设备的通信,PC端驱动程序用的是Windows自带的usbstor.sys,只是编写应用程序,实现与下位机Mass storage设备的通信,但被一个问题折磨了一周了,一直解决不了,描述如下。
1、调用SetupDiXxx()系列函数获取设备路径:\\?\usb#vid_8018&pid_8084#6&2a3a7b38&0&1#{a5dcbf10-6530-11d2-901f-00c04fb951ed}
2、调用CreateFile()打开设备,第一个参数就是\\?\usb#vid_8018&pid_8084#6&2a3a7b38&0&1#{a5dcbf10-6530-11d2-901f-00c04fb951ed},句柄返回hDev = 0x000000A0,应该是成功的
3、调用DeviceIoControl()测试SCSI的查询命令,失败,调用GetLastError(),返回错误代码50(不支持网络请求)
4、调用WriteFile()测试写数据,失败,调用GetLastError(),返回错误代码87(参数错误)

我也用U盘测试过,用这种获取设备路径的方式,仍然是失败,现象完全一样,当我把CreateFile()的第一个参数改为磁盘"\\\\.\\H:"的形式,就能成功。但是老大要求我的Mass storage是隐藏盘符的,就不能用磁盘的方式,只能用这种获取设备路径的方式,我怀疑还是路径不对,网上有大神说:
1、GUID不对,但是我更换了很多GUID,都还是原样。
2、要打开端点,形如\\pipe02,但是驱动不是我自己写的,用的是usbstor.sys,源码也找不到,试了很多种形式,都不行。
3、要打开USB设备的USBSTOR子设备,但是该怎么获取,形式是什么样子呢。

希望大神能够帮帮小弟···········
...全文
1262 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wk8023xy 2014-12-02
  • 打赏
  • 举报
回复
楼主你好,最近我也在研究与U盘通信的方法,如果使用CreateFile()打开U盘句柄的话,只能对其扇区读写,你知道怎么读写它的端点缓冲区吗?
用户 昵称 2014-06-07
  • 打赏
  • 举报
回复
你的guid对吗?
Lingxy 2014-06-05
  • 打赏
  • 举报
回复
m_hDiskHandle=CreateFile("\\\\.\\PhysicalDrive1",GENERIC_READ,0, NULL, OPEN_EXISTING, 0, NULL); if (m_hDiskHandle == INVALID_HANDLE_VALUE) { } 这样打开就可以了
FongLuo 2014-05-07
  • 打赏
  • 举报
回复
网上有线程的枚举USB设备的代码 http://blog.sina.com.cn/s/blog_4635cff00100083a.html 你看那里面那个GetDrivesDevInstByDiskNumber()函数,就有枚举设备的过程。
孟如庭 2014-05-07
  • 打赏
  • 举报
回复
引用 5 楼 tianjin66666 的回复:
[quote=引用 4 楼 feiyue1206 的回复:] [quote=引用 3 楼 tianjin66666 的回复:] [quote=引用 2 楼 feiyue1206 的回复:] USB通信,肯定需要底层支持。问底层的人要通信方式吧
因为下位机是Mass storage免驱设备,底层驱动用的是Windows自带的usbstor.sys,就是U盘用的,在网上找usbstor.sys源码也找不到·······[/quote] 楼主你是要做USB设备?还是做PC上层应用? 要是做USB设备,这个我不懂,只知道USB设备是有公开标准的 要是左上层应用,通信方面,就要看USB设备是怎么实现的了,找做底层的人要一下通信示例就行了。 [/quote]两者都做,现在USB设备可以确定没问题,只是PC上层应用,底层用的是Windows自带的usbstor.sys,不用做啊····[/quote] 兰州,我觉得你的思路有问题 Mass Storage是不需要额外驱动,电脑可以识别,但是要是上层应用和ms设备通信,是需要ms设备有通信的处理。如果有嵌入式的代码,你查查嵌入式代码,看看具体通信要怎么实现
tianjin666 2014-05-06
  • 打赏
  • 举报
回复
引用 4 楼 feiyue1206 的回复:
[quote=引用 3 楼 tianjin66666 的回复:] [quote=引用 2 楼 feiyue1206 的回复:] USB通信,肯定需要底层支持。问底层的人要通信方式吧
因为下位机是Mass storage免驱设备,底层驱动用的是Windows自带的usbstor.sys,就是U盘用的,在网上找usbstor.sys源码也找不到·······[/quote] 楼主你是要做USB设备?还是做PC上层应用? 要是做USB设备,这个我不懂,只知道USB设备是有公开标准的 要是左上层应用,通信方面,就要看USB设备是怎么实现的了,找做底层的人要一下通信示例就行了。 [/quote]两者都做,现在USB设备可以确定没问题,只是PC上层应用,底层用的是Windows自带的usbstor.sys,不用做啊····
孟如庭 2014-05-04
  • 打赏
  • 举报
回复
引用 3 楼 tianjin66666 的回复:
[quote=引用 2 楼 feiyue1206 的回复:] USB通信,肯定需要底层支持。问底层的人要通信方式吧
因为下位机是Mass storage免驱设备,底层驱动用的是Windows自带的usbstor.sys,就是U盘用的,在网上找usbstor.sys源码也找不到·······[/quote] 楼主你是要做USB设备?还是做PC上层应用? 要是做USB设备,这个我不懂,只知道USB设备是有公开标准的 要是左上层应用,通信方面,就要看USB设备是怎么实现的了,找做底层的人要一下通信示例就行了。
tianjin666 2014-05-04
  • 打赏
  • 举报
回复
引用 2 楼 feiyue1206 的回复:
USB通信,肯定需要底层支持。问底层的人要通信方式吧
因为下位机是Mass storage免驱设备,底层驱动用的是Windows自带的usbstor.sys,就是U盘用的,在网上找usbstor.sys源码也找不到·······
孟如庭 2014-05-04
  • 打赏
  • 举报
回复
USB通信,肯定需要底层支持。问底层的人要通信方式吧
tianjin666 2014-05-04
  • 打赏
  • 举报
回复
下午打开这种形式的\\?\usbstor#disk&ven_kingston&prod_datatraveler_2.0&rev_pmap#5b8504002c22&0#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}路径,句柄竟然返回0xffffffff无效了,大神在哪里啊·····帮帮忙吧····

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧