Как устроен счёт ссылок и где он ломается
Когда драйверу нужен объект ядра, он не просто берёт его, а сообщает системе, что начал им пользоваться, и счётчик ссылок растёт на единицу. Закончив работу, драйвер сообщает обратное, и счётчик уменьшается. Так Windows знает, когда объект можно безопасно удалить: в тот момент, когда им больше никто не пользуется. Схема надёжна до тех пор, пока каждый драйвер строго соблюдает пару — сколько раз занял, столько и отпустил.
По описанию Microsoft, этот синий экран вызывает рассогласование счётчика, и, как правило, виноват драйвер, который уменьшает его лишний раз. Счётчик может упасть до нуля, хотя к объекту ещё открыты обращения, или даже уйти ниже нуля. Продолжать работу с таким объектом опасно: другой компонент может обратиться к памяти, которую система уже отдала под другие нужды, и повредить что угодно, вплоть до файлов на диске. Поэтому такой сбой нельзя переждать или пропустить: остановка здесь — меньшее из зол. Поэтому система останавливается сразу, как только замечает несоответствие, а в параметрах остановки записывает тип объекта и его адрес.
Для владельца компьютера это означает, что искать надо не повреждённый файл Windows, а драйвер с ошибкой. Вопрос «система или железо» решается по картине сбоев. Если код один и тот же, появляется в похожих обстоятельствах и начался после установки драйвера, устройства или программы, картина программная. Если синие экраны каждый раз с другим кодом, случаются в случайные моменты, а компьютер вдобавок зависает и перезагружается сам, стоит сразу держать в уме память, накопитель и питание: искажённые данные тоже способны сбить любой счётчик.
