最近在研究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子设备,但是该怎么获取,形式是什么样子呢。
希望大神能够帮帮小弟·········· |