Site icon EfmSoft

Что означает код BSOD 0x18 (REFERENCE_BY_POINTER)?

 
Также может означать:
КонстантаТипОС
ERROR_BAD_LENGTHОшибка WindowsWindows
KERN_MEMORY_DATA_MOVEDКод возврата ядра macOSmacOS
ippStsNoOperationInDllСтатус Intel IPPЛюбая
EMFILEerrnoЛюбая
Предыдущий Следующий
CID_HANDLE_DELETION BAD_POOL_HEADER

REFERENCE_BY_POINTER

Bug check REFERENCE_BY_POINTER имеет значение 0x00000018. Это означает, что счётчик ссылок объекта недопустим для его текущего состояния.

Параметры REFERENCE_BY_POINTER

Параметр Описание

1

Тип объекта, счётчик ссылок которого уменьшается.

2

Объект, счётчик ссылок которого уменьшается.

3

Зарезервировано

4

Зарезервировано

Причина

Счётчик ссылок объекта недопустим для текущего состояния объекта. Каждый раз при использовании указателя на объект драйвер вызывает процедуру ядра, увеличивающую счётчик ссылок объекта на единицу. Завершив работу с указателем, драйвер вызывает другую процедуру ядра, уменьшающую счётчик ссылок на единицу.

Драйверы должны согласовывать вызовы процедур, которые увеличивают (добавляют ссылку) и уменьшают (удаляют ссылку) счётчик ссылок. Эта проверка ошибки вызвана несогласованностью счётчика ссылок объекта. Обычно несогласованность вызвана драйвером, который слишком много раз уменьшает счётчик ссылок объекта, выполняя лишние вызовы удаления ссылки. Проверка ошибки может возникнуть, если счётчик ссылок объекта достигает нуля, пока на объект всё ещё открыты дескрипторы. Она также может возникнуть, если счётчик ссылок объекта становится отрицательным независимо от наличия открытых дескрипторов.

Устранение неполадок

Убедитесь, что драйвер согласует вызовы процедур увеличения и уменьшения счётчика ссылок объекта. Убедитесь, что драйвер не выполняет лишние вызовы процедур удаления ссылки на объект, указанный параметром 2.

Для анализа REFERENCE_BY_POINTER можно использовать отладчик. Дополнительные сведения см. в разделе об анализе аварийных дампов с помощью отладчиков Windows (WinDbg). Расширение !analyze выводит сведения о проверке ошибки и помогает определить первопричину.

Чтобы определить число дескрипторов и указателей на объект, используйте команду отладчика !object.

kd> !object address

Где address address — адрес объекта, указанный параметром 2.

Также можно установить breakpoint в коде перед stop code и пошагово пройти до отказавшей инструкции.

Технические ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.

Exit mobile version