BSOD
0x00000018: REFERENCE_BY_POINTER
Синий экран 0x00000018 указывает, что счетчик ссылок на объект имеет недопустимое значение для текущего состояния объекта.
Параметры REFERENCE_BY_POINTER:
- Тип объекта, счетчик ссылок которого понижается;
- Объект, счетчик ссылок которого понижается;
- Зарезервированный параметр;
- Зарезервированный параметр.
Причина
Счетчик ссылок на объект имеет недопустимое значение для текущего состояния объекта. Каждый раз, когда драйвер использует указатель на объект, он вызывает подпрограмму ядра, чтобы увеличить счетчик ссылок объекта на единицу. Когда драйвер заканчивает работу с указателем, драйвер вызывает другую подпрограмму ядра, чтобы уменьшить счетчик ссылок на единицу.
Драйверы должны вызывать подпрограммы, которые увеличивают (ссылка), и уменьшают (разыменовывание) счетчик ссылок. Эта ошибка возникает при несоответствии значения счетчика ссылок объекта. Как правило, несогласованность вызвана драйвером, который уменьшает счетчик ссылок объекта слишком много раз, выполняя дополнительные вызовы, которые разыменовывают объект. Эта ошибка может произойти при нулевом значении счетчика ссылок, в то время как все еще есть открытые дескрипторы к объекту.
Решение
Вы можете использовать отладчик, чтобы проанализировать эту ошибку. Чтобы найти дескриптор и счетчик указателя на объект, используют нижеприведенную команду отладчика.
kd> !object address
Где object address - адрес объекта, данного в параметре 2.
{jcomments on}