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