wangjg0921
驱动牛犊
驱动牛犊
  • 注册日期2007-10-05
  • 最后登录2007-10-15
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:2275回复:4

求助:USB HID设备无法访问题

楼主#
更多 发布于:2007-10-07 23:49
前几天发了个帖子求助,为什么没有人回复,是发的不对吗,再发一次,继续求助.
我在做一块usb声卡,这是一个USB Composite Device,Firmware写完了,现在想做pc host的app,要对HID的endpoint4写数据,打开设备的时候能得到设备路径,但是无法读写,部分代码如下。
    //Open the USB device
    char completeDeviceName[MAX_PATH] = "";
    strcat(completeDeviceName, functionClassDeviceData->DevicePath);
//     strcat(completeDeviceName, "\\pipe4");
    HANDLE hDevice = CreateFile(
                completeDeviceName,
                0,//GENERIC_WRITE | GENERIC_READ,
                FILE_SHARE_WRITE | FILE_SHARE_READ,
                NULL,
                OPEN_EXISTING,
                FILE_FLAG_OVERLAPPED,
                NULL);
/*completeDeviceName的值为"\\?\hid#vid_0451&pid_2100&mi_03#7&f15c21&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}"*?

        if (! WriteFile(hDevice, pData, iLen, &dwWrite, lpOverlapped))
        long lLastError = ::GetLastError();/*这里得到的错误号为5:拒绝访问。如果用CreateFile(completeDeviceName,GENERIC_WRITE | GENERIC_READ,...),则错误号为1784:提供给请求操作的用户缓冲区无效。*/

请各位帮忙看一下,可能是什么地方出问题了,多谢。
andylione
驱动牛犊
驱动牛犊
  • 注册日期2007-10-24
  • 最后登录2007-11-21
  • 粉丝0
  • 关注0
  • 积分240分
  • 威望25点
  • 贡献值0点
  • 好评度24点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-11-01 15:36
不会,不过我帮你顶下!
lijie123456
驱动牛犊
驱动牛犊
  • 注册日期2003-02-28
  • 最后登录2014-01-21
  • 粉丝1
  • 关注0
  • 积分350分
  • 威望35点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-11-03 19:46
在吗? 问题解了吗?
lijie123456
驱动牛犊
驱动牛犊
  • 注册日期2003-02-28
  • 最后登录2014-01-21
  • 粉丝1
  • 关注0
  • 积分350分
  • 威望35点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-11-04 11:03
以前有这样的帖子说是hid设备被系统以独占方式打开的,自己写的ap是不能访问的,
不知道现在有没有人解决这个问题。
allanzhou9527
驱动牛犊
驱动牛犊
  • 注册日期2006-03-01
  • 最后登录2008-01-17
  • 粉丝0
  • 关注0
  • 积分710分
  • 威望72点
  • 贡献值0点
  • 好评度71点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-11-05 15:38
引用第3楼lijie123456于2007-11-04 11:03发表的  :
以前有这样的帖子说是hid设备被系统以独占方式打开的,自己写的ap是不能访问的,
不知道现在有没有人解决这个问题。


关于HID类设备被系统以独占的方式打开的问题,我曾经遇到过。
那是把设备定义成标准鼠标、标准键盘时,在应用程序中,按照一般的访问HID类设备的程序调用顺序:HidD_GetHidGuid()、SetupDiGetClassDevs()、SetupDiEnumDeviceInterfaces()、SetupDiGetDeviceInterfaceDetail()、CreateFile()的方式是无法获取可读写的设备句柄的。

后来把HID设备定义成自定义的类型(Vendor Defined)后,就不存在这个问题了。
游客

返回顶部