阅读:7552回复:35
SetupDiEnumDeviceInterfaces(..) 老返回无效。请帮忙?(给分)
具体:
hardwareDeviceInfo = SetupDiGetClassDevs ( pGuid, NULL, // Define no enumerator (global) NULL, // Define no (DIGCF_PRESENT | // Only Devices present DIGCF_INTERFACEDEVICE)); // Function class devices. ER=GetLastError(); 能成功返回(ER=0); long ss=SetupDiEnumDeviceInterfaces (hardwareDeviceInfo, NULL, // We don\'t care about specific PDOs pGuid, i, &deviceInfoData); ER=GetLastError(); 总是:ss=0;ER=259;不成功返回. 为什么? zhongsion@21cn.com :mad: |
|
沙发#
发布于:2003-05-02 16:12
怎么没人理采? 我急啊!!!!!!??????
|
|
板凳#
发布于:2003-05-02 22:22
和偶的问题一样,呵呵
|
|
|
地板#
发布于:2003-05-03 12:40
我已经知道为什么了。因为我的设备没有完全枚举。原先在电脑的设备管理里面的状态栏里看见有提示“此设备当前工作正常”,以为这样就说明设备已经完全枚举,其实不然。不过现在我又碰到新问题了:用bushound.exe观察,发现一些东西,不能理解????
Device Phase Data Description Time Cmd.Phase.Ofs(rep) ------ ----- ------------------------- ---------------- ----- ------------------ 2.0 CTL 40 a0 92 7f - 00 00 01 00 VENDOR 3.8sc 1.1.0 2.0 USTS 05 00 00 80 no response 248ms 1.2.0 2.0 CTL 40 a0 92 7f - 00 00 01 00 VENDOR 279us 2.1.0 2.0 USTS 05 00 00 80 no response 1.1sc 2.2.0 2.0 CTL 40 a0 6c 14 - 00 00 10 00 VENDOR 270us 3.1.0 2.0 USTS 05 00 00 80 no response 11sc 3.2.0 2.0 CTL 40 a0 92 7f - 00 00 01 00 VENDOR 259us 4.1.0 2.0 USTS 05 00 00 80 no response 418ms 4.2.0 2.0 CTL 40 a0 92 7f - 00 00 01 00 VENDOR 258us 5.1.0 2.0 USTS 05 00 00 80 no response 104ms 5.2.0 2.0 CTL 40 a0 00 00 - 00 00 02 00 VENDOR 226us 6.1.0 2.0 USTS 05 00 00 80 no response 313ms 6.2.0 2.0 CTL 40 a0 92 7f - 00 00 01 00 VENDOR 227us 7.1.0 2.0 USTS 05 00 00 80 no response 308ms 7.2.0 2.0 CTL 40 a0 92 7f - 00 00 01 00 VENDOR 210us 8.1.0 2.0 USTS 05 00 00 80 no response 215ms 8.2.0 在整个枚举过程中,现在是在哪一步?为什么老是重复? |
|
地下室#
发布于:2003-05-03 13:05
偶还是不明白,
那如何才能枚举呀? 请赐教!先谢了!! |
|
|
5楼#
发布于:2003-05-03 14:35
这应该是个厂商自定义的描述符,因为你没有返回要求的内容,所以它一直重复向设备发送这个请求,如果这个描述符没什么大用处的话你可以到驱动里把这一项去掉就行了
|
|
6楼#
发布于:2003-05-03 14:43
一般build厂商请求的urb时会使用下面这个函数,你可以在驱动里找一下:
UsbBuildVendorRequest(urb, //ptr to urb URB_FUNCTION_VENDOR_DEVICE, (USHORT) siz, //siz of urb 0, 0x0, //reservedbits=bmRequestType 0x0C,//request = USBSCAN_IOCTL_WRITE_REGISTER wValue, wIndex, ioBlock->pbyData,//TransferBuffer NULL,//mdl (unused) length,//bufferlength NULL); [编辑 - 5/3/03 by jinghuiren] [编辑 - 5/3/03 by jinghuiren] |
|
7楼#
发布于:2003-05-03 15:20
一般build厂商请求的urb时会使用下面这个函数,你可以在驱动里找一下: 我的上位机的程序是参考ezloader;下位机的程序是自已用汇编写的,通过查询SUDAV_ISR标志来回答主机,还有硬件使用No Serial EEPROM方式;而所有的描述符,是参照DEFAULT USB DEVICE DESCIPTERO TABLE;以上你说的这个函数我没有找到。 :( |
|
8楼#
发布于:2003-05-03 22:01
我觉得是在Ezusb_8051Reset()和Ezusb_DownloadIntelHex()两个函数里,在这两个函数里建立的vendor请求的urb,例如:
urb->UrbHeader.Function = URB_FUNCTION_VENDOR_DEVICE; urb->UrbControlVendorClassRequest.TransferBufferLength = ptr->Length; urb->UrbControlVendorClassRequest.TransferBuffer = ptr->Data; urb->UrbControlVendorClassRequest.Request = ANCHOR_LOAD_EXTERNAL; urb->UrbControlVendorClassRequest.Value = ptr->Address; urb->UrbControlVendorClassRequest.Index = 0; 这种直接赋值的方法和那个函数的作用是一样的,我觉得你用bushound不获得数据里的那个请求应该是cypress用于下载固件程序用的吧,你再仔细考虑一下吧。 |
|
9楼#
发布于:2003-05-05 11:00
请问zhongsion大侠,
你如何解决的SetupDiEnumDeviceInterfaces()返回无效的 问题的, 我用的guid是用HidD_GetHidGuid()函数获得的全局量, 请赐教小弟, 先谢谢了! |
|
|
10楼#
发布于:2003-05-06 23:47
我觉得是在Ezusb_8051Reset()和Ezusb_DownloadIntelHex()两个函数里,在这两个函数里建立的vendor请求的urb,例如: 多谢你的帮助,我已经给分给你。 下载固件程序?我做一伦的测试,好象是硬件的问题。测试如下: drivermoniter 测试结果: 调用ezusb_8051Reset(fdo,1)时(注意:下位机所有控制由ez_usb core 自动完成): URB返回状态 Urb->UrbHeader.Status = 80000005 (分析:10 - completed with error, endpoint not stalled) KeWaitForSingleObject(.....))返回状态 status = 0 (分析:正不正确????) irp 返回状态 ioStatus.Status = c000009c (分析:正不正确????,好象不对,但没有依据。) drivermoniter 测试结果: 调用ezusb_8051Reset(fdo,1)时(注意:下位机所有控制由ez_usb core 自动完成): Phase: Phase Type: CTL USB control transfer URB USB request block USTS USB status Device Phase Data Description Time Cmd.Phase.Ofs(rep) ------ ----- ----------- ---------------- ----- ------------------ 9.0 CTL 40 a0 92 7f VENDOR 10sc 1.1.0(2) 00 00 01 00 1.1.4 9.0 USTS 05 00 00 80 no response 242ms 1.2.0 9 URB 50 00 08 00 CONTROL TRANSFER 34us 1.3.0 05 00 00 80 1.3.4 9.0 CTL 40 a0 6c 14 VENDOR 616us 3.1.0 00 00 10 00 3.1.4 总的来说,是不是我的硬件(包括D+ D-)有问题? ;) |
|
11楼#
发布于:2003-05-06 23:54
请问zhongsion大侠, 我还没有解决呢。 :( |
|
12楼#
发布于:2003-05-07 13:23
请问zhongsion大侠,
你如何解决的SetupDiEnumDeviceInterfaces()返回无效的 问题的, 我用的guid是用HidD_GetHidGuid()函数获得的全局量, 请赐教小弟, 先谢谢了! 我也遇到这种情况!紧急求助!!! |
|
13楼#
发布于:2003-05-07 14:00
Urb->UrbHeader.Status = 80000005 我不知道
status = 0 是正确的, 但是你irp的返回status是不对的,你用softice跟踪一下,看是那里出了问题吧。 |
|
14楼#
发布于:2003-05-08 21:31
jinghuiren兄:
快帮忙,问题已到了关键时刻! 怎么我编译ezusbsys.c 时连接出错:cannot open input file \"obj\\i386\\ezusbsys.obj\" 是不是我的选项有问题??我以前也遇到同样的问题,最后是找一个提示缺少的文件。你可以给一个文件给我吗?多谢!!! |
|
15楼#
发布于:2003-05-09 13:47
那个文件?
|
|
16楼#
发布于:2003-05-09 15:51
就是:ezusbsys.obj :(
|
|
17楼#
发布于:2003-05-09 21:23
那个文件? 完整的错误信息是: link() : error LNK1181: cannot open input file \"obj\\i386\\ezusbsys.obj\" makefile 是EZUSBDRV自带的那个,我只不过修改了一下Ezusbsys.c然后重新build;而且这个环境build 其它的都不会有问题.为什么?我已找了整个网站,连google都用上了,但还是不能找到解决答案。烦烦烦...............@_@ |
|
18楼#
发布于:2003-05-09 22:33
你是不是装了DS,如果是就可能是这个问题,你到project菜单下的settings里的最后一项post-build step里,看那个c:\\PROGRA~1\\COMPUW~1\\SOFTIC~1\\SoftICE\\nmsym.exe /translate:source,package,always .\\objchk\\i386\\D12TEST.sys
设置对不对,很可能是这里的问题。 |
|
19楼#
发布于:2003-05-11 22:49
你是不是装了DS,如果是就可能是这个问题,你到project菜单下的settings里的最后一项post-build step里,看那个c:\\PROGRA~1\\COMPUW~1\\SOFTIC~1\\SoftICE\\nmsym.exe /translate:source,package,always .\\objchk\\i386\\D12TEST.sys 那个问题我已经解决了,但到现在为止,问题是这样: 1。枚举过程已通过; 2。复位8051时,不能正确返回。 现在,我真的想不到是什么问题。老兄帮帮忙吧! :( |
|
上一页
下一页