阅读:3042回复:18
请教关于USB应用程序开发的问题
我是对一个U盘做试验
用的GUID 是 a5dcbf10-6530-11d2-901f-00c04fb951ed 首先 SetupDiGetClassDevs 然后 SetupDiEnumDeviceInterfaces 再 SetupDiGetDeviceInterfaceDetail 由此得到了 DevicePath 设备路径 于是CreateFile 建立通信 都没有出错 但是再用ReadFile进行读取后会出错 GetLastError就提示"参数不对" 请问这是为何? 另外 我在注册表里看到U盘的 ClassGUID是 {36FC9E60-C465-11CF-8056-444553540000} 但是SymbolicName中的却是 a5dcbf10-6530-11d2-901f-00c04fb951ed 请问哪个才是它的真正的GUID呢? 为什么会不一样呢? 谢谢各位先 |
|
最新喜欢:qdyang... |
沙发#
发布于:2004-08-12 09:52
{36FC9E60-C465-11CF-8056-444553540000}是USB类的GUID,就是INF文件中的ClassGuid,实际设备GUID当然不是这个了。
对于USB设备DevicePath得到的符号名还得加上管道名才能CreateFile |
|
|
板凳#
发布于:2004-08-12 20:34
请问管道名指的是什么?
能举个例子吗? 谢谢 |
|
地板#
发布于:2004-08-13 07:56
请问管道名指的是什么? 我也遇到同样的问题,请帮一下 |
|
地下室#
发布于:2004-08-13 08:36
主机和设备进行通讯就是通过管道进行的,一般来说读出数据和写入数据都是通过不同的管道。如PIPE00进行读,PIPE01进行写。
|
|
5楼#
发布于:2004-08-13 08:58
管道名在你驱动中定义的,驱动获得设备配置描述符后就知道设备有几个端点,然后和各个端点建立连接,这就是管道,如PIPE01,PIPE02...,应用程序再打开各个管道通信。
|
|
|
6楼#
发布于:2004-08-13 10:35
对于WIndow自带的通用驱动,在应用程序中有没有办法获得它定义的管道名呢?
createfile格式是不是就是 \\?\XXXXXXXXXXXXXXXXXXXXXXX{里面是GUID}\PIPE00 |
|
7楼#
发布于:2004-08-13 13:52
当然可以。你可以看一下有关例子。看怎么实现GUID到设备路径的代码
如下 http://dev.csdn.net/develop/article/17/17209.shtm |
|
8楼#
发布于:2004-08-19 13:28
小弟也是跟你做相同的工作,用的是相同的办法,
但是小弟用的GUID是注册表里的{36FC9E60-C465-11CF-8056-444553540000} 结果我在SetupDiEnumDeviceInterfaces()时,返回植就是false了,请问你的GUID=a5dcbf10-6530-11d2-901f-00c04fb951ed是哪里来的? 谢谢! |
|
9楼#
发布于:2004-08-19 15:24
小弟也是跟你做相同的工作,用的是相同的办法, 那个是注册表里的u盘的SymbolicName中提取出来的 |
|
10楼#
发布于:2004-08-19 17:23
需要加上管名吗?
在BULKUSB里看起来,管名似乎是当成参数传入以后,才由驱动分解使用的? 我的想法是,假设你把Writefile的IRP_MJ_WRITE定死在PIPE01,那就把WriteFile的资料向pipe01的handle丢出去即可。 如果有错请指点 |
|
11楼#
发布于:2004-08-20 13:41
谢谢楼主,我的问题解决了!
|
|
12楼#
发布于:2004-09-30 16:25
楼主你的问题解决了吗?
我现在也遇到和你一样的问题,可以讨论一下吗? 我的email:itsmehust@163.com qq:13046591 |
|
13楼#
发布于:2004-10-08 23:13
我用的a5dcbf10-6530-11d2-901f-00c04fb951ed,一切正常,也得到了设备路径,和楼主最后得到的路径一样,但是再用这个路径使用CreateFile得到的handle却不能对设备进行一些访问操作,不知道是怎么回事??
[编辑 - 10/9/04 by cecily] |
|
|
14楼#
发布于:2005-07-30 18:50
USB应用程序开发的问题
以下是我在C++BUILDER中读写USB的程序,请问为什么我的WriteFile函数返回0值,WriteFile(hDevice,buf,length,&length,NULL)中的length值变为0.切盼回复!!! void __fastcall TForm1::Button5Click(TObject *Sender) { HANDLE hDevice; DWORD length ; DWORD writeflag; AnsiString indata; indata=Memo1->Text; length=strlen(indata.c_str()); char *buf=new char[length+1]; strcpy(buf,indata.c_str()); if( openDevice(&hDevice,"EzUsb-0")!=true ) { StatusEdit->Text = "打开设备失败!"; return; } else { StatusEdit->Text = "设备已打开!"; writeflag=WriteFile(hDevice,buf,length,&length,NULL); } if(buf) delete buf; } bool TForm1::openDevice(HANDLE * phDeviceHandle, PCHAR devname) { char completeDeviceName[64] = ""; // char pcMsg[64] = ""; strcat (completeDeviceName, "\\\\.\\" ); strcat (completeDeviceName, devname ); *phDeviceHandle = CreateFile( completeDeviceName, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if (*phDeviceHandle == INVALID_HANDLE_VALUE) { return (FALSE); } else { return (TRUE); } } |
|
15楼#
发布于:2005-08-01 16:48
关于USB应用程序开发的问题
我的usb实际的ClassGuid为36FC9E60-C465-11CF-8056-444553540000, 请问怎么将其加到我的应用程序中?是否要新建一个头文件,用 #define USB_DRIVER_GUID(或其他名称) 36FC9E60-C465-11CF-8056-444553540000来表示 |
|
16楼#
发布于:2005-08-01 17:49
正在做和usb mass storage设备通信,我现在碰到和搂主一样的问题,请问一下各位有没有人知道怎么解决?非常感谢!!
|
|
17楼#
发布于:2008-04-22 15:27
如何得到USB 设备管道名称啊?举个例子!谢谢
|
|
18楼#
发布于:2008-04-28 15:03
据我的几天研究
MassStorage设备是通过usbstor.sys驱动程序与U盘通信的 这个驱动程序只给disk.sys调用 所以其接口中不像我们平时做的bo驱动,有管道名可以ReadFile Writefile. 人家只支持以DeviceIOControl方式訪問,其数据格式要按照SCSI指令集(或字集UFI) 只能以块为单位读写数据 |
|