emissary
驱动牛犊
驱动牛犊
  • 注册日期2006-10-17
  • 最后登录2011-06-14
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望32点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
阅读:1297回复:3

一个莫明的错,有小64K转储

楼主#
更多 发布于:2008-11-06 17:11
在有一次测试中,驱动出现在蓝屏,蓝屏在重启前后连接两次发生。而以前及今后的测试中。都没发生这样的情况。

通过小64K转储分析得到下面结果。


0: kd> !analyze -v
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

IRQL_NOT_LESS_OR_EQUAL (a)
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 a kernel debugger is available get the stack backtrace.
Arguments:
Arg1: 00000016, memory referenced
Arg2: 0000001c, IRQL
Arg3: 00000000, bitfield :
  bit 0 : value 0 = read operation, 1 = write operation
  bit 3 : value 0 = not an execute operation, 1 = execute operation (only on chips which support this level of status)
Arg4: 805033b2, address which referenced memory

MODULE_NAME: ATWatch

FAULTING_MODULE: 804d8000 nt

DEBUG_FLR_IMAGE_TIMESTAMP:  490d8b27

READ_ADDRESS: unable to get nt!MmSpecialPoolStart
unable to get nt!MmSpecialPoolEnd
unable to get nt!MmPoolCodeStart
unable to get nt!MmPoolCodeEnd
00000016

CURRENT_IRQL:  1c

FAULTING_IP:
nt+2b3b2
805033b2 6683781601      cmp     word ptr [eax+16h],1

CUSTOMER_CRASH_COUNT:  1

DEFAULT_BUCKET_ID:  WRONG_SYMBOLS

BUGCHECK_STR:  0xA

LAST_CONTROL_TRANSFER:  from 804fb166 to 805033b2

STACK_TEXT:  
WARNING: Stack unwind information not available. Following frames may be wrong.
f79dbd44 804fb166 f7d6c2c4 f879bde8 864dfc30 nt+0x2b3b2
f79dbd58 f781c5a5 f879bde8 00000000 00000000 nt+0x23166
f79dbd7c 805389dd 844f0738 00000000 865b3da8 ATWatch!NLPGetDosDeviceNameWorker+0xaf [g:\ddk\filter0810\lib\namelookup.c @ 1505]
f79dbdac 805cf858 844f0738 00000000 00000000 nt+0x609dd
f79dbddc 8054634e 805388ee 00000001 00000000 nt+0xf7858
00000000 00000000 00000000 00000000 00000000 nt+0x6e34e


STACK_COMMAND:  kb

FOLLOWUP_IP:
ATWatch!NLPGetDosDeviceNameWorker+af [g:\ddk\filter0810\lib\namelookup.c @ 1505]
f781c5a5 8b7508          mov     esi,dword ptr [ebp+8]

FAULTING_SOURCE_CODE:  
  1501:       }
  1502:     }//else if(newDevExt->NLExtHeader.DosName.Length > 0)*/
  1503:   }//if(t_ControlDeviceObject != NULL)
  1504:
> 1505:     ObDereferenceObject( Context->DeviceObject );
  1506:     ExFreePoolWithTag( Context, NL_POOL_TAG );
  1507:
  1508:     return;
  1509:
  1510: }


SYMBOL_STACK_INDEX:  2

SYMBOL_NAME:  ATWatch!NLPGetDosDeviceNameWorker+af

FOLLOWUP_NAME:  MachineOwner

IMAGE_NAME:  ATWatch.sys

BUCKET_ID:  WRONG_SYMBOLS

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



这代码其实就是 filter 里 namelookup.c 中的。
很明显的,NLPGetDosDeviceNameWorker 工作在 PASSIVE_LEVEL 。是通过 ExQueueWorkItem( &completionContext->WorkItem ,DelayedWorkQueue ); 插入到 system 里执行的。

但是,蓝屏的时候提示 IRQL_NOT_LESS_OR_EQUAL (a) ,而 CURRENT_IRQL:  1c 。。。
天啦。我不懂了。难道微软出错了吗?????
blog:www.emissary.cn
looksail
荣誉会员
荣誉会员
  • 注册日期2005-05-22
  • 最后登录2014-03-15
  • 粉丝2
  • 关注0
  • 积分1016分
  • 威望991点
  • 贡献值0点
  • 好评度239点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-11-07 00:25
是微软错的可能性估计只是你程序错误可能性的万分之一都不到,除非你是大师级人物,否则先找自己的错误


IRQL_NOT_LESS_OR_EQUAL 这个出现的原因太多了,不能在一些IRQL访问分页变量之类的
提问归提问,还是只能靠自己
emissary
驱动牛犊
驱动牛犊
  • 注册日期2006-10-17
  • 最后登录2011-06-14
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望32点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-11-10 09:25
呵呵,当然是开玩笑的。

只不过不明白,为什么都用 ExQueueWorkItem 降低IRQ 了。
为什么这段代码还会运行在 CURRENT_IRQL:  1c
blog:www.emissary.cn
eleqi
驱动小牛
驱动小牛
  • 注册日期2005-12-20
  • 最后登录2014-01-03
  • 粉丝4
  • 关注2
  • 积分172分
  • 威望1475点
  • 贡献值0点
  • 好评度115点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-11-16 23:45
出现此错误码不一定是由于IRQL不正确导致的,好好查查代码
游客

返回顶部