bug 检查 0x18:REFERENCE_BY_POINTER

REFERENCE_BY_POINTER bug 检查的值为 0x00000018。 这表示对象的引用计数对于对象的当前状态是非法的。

重要

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

REFERENCE_BY_POINTER 参数

参数 说明

1

正在降低其引用计数的对象的对象类型。

2

正在降低其引用计数的对象。

3

Reserved

4

Reserved

原因

对象的引用计数对于对象的当前状态是非法的。 每当驱动程序使用指向对象的指针时,驱动程序都会调用内核例程,以将对象的引用计数加一。 使用指针完成驱动程序后,驱动程序将调用另一个内核例程,以将引用计数减一。

驱动程序必须与对增加引用计数(引用)和减少(取消引用)的例程的调用匹配。 此 bug 检查是由对象的引用计数不一致引起的。 通常,不一致是由驱动程序导致的,该驱动程序会减少对象的引用计数过多次,从而发出额外的调用来取消引用对象。 可能会发生此 bug 检查的原因是对象的引用计数在对象仍有打开句柄时将变为零。 当对象的引用计数下降到零以下时,也可能会发生这种情况,而无论对象是否有打开的句柄。

解决方法

确保驱动程序匹配会调用增加和减少对象的引用计数的例程。 确保驱动程序不会对取消引用对象的例程进行额外的调用(请参阅参数 2)。

可以使用调试器来帮助分析此问题。 有关详细信息,请参阅使用 Windows 调试程序 (WinDbg) 进行故障转储分析!analyze 调试扩展显示有关 bug 检查的信息,并有助于确定根本原因

若要查找对象的句柄和指针计数,请使用 !object 调试器命令。

kd> !object 地址

其中 地址 是参数 2 中给定对象的地址。

您还可以在导致此停止代码的代码中设置断点,并尝试单步执行故障代码。

如果您不具备使用 Windows 调试器来解决此问题的能力,则可以使用一些基本的故障排除技术。

  • 在事件查看器中检查系统日志以获取其他错误消息,这可能有助于识别导致此 bug 检查的设备或驱动程序。

  • 如果在 bug 检查消息中标识了驱动程序,请禁用该驱动程序,或与制造商联系以获取驱动程序更新。

  • 确保安装的任何新硬件都与已安装的 Windows 版本兼容。 例如,可以在 Windows 10 规范中获取所需硬件的相关信息。

  • 有关其他常规故障排除信息,请参阅蓝屏数据