20楼#
发布于:2003-05-12 16:18
[quote]请问zhongsion大侠, 我还没有解决呢。 :( [/quote] 我也遇到了同样的事情。 后来我换了GUID,就通过了。 |
|
|
21楼#
发布于:2003-05-12 18:05
[quote][quote]请问zhongsion大侠, 我还没有解决呢。 :( [/quote] 我也遇到了同样的事情。 后来我换了GUID,就通过了。 [/quote] 谢谢rainysky1224兄弟,那你的guid是怎样得到的? [编辑 - 5/12/03 by waterwindsxu] |
|
|
22楼#
发布于:2003-05-12 19:21
我是姐姐。:)
我做U盘的,所以不用HidD_GetHidGuid。 我的GUID试出来的。 |
|
|
23楼#
发布于:2003-05-13 12:15
我是姐姐。:) 谢谢姐姐! :cool: :cool: :cool: |
|
|
24楼#
发布于:2003-05-13 21:15
我也觉得是那个问题,因为没插USB设备它也能获取GUID。可怎么试呢?
|
|
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。但不知如何下手修改(怕改错)!!!前面一种方法错在哪里?后面一种更没经验,各位可否指点指点。小弟有礼了。 :) |
|
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 我暂时还没有测试,但我觉得打开设备是没有问题的,因为开发板就是用这种方法直接打开的。 |
|
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}\"转换也不行。 |
|
28楼#
发布于:2003-07-30 00:39
多谢jinghuiren兄!好象已经成功了!在运行rwbulk.exe后显示:
request complete, success = 0, nBytes = -???? nBytes是一个负数,这样对吗?为什么会这样? |
|
29楼#
发布于:2003-07-30 10:42
多谢jinghuiren兄!好象已经成功了!在运行rwbulk.exe后显示: 我不知道你那个rwbulk.exe是干什么用的,不过你如果已经打开了设备,就可以直接用vc些个小的测试程序传输数据了,因为你那个程序只是个可执行程序,没有源码,因此它里面都干了些什么谁也不知道。 |
|
30楼#
发布于:2003-07-30 13:19
[quote]多谢jinghuiren兄!好象已经成功了!在运行rwbulk.exe后显示: 我不知道你那个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?? |
|
31楼#
发布于:2003-07-30 13:55
呵呵,那是因为你什么都没有读到呀,而且nbytes在使用之前没有初始化,所以里面是随机数,如果成功的话,success应该是1,nbytes里面是读回的数据量,建议你在这个函数上设个断点,首先看一下hDev是不是INVALID_HANDLE_VALUE,如果不是说明设备已经正常打开,但是问题出现再你第一个deviceiocontrol()函数上。
|
|
32楼#
发布于:2003-07-30 14:56
呵呵,那是因为你什么都没有读到呀,而且nbytes在使用之前没有初始化,所以里面是随机数,如果成功的话,success应该是1,nbytes里面是读回的数据量,建议你在这个函数上设个断点,首先看一下hDev是不是INVALID_HANDLE_VALUE,如果不是说明设备已经正常打开,但是问题出现再你第一个deviceiocontrol()函数上。 在我测试中,它返回的是这样一句:\"request complete, success = 0 nBytes = -??????\",而不是:\"DEV not open\"(请注意上面的程序流程),所以应该不是hDev的问题,会是什么问题昵?? |
|
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有冲突?? |
|
34楼#
发布于:2004-07-17 11:58
[quote]请问zhongsion大侠, 我还没有解决呢。 :( [/quote] 也是! |
|
35楼#
发布于:2004-07-19 09:46
那个GUID是USB类的GUID,要用自己设备的GUID。驱动程序中你用的那个。
哪位大哥大姐能具体说一下是如何使SetupDiEnumDeviceInterfaces成功的? |
|
|
上一页
下一页