Принудительный сбой системы с клавиатуры

При устранении неполадок системы может потребоваться создать файл аварийного дампа для анализа состояния системы. Вы можете принудительно выполнить сбой системы непосредственно с клавиатуры с помощью определенных сочетаний клавиш. Эта возможность полезна, если система не отвечает или когда требуется записать диагностические сведения.

В статье описывается выполнение следующих задач:

  • Настройка параметров реестра для включения сбоев, инициированных клавиатурой
  • Использование сочетаний клавиш для активации сбоя системы
  • Настройка альтернативных сочетаний клавиш

Эта функция работает с клавиатурами PS/2 (Windows 2000 и более поздних версий), USB-клавиатурами (Windows Vista и более поздними версиями) и Hyper-V клавиатурами (Windows 10 версии 1903 и более поздних версий).

Caution

Принудительное завершение работы системы немедленно останавливает систему и может привести к потере данных. Используйте эту функцию только в том случае, если это необходимо для отладки, и убедитесь, что вы сохраните свою работу.

Настройка

Настройте следующие параметры, чтобы включить сбой системы с помощью клавиатуры:

  1. Если требуется записать файл аварийного дампа, необходимо включить такие файлы дампа. Выберите путь и имя файла и выберите размер файла дампа. Для получения более подробной информации см. в разделе «Включение дамп-файла в режиме ядра».

  2. Для клавиатур PS/2: Включите сбой, инициированный клавиатурой, в реестре:

    • Перейдите на HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\i8042prt\Parameters
    • Создание значения с именем CrashOnCtrlScroll
    • Установите значение REG_DWORD на 0x01
  3. USB-клавиатуры требуют включения функции аварийного завершения работы, инициируемой клавиатурой, в реестре.

    • В разделе HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\kbdhid\Parametersреестра создайте значение с именем CrashOnCtrlScroll
    • Задайте для него значение REG_DWORD 0x01.
  4. Чтобы использовать клавиатуры Hyper-V, необходимо включить возможность инициирования сбоя с клавиатуры в реестре.

    • В разделе HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\hyperkbd\Parametersреестра создайте значение с именем CrashOnCtrlScroll
    • Установите его равным значению REG_DWORD 0x01.

Некоторые ноутбуки используют драйвер PS/2 для встроенной клавиатуры, а также поддерживают внешние клавиатуры HID. Для этих систем рассмотрите создание разделов реестра для USB и PS/2, чтобы разрешить использование клавиатуры обоих типов.

Чтобы эти параметры вступили в силу, необходимо перезапустить систему.

После завершения перезагрузки сбой клавиатуры можно инициировать с помощью следующей последовательности горячего ключа: удерживайте клавишу CTRL справа и дважды нажимайте клавишу SCROLL LOCK.

Затем система вызывает KeBugCheck и вызывает проверку ошибок 0xE2: MANUALLY_INITIATED_CRASH. Если аварийные дампы не отключены, затем записывается файл аварийного дампа.

Если отладчик ядра подключен к компьютеру, потерпевшему аварию, после записи файла аварийного дампа, компьютер переходит в режим отладки ядра.

Определение альтернативных сочетаний клавиш для принудительного сбоя системы с клавиатуры

Можно настроить альтернативные значения в следующих подразделах реестра для последовательностей сочетаний клавиш, чтобы сгенерировать файл дампа памяти.

  • Для клавиатур PS/2:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\crashdump

  • Для USB-клавиатур:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\kbdhid\crashdump

  • Для клавиатур Hyper-V:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\hyperkbd\crashdump

В этих подключах необходимо создать следующие значения реестра REG_DWORD:

Dump1Keys

Значение реестра Dump1Keys — это битовая маска первого горячего ключа для использования. Например, вместо того чтобы использовать самую правую клавишу CTRL для запуска последовательности сочетаний, можно задать первую комбинацию самой левой клавишей SHIFT.

В следующей таблице описываются шестнадцатеричные значения первого горячего ключа.

Значение Первый ключ, используемый в последовательности сочетаний клавиш
0x01 Самая правая клавиша SHIFT
0x02 Самая правая клавиша CTRL
0x04 Самая правая клавиша ALT
0x10 Самая левая клавиша SHIFT
0x20 Самая левая клавиша CTRL
0x40 Левая клавиша ALT

Можно назначить Dump1Keys значение, которое активирует одну или несколько клавиш в качестве первой клавиши, используемой в последовательности сочетания клавиш. Например, назначьте Dump1Keys значение 0x11, чтобы определить как самую правую, так и самую левую клавиши SHIFT в качестве первой кнопки в последовательности сочетаний клавиш.

Dump2Key

Значение Dump2Key реестра — это индекс в таблице кода сканирования для раскладки клавиатуры целевого компьютера. См. фактическую таблицу в драйвере:

const UCHAR keyToScanTbl[134] = { 
        0x00,0x29,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
        0x0A,0x0B,0x0C,0x0D,0x7D,0x0E,0x0F,0x10,0x11,0x12,
        0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x00,
        0x3A,0x1E,0x1F,0x20,0x21,0x22,0x23,0x24,0x25,0x26,
        0x27,0x28,0x2B,0x1C,0x2A,0x00,0x2C,0x2D,0x2E,0x2F,
        0x30,0x31,0x32,0x33,0x34,0x35,0x73,0x36,0x1D,0x00,
        0x38,0x39,0xB8,0x00,0x9D,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0xD2,0xD3,0x00,0x00,0xCB,
        0xC7,0xCF,0x00,0xC8,0xD0,0xC9,0xD1,0x00,0x00,0xCD,
        0x45,0x47,0x4B,0x4F,0x00,0xB5,0x48,0x4C,0x50,0x52,
        0x37,0x49,0x4D,0x51,0x53,0x4A,0x4E,0x00,0x9C,0x00,
        0x01,0x00,0x3B,0x3C,0x3D,0x3E,0x3F,0x40,0x41,0x42,
        0x43,0x44,0x57,0x58,0x00,0x46,0x00,0x00,0x00,0x00,
        0x00,0x7B,0x79,0x70 };

Индекс 124 (sysreq) — это особый случай, так как клавиатура с 84 ключом имеет другой код сканирования.

Если вы определяете альтернативные сочетания клавиш для принудительного сбоя системы с клавиатуры USB или PS/2, необходимо либо задать значение CrashOnCtrlScroll реестра равным 0, либо удалить его из реестра.

Example

В этом сценарии ноутбук использует драйвер клавиатуры PS2, а внешняя клавиатура HID подключена. Настройка обоих значений обеспечивает возможность активировать сбой системы вручную с любой клавиатуры. Вы можете принудительно выполнить сбой системы вручную, удерживая самую правую клавишу управления и дважды нажав пробел, когда установлен следующий раздел реестра.

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\crashdump]
"Dump1Keys"=dword:00000002
"Dump2Key"=dword:0000003d

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\kbdhid\crashdump]
"Dump1Keys"=dword:00000002
"Dump2Key"=dword:0000003d

Ограничения

Это возможно, но редкое явление, когда система зависает так, что перестает работать последовательность сочетаний клавиш. Использование последовательности сочетаний клавиш для запуска сбоя работает даже во многих случаях, когда CTRL+ALT+DELETE не работает.

Принудительное завершение работы системы с клавиатуры не работает, если компьютер перестает отвечать на высокий уровень запроса прерывания (IRQL). Это ограничение существует, так как драйвер Kbdhid.sys , который позволяет запускать процесс дампа памяти, работает на более низком уровне IRQL, чем драйвер i8042prt.sys .

См. также

Проверка ошибок 0xE2: MANUALLY_INITIATED_CRASH

!analyze -v

Анализ файла дампа режима ядра с помощью WinDbg

Проверка ошибок 0x161: LIVE_SYSTEM_DUMP

Создание ядра или выполнение аварийного дампа

Разновидности файлов дампа режима ядра.