orangeland
驱动牛犊
驱动牛犊
  • 注册日期2003-12-20
  • 最后登录2005-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2987回复:18

请教关于USB应用程序开发的问题

楼主#
更多 发布于:2004-08-11 22:39
我是对一个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呢?  为什么会不一样呢?

谢谢各位先

最新喜欢:

qdyangjingqdyang...
zfw
zfw
驱动小牛
驱动小牛
  • 注册日期2001-12-16
  • 最后登录2006-09-01
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-08-12 09:52
{36FC9E60-C465-11CF-8056-444553540000}是USB类的GUID,就是INF文件中的ClassGuid,实际设备GUID当然不是这个了。
对于USB设备DevicePath得到的符号名还得加上管道名才能CreateFile
zfw
orangeland
驱动牛犊
驱动牛犊
  • 注册日期2003-12-20
  • 最后登录2005-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-08-12 20:34
请问管道名指的是什么?
能举个例子吗? 谢谢
zhiyuan19840428
驱动小牛
驱动小牛
  • 注册日期2004-05-11
  • 最后登录2005-06-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-08-13 07:56
请问管道名指的是什么?
能举个例子吗? 谢谢


我也遇到同样的问题,请帮一下
ruyili9803
驱动牛犊
驱动牛犊
  • 注册日期2004-06-07
  • 最后登录2005-09-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-08-13 08:36
主机和设备进行通讯就是通过管道进行的,一般来说读出数据和写入数据都是通过不同的管道。如PIPE00进行读,PIPE01进行写。
zfw
zfw
驱动小牛
驱动小牛
  • 注册日期2001-12-16
  • 最后登录2006-09-01
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-08-13 08:58
管道名在你驱动中定义的,驱动获得设备配置描述符后就知道设备有几个端点,然后和各个端点建立连接,这就是管道,如PIPE01,PIPE02...,应用程序再打开各个管道通信。
zfw
orangeland
驱动牛犊
驱动牛犊
  • 注册日期2003-12-20
  • 最后登录2005-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-08-13 10:35
对于WIndow自带的通用驱动,在应用程序中有没有办法获得它定义的管道名呢?
createfile格式是不是就是

\\?\XXXXXXXXXXXXXXXXXXXXXXX{里面是GUID}\PIPE00
ruyili9803
驱动牛犊
驱动牛犊
  • 注册日期2004-06-07
  • 最后登录2005-09-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-08-13 13:52
当然可以。你可以看一下有关例子。看怎么实现GUID到设备路径的代码
如下

http://dev.csdn.net/develop/article/17/17209.shtm
summerfruit
驱动牛犊
驱动牛犊
  • 注册日期2004-06-12
  • 最后登录2013-12-07
  • 粉丝0
  • 关注0
  • 积分395分
  • 威望67点
  • 贡献值0点
  • 好评度36点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-08-19 13:28
小弟也是跟你做相同的工作,用的是相同的办法,
但是小弟用的GUID是注册表里的{36FC9E60-C465-11CF-8056-444553540000}
结果我在SetupDiEnumDeviceInterfaces()时,返回植就是false了,请问你的GUID=a5dcbf10-6530-11d2-901f-00c04fb951ed是哪里来的?

谢谢!
orangeland
驱动牛犊
驱动牛犊
  • 注册日期2003-12-20
  • 最后登录2005-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-08-19 15:24
小弟也是跟你做相同的工作,用的是相同的办法,
但是小弟用的GUID是注册表里的{36FC9E60-C465-11CF-8056-444553540000}
结果我在SetupDiEnumDeviceInterfaces()时,返回植就是false了,请问你的GUID=a5dcbf10-6530-11d2-901f-00c04fb951ed是哪里来的?

谢谢!
 


那个是注册表里的u盘的SymbolicName中提取出来的
vennychang
驱动牛犊
驱动牛犊
  • 注册日期2003-02-07
  • 最后登录2005-03-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-08-19 17:23
需要加上管名吗?
在BULKUSB里看起来,管名似乎是当成参数传入以后,才由驱动分解使用的?
我的想法是,假设你把Writefile的IRP_MJ_WRITE定死在PIPE01,那就把WriteFile的资料向pipe01的handle丢出去即可。

如果有错请指点
summerfruit
驱动牛犊
驱动牛犊
  • 注册日期2004-06-12
  • 最后登录2013-12-07
  • 粉丝0
  • 关注0
  • 积分395分
  • 威望67点
  • 贡献值0点
  • 好评度36点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-08-20 13:41
谢谢楼主,我的问题解决了!
zxwitsme
驱动牛犊
驱动牛犊
  • 注册日期2004-08-23
  • 最后登录2006-04-20
  • 粉丝0
  • 关注0
  • 积分68分
  • 威望8点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-09-30 16:25
楼主你的问题解决了吗?
我现在也遇到和你一样的问题,可以讨论一下吗?
我的email:itsmehust@163.com
qq:13046591
cecily
驱动牛犊
驱动牛犊
  • 注册日期2004-08-04
  • 最后登录2013-05-16
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望86点
  • 贡献值1点
  • 好评度14点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-10-08 23:13
我用的a5dcbf10-6530-11d2-901f-00c04fb951ed,一切正常,也得到了设备路径,和楼主最后得到的路径一样,但是再用这个路径使用CreateFile得到的handle却不能对设备进行一些访问操作,不知道是怎么回事??

[编辑 -  10/9/04 by  cecily]
我不是你的天使,我不懂你的天堂
tyl1120
驱动牛犊
驱动牛犊
  • 注册日期2005-03-22
  • 最后登录2005-08-24
  • 粉丝0
  • 关注0
  • 积分52分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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);
    }

}
tyl1120
驱动牛犊
驱动牛犊
  • 注册日期2005-03-22
  • 最后登录2005-08-24
  • 粉丝0
  • 关注0
  • 积分52分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2005-08-01 16:48
关于USB应用程序开发的问题
我的usb实际的ClassGuid为36FC9E60-C465-11CF-8056-444553540000,   请问怎么将其加到我的应用程序中?
是否要新建一个头文件,用
#define USB_DRIVER_GUID(或其他名称) 36FC9E60-C465-11CF-8056-444553540000来表示
weiyueonline
驱动牛犊
驱动牛犊
  • 注册日期2004-12-27
  • 最后登录2009-02-18
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望11点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2005-08-01 17:49
正在做和usb mass storage设备通信,我现在碰到和搂主一样的问题,请问一下各位有没有人知道怎么解决?非常感谢!!
yefeng519
驱动牛犊
驱动牛犊
  • 注册日期2008-04-11
  • 最后登录2008-04-28
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2008-04-22 15:27
如何得到USB 设备管道名称啊?举个例子!谢谢
skertone
驱动牛犊
驱动牛犊
  • 注册日期2006-06-23
  • 最后登录2015-03-12
  • 粉丝0
  • 关注0
  • 积分476分
  • 威望99点
  • 贡献值0点
  • 好评度48点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2008-04-28 15:03
据我的几天研究

MassStorage设备是通过usbstor.sys驱动程序与U盘通信的

这个驱动程序只给disk.sys调用

所以其接口中不像我们平时做的bo驱动,有管道名可以ReadFile Writefile.

人家只支持以DeviceIOControl方式訪問,其数据格式要按照SCSI指令集(或字集UFI)

只能以块为单位读写数据
游客

返回顶部