BAD_POOL_CALLER 参数

参数 1 表示违规类型。

参数 1参数 2参数 3参数 4错误原因
0x000池类型池标记当前线程请求零字节池分配。
0x01,0x02,0x04指向池头的指针池头内容的第一部分0池头已损坏。
0x06保留指向池头的指针池头内容当前线程试图释放已被释放的池。
0x07保留Pool header contents被释放的池块地址当前线程试图释放已经被释放的池。
0x08当前 IRQL池类型分配大小,以字节为单位当前线程尝试在无效的 IRQL 上分配池。
0x09当前 IRQL池类型 池地址当前线程试图以无效的 IRQL 释放池。
0x0A分配器标签的地址尝试释放中使用的标签当前线程试图通过使用错误的标签来释放池内存。
(内存可能属于另一个组件。)池分配标记的
0x0B,0x0C,or 0x0D地址错误配额进程指针当前线程试图在损坏的池分配上释放配额。起始地址系统地址空间的起始0当前线程试图在用户模式地址释放内核池。起始地址物理页框最高物理页框当前线程试图释放未分配的非分页池地址。地址正在释放
0x4000当前线程试图释放一个从未在任何池中的虚拟地址。起始地址
0x41保留0当前线程试图释放未分配的非分页池地址。起始地址
0x42or 0x4300当前线程试图释放无效的池地址。起始地址
0x44物理页框最高物理页框当前线程试图释放未分配的非分页池地址。起始地址
0x46保留保留当前线程试图释放未分配的分页池地址。起始地址
0x47起始偏移量,以页为单位,从分页池的开头开始 分页池的大小,以字节为单位当前线程试图释放未分配的分页池地址。起始地址
0x4800当前线程试图释放无效的连续内存地址。
(MmFreeContiguousMemory 的调用者正在传递一个错误的指针。)
正在释放的地址
0x5000当前线程试图用无效地址释放池。
(此代码还可以指示池标头中的损坏。)
池类型
0x60请求的字节数池标记当前线程标记了一个分配请求 MUST_SUCCEED。
(不再支持此池类型。)
池类型
0x99请求的字节数调用者地址当前线程尝试分配一个标记为 0 的池
(这将无法跟踪,并且可能破坏现有的标记表。)
池类型
0x9A数量请求的字节数调用者的地址当前线程试图分配一个带有“BIG”标签的池。
(这将是不可追踪的,并且可能会破坏现有的标签表。)使用了
不正确的池标签
0x9B池类型调用者的地址当前线程尝试使用不包含任何字母或者数字的标记分配池。使用此类标签会使跟踪池问题变得困难。保留
0x9C保留从分页池开始的起始偏移量,以页为单位当前线程试图在分配过程中释放分页池地址。{翻译单元格}
0x9D{翻译单元格}{翻译单元格}{翻译单元格}{翻译单元格}
0x41286{翻译单元格}{翻译单元格}{翻译单元格}{翻译单元格}

_POOL_TYPE 代码在 Ntddk.h 中列举。
特别是,0 表示非分页池,1 表示分页池。

on  it road.com

原因

当前线程发出了无效的池请求。
通常这是在错误的 IRQL 级别或者双重释放相同的内存分配等。

Windows 蓝屏代码 0xC2:BAD_POOL_CALLER

BAD_POOL_CALLER 错误检查的值为 0x000000C2.
这表明当前线程正在发出错误的池请求。

解决方法

启用内存池选项的情况下激活驱动程序验证程序,以获取有关这些错误的更多信息并定位有故障的驱动程序。

驱动程序验证器

Driver Verifier 是一种实时运行以检查驱动程序行为的工具。
如果它在驱动程序代码的执行中发现错误,它会主动创建一个异常以允许进一步检查该部分驱动程序代码。
驱动程序验证程序管理器内置于 Windows 中,可在所有 Windows PC 上使用。
要启动驱动程序验证程序管理器,请在命令提示符下键入 Verifier。
我们可以配置要验证的驱动程序。
验证驱动程序的代码在运行时会增加开销,因此请尝试验证尽可能少的驱动程序。
有关详细信息,请参阅驱动程序验证程序。

Windows 内存诊断

特别是,对于内存池损坏的情况,请运行 Windows 内存诊断工具,尝试隔离物理内存作为原因。
在控制面板搜索框中,键入内存,然后选择诊断计算机的内存问题。
运行测试后,使用事件查看器在系统日志下查看结果。
查找 MemoryDiagnostics-Results 条目以查看结果。

日期:2020-09-17 00:16:10 来源:oir作者:oir