错误检查 0x18:REFERENCE_BY_POINTER
REFERENCE_BY_POINTER 错误检查的值为 0x00000018。 这表示对象的引用计数对于对象的当前状态是非法的。
重要
这篇文章适合程序员阅读。 如果你是在使用计算机时收到蓝屏错误代码的客户,请参阅蓝屏错误疑难解答。
REFERENCE_BY_POINTER 参数
参数 | 说明 |
---|---|
1 |
正在降低其引用计数的对象的对象类型。 |
2 |
正在降低其引用计数的对象。 |
3 |
预留 |
4 |
预留 |
原因
对象的引用计数对于对象的当前状态是非法的。 每当驱动程序使用指向对象的指针时,驱动程序都会调用内核例程,以将对象的引用计数加一。 使用指针完成驱动程序后,驱动程序将调用另一个内核例程,以将引用计数减一。
驱动程序必须与对增加引用计数(引用)和减少(取消引用)的例程的调用匹配。 此错误检查是由对象的引用计数不一致引起的。 通常,不一致是由驱动程序导致的,该驱动程序会减少对象的引用计数过多次,从而发出额外的调用来取消引用对象。 可能会发生此错误检查的原因是对象的引用计数在对象仍有打开句柄时将变为零。 当对象的引用计数下降到零以下时,也可能会发生这种情况,而无论对象是否有打开的句柄。
解决方法
确保驱动程序匹配会调用增加和减少对象的引用计数的例程。 确保驱动程序不会对取消引用对象的例程进行额外的调用(请参阅参数 2)。
可以使用调试器来帮助分析此问题。 有关详细信息,请参阅使用 Windows 调试程序 (WinDbg) 进行故障转储分析。 !analyze 调试扩展显示有关错误检查的信息,并有助于确定根本原因。
若要查找对象的句柄和指针计数,请使用 !object 调试器命令。
kd> !object 地址
其中 地址 是参数 2 中给定对象的地址。
您还可以在导致此停止代码的代码中设置断点,并尝试单步执行故障代码。
如果你不具备使用 Windows 调试器来解决此问题的能力,则可以使用一些基本的故障排除技术。
在事件查看器中检查系统日志以获取其他错误消息,这可能有助于识别导致此错误检查的设备或驱动程序。
如果在错误检查消息中标识了驱动程序,请禁用该驱动程序,或与制造商联系以获取驱动程序更新。
确保安装的任何新硬件都与已安装的 Windows 版本兼容。 例如,可以在 Windows 10 规范中获取所需硬件的相关信息。
有关其他常规故障排除信息,请参阅分析错误检查蓝屏数据。