mycookie
驱动小牛
驱动小牛
  • 注册日期2002-12-09
  • 最后登录2010-08-11
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1247回复:12

用usb verifier测试中遇到的问题(70分,痛苦中)

楼主#
更多 发布于:2004-05-27 11:22
各位高手:
    有一个极度恼人的问题:我在用USB VERIFIER测试驱动的时候,测试机器出现重起。我用windbg跟踪发现问题在于:我自己建立了一个IRP,往下发送,
mini*.dmp显示:
An attempt was made to access a pageable (or completely invalid) address at an
interrupt request level (IRQL) that is too high.  This is usually
caused by drivers using improper addresses.

Probably caused by : usbehci.sys ( usbehci!EHCI_PollActiveAsyncEndpoint+6a )

注明:我的设备插在一块 NEC 的PCI转到USB的板卡上,usbehci.sys 就是这块卡的驱动。
希望高手指点一下。

[编辑 -  5/27/04 by  mycookie]
mycookie
驱动小牛
驱动小牛
  • 注册日期2002-12-09
  • 最后登录2010-08-11
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-06-10 15:43
我看过了在枚举的时候系统会调用这个地方(只要是USB设备)平时在传输数据的时候不会调用但在加了USB VERIFIER后就出现这个问题)
mycookie
驱动小牛
驱动小牛
  • 注册日期2002-12-09
  • 最后登录2010-08-11
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-10 15:39
*** Fatal System Error: 0x000000d1
                       (0x00000008,0x00000002,0x00000000,0xF87FF37A)

Break instruction exception - code 80000003 (first chance)

A fatal system error has occurred.
Debugger entered on first try; Bugcheck callbacks have not been invoked.

A fatal system error has occurred.

Connected to Windows XP 2600 x86 compatible target, ptr64 FALSE
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for ntkrnlmp.exe -
Loading Kernel Symbols
..............................................................................................
Loading unloaded module list
......
Loading User Symbols
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

Use !analyze -v to get detailed debugging information.

BugCheck D1, {8, 2, 0, f87ff37a}

***** Kernel symbols are WRONG. Please fix symbols to do analysis.

*** ERROR: Module load completed but symbols could not be loaded for usbehci.sys
Probably caused by : usbehci.sys ( usbehci+237a )

Followup: MachineOwner
---------

nt!DbgBreakPointWithStatus+0x4:
8051d4b0 cc               int     3
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

DRIVER_IRQL_NOT_LESS_OR_EQUAL (d1)
An attempt was made to access a pageable (or completely invalid) address at an
interrupt request level (IRQL) that is too high.  This is usually
caused by drivers using improper addresses.
If kernel debugger is available get stack backtrace.
Arguments:
Arg1: 00000008, memory referenced
Arg2: 00000002, IRQL
Arg3: 00000000, value 0 = read operation, 1 = write operation
Arg4: f87ff37a, address which referenced memory

Debugging Details:
------------------

***** Kernel symbols are WRONG. Please fix symbols to do analysis.


READ_ADDRESS: unable to get nt!MmPoolCodeEnd
unable to get nt!MmSpecialPoolEnd
unable to get nt!MmPagedPoolEnd
unable to get nt!MmNonPagedPoolEnd
unable to get nt!MmNonPagedPoolStart
unable to get nt!MmSpecialPoolStart
unable to get nt!MmPagedPoolStart
unable to get nt!MiSessionPoolStart
unable to get nt!MiSessionPoolEnd
unable to get nt!MmNonPagedPoolExpansionStart
unable to get nt!MmPoolCodeStart
 00000008

CURRENT_IRQL:  2

FAULTING_IP:
usbehci+237a
f87ff37a f6470880         test    byte ptr [edi+0x8],0x80

DEFAULT_BUCKET_ID:  DRIVER_FAULT

BUGCHECK_STR:  0xD1
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-06-09 16:31
如果可以把usbehci的EHCI_PollActiveAsyncEndpoint函数贴出来
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-06-09 16:30
Probably caused by : usbehci.sys ( usbehci!EHCI_PollActiveAsyncEndpoint+6a )
那行代码是什么?
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
mycookie
驱动小牛
驱动小牛
  • 注册日期2002-12-09
  • 最后登录2010-08-11
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-06-09 10:21
dear all:
  哪位仁慈的大哥能指点一下,是固件的问题吗?

[编辑 -  6/9/04 by  mycookie]
mycookie
驱动小牛
驱动小牛
  • 注册日期2002-12-09
  • 最后登录2010-08-11
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-05-27 16:42
上面是DDK 例子吧。我早就看过了,
我用的是
requestBuffer = ExAllocatePool(NonPagedPool , requestBufferLength);

难道有什么问题吗?
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
7楼#
发布于:2004-05-27 16:39
示例代码:

   bootSector = ExAllocatePool(
      NonPagedPoolCacheAligned,
      BOOT_SECTOR_SIZE
      );
   if (!bootSector)
   {
      return STATUS_INSUFFICIENT_RESOURCES;
   }

   offset.LowPart = offset.HighPart = 0;
   irp = IoBuildAsynchronousFsdRequest(
      IRP_MJ_READ,
      DisketteExtension->DeviceObject,
      bootSector,
      BOOT_SECTOR_SIZE,
      &offset,
      NULL);
八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
8楼#
发布于:2004-05-27 16:37
我检查过了我的参数没有指向NULL,不会要我把整个irp放在nonpage上吧!


IRP也必须在NonPagedPool中,用ExAllocatePool或ExAllocatePoolWithTag分配(指定NonPagedPool参数)。
八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
mycookie
驱动小牛
驱动小牛
  • 注册日期2002-12-09
  • 最后登录2010-08-11
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-05-27 16:06
楼上大哥:
    你告诉我该如何把整个IRP放在NONPAGE上。
              


             谢谢!
mycookie
驱动小牛
驱动小牛
  • 注册日期2002-12-09
  • 最后登录2010-08-11
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-05-27 15:06
我检查过了我的参数没有指向NULL,不会要我把整个irp放在nonpage上吧!
mycookie
驱动小牛
驱动小牛
  • 注册日期2002-12-09
  • 最后登录2010-08-11
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-05-27 14:27
我是用

requestBuffer是nonpage,irp是不是也要放在nonpage中
irp = IoBuildAsynchronousFsdRequest(
READER_EXTENSION(UsbIoControlCode),//IRP_MJ_WRITE,
NextStackDevice,
requestBuffer,
requestBufferLength,//sizeof(requestBuffer)
&startingOffset,
       &ioStatus
       );
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
12楼#
发布于:2004-05-27 11:40
从出错的信息看,应该是内存的问题。
可能原因:

1. 你的IRP创建在PagedPool中

2. 某些指针是空指针.
八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
游客

返回顶部