Поделиться через


Проверка ошибок 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.

  • Дополнительные общие сведения об устранении неполадок см. в разделе "Анализ данных с синим экраном".