我基于 Windows DDK 的示例“passthru”编写了一个简单的数据包过滤驱动程序,当我打开过滤功能时,操作系统崩溃,我从 WinDbg 收到以下消息:
Microsoft (R) Windows 调试器版本 6.12.0002.633 X86 版权所有 (c) Microsoft Corporation。版权所有。
加载转储文件 [D:\iCheckTool\dump\MEMORY.DMP] 内核摘要转储文件:只有内核地址空间可用
警告:路径元素开头的空格符号搜索路径为:D:\iCheckTool\dump;SRV*E:\DebuggingSymbols*http://msdl.microsoft.com/download/symbols;SRV*C:\MyLocalSymbols*http://192.168.20.25/zfprisymbols/ 可执行搜索路径为:Windows XP Kernel Version 2600 (Service包 3) MP (2 procs) 免费 x86 兼容产品:WinNt,套件:TerminalServer SingleUserTS 构建者:2600.xpsp_sp3_qfe.120504-1617 机器名称:内核基础 = 0x804d8000 PsLoadedModuleList = 0x8055e720 调试会话时间:9 月 11 日星期二 09:41: 2012 年 2 月 828 日(UTC + 8:00)系统正常运行时间:0 天 0:02:30.578 加载内核符号 .................... ...................................................... .............................. 加载用户符号 PEB被调出 (Peb.Ldr = 7ffd800c)。键入“.hh dbgerr001”
- *
- 错误检查分析 *
- *
使用 !analyze -v 获取详细的调试信息。
错误检查 C5、{4、2、1、8054c10f}
可能是由于:Pool_Corruption (nt!ExDeferredFreePool+109)
跟进:池腐败
1:kd>!分析-v
- *
- 错误检查分析 *
- *
DRIVER_CORRUPTED_EXPOOL (c5) 试图以过高的中断请求级别 (IRQL) 访问可分页(或完全无效)地址。这是由损坏系统池的驱动程序引起的。针对任何新的(或可疑的)驱动程序运行驱动程序验证程序,如果没有发现罪魁祸首,则使用 gflags 启用特殊池。参数: Arg1:00000004,内存引用 Arg2:00000002,IRQL Arg3:00000001,值 0 = 读取操作,1 = 写入操作 Arg4:8054c10f,引用内存的地址
调试细节:
BUGCHECK_STR:0xC5_2
当前_IRQL:2
FAULTING_IP: nt!ExDeferredFreePool+109 8054c10f 895f04 mov
dword ptr [edi+4],ebxDEFAULT_BUCKET_ID:DRIVER_FAULT
PROCESS_NAME:explorer.exe
trap_frame:b42555dc - (.trap 0xfffffffffb425555dc)errcode = 00000002 eax = 89cc1c60 ebx = 89e4ded8 ecx = 000001ff edx = 89cc2a78 esi = 80565d20 edi = 00000000 EIP = 8054C10F ESP = B4255650 EBP = B4255650 EI NZ = 0 NV UP EI NZ AC PE cy cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010297 nt!ExDeferredFreePool+0x109: 8054c10f 895f04 mov dword ptr [edi+4],ebx ds:0023:00000004=??? ???重置默认范围
LOCK_ADDRESS: 8055c4e0 -- (!locks 8055c4e0)
资源@nt!PiEngineLock (0x8055c4e0) 可用争用计数 = 1 1 总锁
PNP_TRIAGE:锁定地址:0x8055c4e0 线程数:0 线程地址:0x00000000 线程等待:0x0
LAST_CONTROL_TRANSFER:从 8054c10f 到 80545768
STACK_TEXT:!!!!!b42555dc 8054c10f badb0d00 89cc2a78 b8338538 NT KiTrap0E + 0x238 b4255690 8054c75f 00000001 8055c100 00020019 NT ExDeferredFreePool + 0x109 b42556d0 8058635e 899522e8 00000000 b42557d8新台币ExFreePoolWithTag + 0x47f b42556fc 805878b8 c0000023 00000007 8058758c NT PiGetDeviceRegistryProperty +量0x108 b425578c bf879f40 8a523030 00000001 00000100 NT IoGetDeviceProperty + 0x25e b42558f8 bf879735 00000000 e1b5e008 00000000 WIN32K DrvEnumDisplayDevices + 0x33b b425591c 8054268c 00000000 00000000 0007ecc4 WIN32K NtUserEnumDisplayDevices + 0x7c b425591c 7c92e514 00000000 00000000 0007ecc4 NT KiFastCallEntry + 0xFC有警告:!!!IP帧中没有任何已知的模块。以下框架可能是错误的。0007f010 00000000 00000000 00000000 00000000 0x7c92e514
堆栈命令:kb
FOLLOWUP_IP: nt!ExDeferredFreePool+109 8054c10f 895f04 mov
dword ptr [edi+4],ebxSYMBOL_STACK_INDEX:1
SYMBOL_NAME: nt!ExDeferredFreePool+109
FOLLOWUP_NAME:池腐败
IMAGE_NAME:Pool_Corruption
DEBUG_FLR_IMAGE_TIMESTAMP:0
MODULE_NAME:Pool_Corruption
FAILURE_BUCKET_ID: 0xC5_2_nt!ExDeferredFreePool+109
BUCKET_ID: 0xC5_2_nt!ExDeferredFreePool+109
跟进:池腐败
谁能告诉我是什么导致了这个问题以及如何解决它?谢谢。