0x00000018: REFERENCE_BY_POINTER

#1 2021.04.26 12:32:38

0

Синий экран 0x00000018 указывает, что счетчик ссылок на объект имеет недопустимое значение для текущего состояния объекта.

ПАРАМЕТРЫ REFERENCE_BY_POINTER:
- Тип объекта, счетчик ссылок которого понижается;
- Объект, счетчик ссылок которого понижается;
- Зарезервированный параметр;
- Зарезервированный параметр.

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

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

РЕШЕНИЕ
Удостоверьтесь, что соответствующие драйвера вызывают подпрограммы, которые увеличивают и уменьшают счетчик ссылок объекта. Удостоверьтесь, что Ваш драйвер не делает дополнительные вызовы подпрограмм, которые разыменовывают объект (см. параметр 2).

Вы можете использовать отладчик, чтобы проанализировать эту ошибку. Чтобы найти дескриптор и счетчик указателя на объект, используют нижеприведенную команду отладчика.

kd> !object address

Где object address - адрес объекта, данного в параметре 2.