rainysky1224
驱动牛犊
驱动牛犊
  • 注册日期2003-02-16
  • 最后登录2004-10-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
20楼#
发布于:2003-05-12 16:18
[quote]请问zhongsion大侠,
你如何解决的SetupDiEnumDeviceInterfaces()返回无效的
问题的,
我用的guid是用HidD_GetHidGuid()函数获得的全局量,
请赐教小弟,
先谢谢了!



我还没有解决呢。 :( [/quote]
我也遇到了同样的事情。
后来我换了GUID,就通过了。
just do it
waterwindsxu
驱动小牛
驱动小牛
  • 注册日期2003-04-28
  • 最后登录2018-03-04
  • 粉丝0
  • 关注0
  • 积分58分
  • 威望165点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
  • 社区居民
21楼#
发布于:2003-05-12 18:05
[quote][quote]请问zhongsion大侠,
你如何解决的SetupDiEnumDeviceInterfaces()返回无效的
问题的,
我用的guid是用HidD_GetHidGuid()函数获得的全局量,
请赐教小弟,
先谢谢了!



我还没有解决呢。 :( [/quote]
我也遇到了同样的事情。
后来我换了GUID,就通过了。
 [/quote]
谢谢rainysky1224兄弟,那你的guid是怎样得到的?

[编辑 -  5/12/03 by  waterwindsxu]
上善若水! 凯风永至!
rainysky1224
驱动牛犊
驱动牛犊
  • 注册日期2003-02-16
  • 最后登录2004-10-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
22楼#
发布于:2003-05-12 19:21
我是姐姐。:)
我做U盘的,所以不用HidD_GetHidGuid。
我的GUID试出来的。
just do it
waterwindsxu
驱动小牛
驱动小牛
  • 注册日期2003-04-28
  • 最后登录2018-03-04
  • 粉丝0
  • 关注0
  • 积分58分
  • 威望165点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
  • 社区居民
23楼#
发布于:2003-05-13 12:15
我是姐姐。:)
我做U盘的,所以不用HidD_GetHidGuid。
我的GUID试出来的。

谢谢姐姐! :cool: :cool: :cool:
上善若水! 凯风永至!
yangchunyu
驱动牛犊
驱动牛犊
  • 注册日期2003-04-20
  • 最后登录2008-03-06
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
24楼#
发布于:2003-05-13 21:15
我也觉得是那个问题,因为没插USB设备它也能获取GUID。可怎么试呢?
zhongsion
驱动小牛
驱动小牛
  • 注册日期2002-09-29
  • 最后登录2010-02-01
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
25楼#
发布于:2003-07-28 21:55
大家好,很久没来过了。因为上段时间在忙别的,一直没有来看过。
现在,我已经看到了枚举,重枚举的全过程(真高兴)。准备写一个
bulk  app。于是到处找资料,后来在98ddk里面找一个BULK在例子,但它在user mode是通过一个已注册的GUID来得到一个DevicePath,而在kernel mode,它是通过已注册的GUID来得到一个连接符。综合来说,就是利用一个已注册的GUID来实现USER MODE与KERNEL MODE的通信。但各位CYPRESS 的用户请注意:ezusb.sys 是通过定义一个连接符,然后在app里面利用这个连接符实现操作这个设备。(以上理解不知对否?)依上所思,我曾经修改98ddk里面的bulkusb.c:去掉GUID,直接利用ezusb.sys里面提供的连接符\"\\\\DosDevices\\\\Ezusb-0\"作为CreateFile的参数发起用户请求。但不成功!!!!!为什么???于是我想用另一种方法:在ezusb.sys里面,建立一个GUID。但不知如何下手修改(怕改错)!!!前面一种方法错在哪里?后面一种更没经验,各位可否指点指点。小弟有礼了。 :)
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
26楼#
发布于:2003-07-29 09:36
不是\"\\\\DosDevices\\\\Ezusb-0\",是Ezusb-0,直接用它即可打开设备,具体例程你可参考控制面板的的源程序,算了,干脆给你贴出来,如下:
BOOLEAN bOpenDevice (HANDLE * phDeviceHandle)
{
    char completeDeviceName[64] = \"\";
char devname[] = \"Ezusb-0\";

    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);
    } /*else*/


}//OpenDevice


我暂时还没有测试,但我觉得打开设备是没有问题的,因为开发板就是用这种方法直接打开的。
kezhu
驱动牛犊
驱动牛犊
  • 注册日期2003-07-16
  • 最后登录2004-05-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
27楼#
发布于:2003-07-29 09:42
哪位大哥大姐能具体说一下是如何使SetupDiEnumDeviceInterfaces成功的?
我是先调用SetupDiGetClassDevs以及SetupDiEnumDeviceInfo枚举设备,再调SetupDiGetDeviceRegistryProperty得到HardwareID以及ClassGUID,通过HardwareID判断出类似\"USB\\Vid_04b0&Pid_0301\"的设备,然后调用SetupDiEnumDeviceInterfaces失败,错误码和大家一样,都是259,ERROR_NO_MORE_ITEMS,SetupDiEnumDeviceInterfaces的5个参数里,是GUID错了,还是Index错了,其他3个没什么可错的。Index和SetupDiEnumDeviceInfo用的是同一个循环变量,GUID直接用常数\"{36FC9E60-C465-11CF-8056-444553540000}\"转换也不行。
zhongsion
驱动小牛
驱动小牛
  • 注册日期2002-09-29
  • 最后登录2010-02-01
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
28楼#
发布于:2003-07-30 00:39
多谢jinghuiren兄!好象已经成功了!在运行rwbulk.exe后显示:
request complete, success = 0, nBytes = -????
nBytes是一个负数,这样对吗?为什么会这样?
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
29楼#
发布于:2003-07-30 10:42
多谢jinghuiren兄!好象已经成功了!在运行rwbulk.exe后显示:
request complete, success = 0, nBytes = -????
nBytes是一个负数,这样对吗?为什么会这样?
 


我不知道你那个rwbulk.exe是干什么用的,不过你如果已经打开了设备,就可以直接用vc些个小的测试程序传输数据了,因为你那个程序只是个可执行程序,没有源码,因此它里面都干了些什么谁也不知道。
zhongsion
驱动小牛
驱动小牛
  • 注册日期2002-09-29
  • 最后登录2010-02-01
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
30楼#
发布于:2003-07-30 13:19
[quote]多谢jinghuiren兄!好象已经成功了!在运行rwbulk.exe后显示:
request complete, success = 0, nBytes = -????
nBytes是一个负数,这样对吗?为什么会这样?
 


我不知道你那个rwbulk.exe是干什么用的,不过你如果已经打开了设备,就可以直接用vc些个小的测试程序传输数据了,因为你那个程序只是个可执行程序,没有源码,因此它里面都干了些什么谁也不知道。 [/quote]

rwbulk.exe是98ddk里面的bulkusb 的例子:

void
rw_dev( HANDLE hDEV )
/*++
Routine Description:

    Called to do formatted ascii dump to console of  USB
    configuration, interface, and endpoint descriptors
    (Cmdline \"rwbulk -u\" )

Arguments:

    handle to device

Return Value:

    none

--*/
{
UINT success;
int siz, nBytes;
char buf[256];
    PUSB_CONFIGURATION_DESCRIPTOR cd;
    PUSB_INTERFACE_DESCRIPTOR id;
    PUSB_ENDPOINT_DESCRIPTOR ed;

siz = sizeof(buf);

if (hDEV == INVALID_HANDLE_VALUE) {
NOISY((\"DEV not open\"));
return;
}

success = DeviceIoControl(hDEV,
IOCTL_BULKUSB_GET_CONFIG_DESCRIPTOR,
buf,
siz,
buf,
siz,
&nBytes,
NULL);

NOISY((\"request complete, success = %d nBytes = %d\\n\", success, nBytes));

if (success) {
        ULONG i;
UINT  j, n;
        char *pch;
        
        pch = buf;
n = 0;

        cd = (PUSB_CONFIGURATION_DESCRIPTOR) pch;

        print_USB_CONFIGURATION_DESCRIPTOR( cd );

        pch += cd->bLength;

        do {
            
            id = (PUSB_INTERFACE_DESCRIPTOR) pch;

            print_USB_INTERFACE_DESCRIPTOR(id, n++);

            pch += id->bLength;
            for (j=0; j<id->bNumEndpoints; j++) {

                ed = (PUSB_ENDPOINT_DESCRIPTOR) pch;

                print_USB_ENDPOINT_DESCRIPTOR(ed,j);

                pch += ed->bLength;
            }
            i = pch - buf;
        } while (i<cd->wTotalLength);      
        
}

return;

}

我不知道为什么会返回一个负数的nBytes??
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
31楼#
发布于:2003-07-30 13:55
呵呵,那是因为你什么都没有读到呀,而且nbytes在使用之前没有初始化,所以里面是随机数,如果成功的话,success应该是1,nbytes里面是读回的数据量,建议你在这个函数上设个断点,首先看一下hDev是不是INVALID_HANDLE_VALUE,如果不是说明设备已经正常打开,但是问题出现再你第一个deviceiocontrol()函数上。
zhongsion
驱动小牛
驱动小牛
  • 注册日期2002-09-29
  • 最后登录2010-02-01
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
32楼#
发布于:2003-07-30 14:56
呵呵,那是因为你什么都没有读到呀,而且nbytes在使用之前没有初始化,所以里面是随机数,如果成功的话,success应该是1,nbytes里面是读回的数据量,建议你在这个函数上设个断点,首先看一下hDev是不是INVALID_HANDLE_VALUE,如果不是说明设备已经正常打开,但是问题出现再你第一个deviceiocontrol()函数上。

在我测试中,它返回的是这样一句:\"request complete, success = 0 nBytes = -??????\",而不是:\"DEV not open\"(请注意上面的程序流程),所以应该不是hDev的问题,会是什么问题昵??
zhongsion
驱动小牛
驱动小牛
  • 注册日期2002-09-29
  • 最后登录2010-02-01
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
33楼#
发布于:2003-07-30 15:57
会不会是以下有问题:
success = DeviceIoControl(hDEV,
IOCTL_BULKUSB_GET_CONFIG_DESCRIPTOR,
buf,
siz,
buf,
siz,
&nBytes,
NULL);
参数3,4与参数5,6共用一个buf,buffer有冲突??
billy2004
驱动牛犊
驱动牛犊
  • 注册日期2004-07-03
  • 最后登录2005-01-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
34楼#
发布于:2004-07-17 11:58
[quote]请问zhongsion大侠,
你如何解决的SetupDiEnumDeviceInterfaces()返回无效的
问题的,
我用的guid是用HidD_GetHidGuid()函数获得的全局量,
请赐教小弟,
先谢谢了!



我还没有解决呢。 :( [/quote]

也是!
metalwing
驱动中牛
驱动中牛
  • 注册日期2003-10-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分178分
  • 威望58点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
35楼#
发布于:2004-07-19 09:46
那个GUID是USB类的GUID,要用自己设备的GUID。驱动程序中你用的那个。
哪位大哥大姐能具体说一下是如何使SetupDiEnumDeviceInterfaces成功的?
我是先调用SetupDiGetClassDevs以及SetupDiEnumDeviceInfo枚举设备,再调SetupDiGetDeviceRegistryProperty得到HardwareID以及ClassGUID,通过HardwareID判断出类似"USB\Vid_04b0&Pid_0301"的设备,然后调用SetupDiEnumDeviceInterfaces失败,错误码和大家一样,都是259,ERROR_NO_MORE_ITEMS,SetupDiEnumDeviceInterfaces的5个参数里,是GUID错了,还是Index错了,其他3个没什么可错的。Index和SetupDiEnumDeviceInfo用的是同一个循环变量,GUID直接用常数"{36FC9E60-C465-11CF-8056-444553540000}"转换也不行。
新手上路,请多关照.
上一页 下一页
游客

返回顶部