错误检查 0xC2:BAD_POOL_CALLER

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

重要

这篇文章适合程序员阅读。 如果你是在使用计算机时收到蓝屏错误代码的客户,请参阅蓝屏错误疑难解答

BAD_POOL_CALLER 参数

参数 1 表示违规类型。

参数 1 参数 2 参数 3 参数 4 错误消息的原因

0x00

0

池类型

池标记

当前线程请求零字节池分配。

0x01,

0x02,

0x04

指向池标头的指针

池标头内容的第一部分

0

池标头已损坏。

0x06

Reserved

指向池标头的指针

池标头内容

当前线程试图释放已释放的池。

0x07

Reserved

池标头内容

被释放的池块的地址

当前线程试图释放已释放的池。

0x08

当前 IRQL

池类型

分配的大小(以字节为单位)

当前线程试图在无效的 IRQL 处分配池。

0x09

当前 IRQL

池类型

池地址

当前线程试图在无效的 IRQL 处释放池。

0x0A

池地址

分配器的标记

试图释放中使用的标记

当前线程试图使用错误的标记释放池内存。

(内存可能属于另一个组件。)

0x0B,

0x0C,

或 0x0D

池地址

池分配的标记

配额进程指针错误

当前线程试图释放已损坏的池分配的配额。

0x40

开始地址

系统地址空间的开始

0

当前线程试图释放用户模式地址处的内核池。

0x41

开始地址

物理页帧

最高物理页帧

当前线程试图释放未分配的非分页池地址。

0x42

或 0x43

正在释放的地址

0

0

当前线程试图释放从未在任何池中的虚拟地址。

0x44

开始地址

Reserved

0

当前线程试图释放未分配的非分页池地址。

0x46

开始地址

0

0

当前线程试图释放无效的池地址。

0x47

开始地址

物理页帧

最高物理页帧

当前线程试图释放未分配的非分页池地址。

0x48

开始地址

预留

预留

当前线程试图释放未分配的分页池地址。

0x50

开始地址

从分页池开始的起始偏移量(以页为单位)

分页池的大小(以字节为单位)

当前线程试图释放未分配的分页池地址。

0x60

开始地址

0

0

当前线程试图释放无效的连续内存地址。

MmFreeContiguousMemory 的调用方正在传递错误的指针。)

0x99

正在释放的地址

0

0

当前线程试图释放具有无效地址的池。

(此代码也可能表示池标头已损坏。)

0x9A

池类型

请求的字节数

池标记

当前线程将分配请求标记为 MUST_SUCCEED。

(不再支持此池类型。)

0x9B

池类型

请求的字节数

调用方的地址

当前线程尝试分配标记为 0 的池

(这无法跟踪,并可能损坏现有的标记表。)

0x9C

池类型

请求的字节数

调用方的地址

当前线程尝试分配标记为“BIG”的池:

(这无法跟踪,并可能损坏现有的标记表。)

0x9D

使用的池标记不正确

池类型

调用方的地址

当前线程试图用不包含任何字母或数字的标记分配池。 使用此类标记会使跟踪池问题变得困难。

0x41286

预留

预留

从分页池开始的起始偏移量(以页为单位)

当前线程试图在分配过程中释放分页池地址。

_POOL_TYPE 代码在 Ntddk.h 中枚举。 具体而言,0 表示非分页池,1 表示分页池。

原因

当前线程发出了无效的池请求。 通常,这处于错误的 IRQL 级别,或者两次释放相同的内存分配等。

解决方法

在启用内存池选项的情况下激活驱动程序验证程序,以获取有关这些错误的详细信息并查找故障驱动程序。

驱动程序验证程序

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

Windows 内存诊断

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