Библиотека, которая следит за драйверами
Писать драйвер устройства с нуля сложно, поэтому Microsoft даёт разработчикам готовую основу — Windows Driver Frameworks, сокращённо WDF; её часть для драйверов ядра называется KMDF. Библиотека берёт на себя общую для всех работу: очереди запросов, переходы между режимами питания, реакцию на подключение и отключение устройства. Взамен драйвер обязан соблюдать её правила. Когда библиотека видит, что правило нарушено грубо и продолжать нельзя, Windows останавливается с кодом 0x10D. По документации Microsoft, на этой основе построены, например, собственные драйверы USB 3 в Windows.
У кода есть параметры, и первый из них — номер конкретного нарушения. Значение 0x1 означает, что драйвер не уложился в отведённое время при операции с питанием: это переход в сон, выход из него или отключение устройства ради экономии энергии. 0x2 — попытка захватить блокировку, которая уже занята. 0x4 — в функцию передали пустое значение там, где оно обязательно. 0xC и 0xD связаны со сменой состояния устройства и управлением его питанием. Владельцу компьютера номера мало что скажут, а мастеру сразу задают направление поиска.
Отделить программную причину от аппаратной помогают обстоятельства сбоя. Программная картина: экраны начались после обновления Windows, установки фирменной утилиты ноутбука, драйвера клавиатуры, док-станции или Bluetooth-адаптера и повторяются в одной и той же ситуации. Аппаратная: сбой приходит при подключении конкретного устройства или шевелении кабеля, устройство то пропадает, то появляется в системе, а после удара или залития ноутбука вдобавок отказывают клавиши или порт. В первом случае хватает правильного драйвера, во втором драйвер лишь честно сообщает о странном поведении железа.
