parkat
驱动牛犊
驱动牛犊
  • 注册日期2003-12-12
  • 最后登录2005-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1212回复:5

求教关于多个相同设备连接在同一电脑的驱动开发

楼主#
更多 发布于:2004-11-18 18:09
驱动在winXP下可用,通过外接hub连接多个相同设备到一个usb端口,都可正常使用。但是设备插入hub的顺序必须按照hub的port号码从小到大,就是说按照1->2->3->4 的顺序才可以,要是不按顺序,比如先插port 4 ->port 3->port 2 就会兰屏。用的方法是在驱动里给先后插入的相同设备编号命名,然后建立符号链接。
另外,相同的驱动在win2000下不可用,调试显示驱动没有被调用。按道理winXP跟win2000不应该有什么不同,哪位大侠知道这是怎么回事?是不是win2000系统的usbhub.sys跟usbd.sys有问题?该怎么办呐?

谢谢
abanwjc
驱动小牛
驱动小牛
  • 注册日期2003-12-17
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分29分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-11-18 19:10
大哥,麻烦把问题写清楚些,好不,你创建符号连接名实现的细节,对内存的使用,不同设备是否使用共享的参数,蓝屏的停止代码是多少?
我也试着这么做过,并且在winxp和win2k中都没有出现你说的需要按顺序插入的问题,使用一切正常,但利用符号连接名和应用程序通讯的时候有问题。自动创建的USB设备实例名跟插入的USB端口是有关联的,因此不要试图依赖它。

[编辑 -  11/18/04 by  abanwjc]
“老婆,快搬个凳子出来,一起看火星来的楼主升天啦!”
parkat
驱动牛犊
驱动牛犊
  • 注册日期2003-12-12
  • 最后登录2005-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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
parkat
驱动牛犊
驱动牛犊
  • 注册日期2003-12-12
  • 最后登录2005-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-11-19 17:10
BugCheck 7E, {c0000005, 8050f5eb, fc90b874, fc90b574}
Probably caused by : usbhub.sys ( usbhub!USBH_CheckDeviceIDUnique+58 )

这个编号 0xc0000005 exception 似乎是usbhub.sys里的。
不过确实出现这个兰屏的时候我的驱动还没有被调用。
谢了
abanwjc
驱动小牛
驱动小牛
  • 注册日期2003-12-17
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分29分
  • 威望4点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-11-20 23:50
http://support.microsoft.com/default.aspx?scid=kb;en-us;243405&sd=tech
“老婆,快搬个凳子出来,一起看火星来的楼主升天啦!”
parkat
驱动牛犊
驱动牛犊
  • 注册日期2003-12-12
  • 最后登录2005-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-11-23 11:04
谢了,不过这是给NT 4.0的,而且不涉及usbhub.sys
游客

返回顶部