阅读:1212回复:5
求教关于多个相同设备连接在同一电脑的驱动开发
驱动在winXP下可用,通过外接hub连接多个相同设备到一个usb端口,都可正常使用。但是设备插入hub的顺序必须按照hub的port号码从小到大,就是说按照1->2->3->4 的顺序才可以,要是不按顺序,比如先插port 4 ->port 3->port 2 就会兰屏。用的方法是在驱动里给先后插入的相同设备编号命名,然后建立符号链接。
另外,相同的驱动在win2000下不可用,调试显示驱动没有被调用。按道理winXP跟win2000不应该有什么不同,哪位大侠知道这是怎么回事?是不是win2000系统的usbhub.sys跟usbd.sys有问题?该怎么办呐? 谢谢 |
|
沙发#
发布于:2004-11-18 19:10
大哥,麻烦把问题写清楚些,好不,你创建符号连接名实现的细节,对内存的使用,不同设备是否使用共享的参数,蓝屏的停止代码是多少?
我也试着这么做过,并且在winxp和win2k中都没有出现你说的需要按顺序插入的问题,使用一切正常,但利用符号连接名和应用程序通讯的时候有问题。自动创建的USB设备实例名跟插入的USB端口是有关联的,因此不要试图依赖它。 [编辑 - 11/18/04 by abanwjc] |
|
|
板凳#
发布于:2004-11-19 13:37
hi,
我用下面程序取得deviceObject,经过一系列初始化后(都是标准表达)用IoCreateSymbolicLink建立符号链接。 for(InstanceNumber = 0; InstanceNumber <MAX_SUPPORTED_DEVICE; InstanceNumber++) { status = BuildUnicodeString(&DeviceName, deviceNameBuffer, InstanceNumber); if(NT_SUCCESS(status)) { DbgPrint("InstanceNumber is : %X \n", InstanceNumber); ntStatus = IoCreateDevice( DriverObject, sizeof(DEVICE_EXTENSION), &DeviceName, FILE_DEVICE_UNKNOWN, 0, FALSE, &deviceObject ); } if(ntStatus != STATUS_OBJECT_NAME_COLLISION) break; } 下面是用WinDbg分析的memory dump ******************************************************************************* * * * Bugcheck Analysis * * * ******************************************************************************* SYSTEM_THREAD_EXCEPTION_NOT_HANDLED (7e) This is a very common bugcheck. Usually the exception address pinpoints the driver/function that caused the problem. Always note this address as well as the link date of the driver/image that contains this address. Arguments: Arg1: c0000005, The exception code that was not handled Arg2: 8050f5eb, The address that the exception occurred at Arg3: fc90b874, Exception Record Address Arg4: fc90b574, Context Record Address Debugging Details: ------------------ Database SolnDb not connected EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - The instruction at "0x%08lx" referenced memory at "0x%08lx". The memory could not be "%s". FAULTING_IP: nt!RtlCompareMemory+14 8050f5eb f3a7 rep cmpsd EXCEPTION_PARAMETER1: fc90b874 CONTEXT: fc90b574 -- (.cxr fffffffffc90b574) eax=812250e8 ebx=00000000 ecx=00000006 edx=81231b48 esi=00000000 edi=e1ad2a38 eip=8050f5eb esp=fc90b93c ebp=fc90b968 iopl=0 nv up ei pl nz na po cy cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010207 nt!RtlCompareMemory+14: 8050f5eb f3a7 rep cmpsd ds:00000000=???????? es:e1ad2a38=00530043 Resetting default context DEFAULT_BUCKET_ID: DRIVER_FAULT BUGCHECK_STR: 0x7E LAST_CONTROL_TRANSFER: from fc615092 to 8050f5eb STACK_TEXT: fc90b940 fc615092 00000000 e1ad2a38 0000001a nt!RtlCompareMemory+0x14 fc90b968 fc615304 ffb2b0e8 000011f1 00009000 usbhub!USBH_CheckDeviceIDUnique+0x58 fc90b9b0 fc6127fc ffb2b0e8 00000002 00000103 usbhub!USBH_CreateDevice+0x24c fc90b9e8 fc60d77e 00000002 812333f8 812333f8 usbhub!USBH_FdoQueryBusRelations+0x1cc fc90ba30 fc60d97c ffb2b0e8 812333f8 fc90ba7c usbhub!USBH_FdoPnP+0xf6 fc90ba40 804ec04f ffb2b030 812333f8 fc90babc usbhub!USBH_HubDispatch+0x5c fc90ba50 8055b50d 00000000 81104c58 81104c58 nt!IopfCallDriver+0x31 fc90ba7c 80505cc8 ffb2b030 fc90ba98 81104d38 nt!IopSynchronousCall+0xb8 fc90babc 805adb93 00000000 ffbdb030 00000001 nt!IopQueryDeviceRelations+0x39 fc90bad0 805adb66 81104c58 00000001 81104c58 nt!PipEnumerateDevice+0x20 fc90bd18 805af082 81104c58 00000001 00000000 nt!PipProcessDevNodeTree+0x1b1 fc90bd4c 805057fa 00000003 80543d40 80548abc nt!PiProcessReenumeration+0x5e fc90bd74 804ebd08 00000000 00000000 8128d3c8 nt!PipDeviceActionWorker+0x133 fc90bdac 80559026 00000000 00000000 00000000 nt!ExpWorkerThread+0xfe fc90bddc 8050f513 804ebc35 00000001 00000000 nt!PspSystemThreadStartup+0x34 00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x16 FOLLOWUP_IP: usbhub!USBH_CheckDeviceIDUnique+58 fc615092 3bc6 cmp eax,esi FOLLOWUP_NAME: MachineOwner SYMBOL_NAME: usbhub!USBH_CheckDeviceIDUnique+58 MODULE_NAME: usbhub IMAGE_NAME: usbhub.sys DEBUG_FLR_IMAGE_TIMESTAMP: 3b7d868f STACK_COMMAND: .cxr fffffffffc90b574 ; kb BUCKET_ID: 0x7E_usbhub!USBH_CheckDeviceIDUnique+58 Followup: MachineOwner |
|
地板#
发布于:2004-11-19 17:10
BugCheck 7E, {c0000005, 8050f5eb, fc90b874, fc90b574}
Probably caused by : usbhub.sys ( usbhub!USBH_CheckDeviceIDUnique+58 ) 这个编号 0xc0000005 exception 似乎是usbhub.sys里的。 不过确实出现这个兰屏的时候我的驱动还没有被调用。 谢了 |
|
地下室#
发布于:2004-11-20 23:50
http://support.microsoft.com/default.aspx?scid=kb;en-us;243405&sd=tech
|
|
|
5楼#
发布于:2004-11-23 11:04
谢了,不过这是给NT 4.0的,而且不涉及usbhub.sys
|
|