从键盘强制系统崩溃

以下类型的键盘可直接导致系统崩溃:

  • 在 i8042prt 端口上连接的 PS/2 键盘 此功能在 Windows 2000 及更高版本的 Windows 操作系统中可用。

  • USB 键盘
    此功能在 Windows Vista 和更高版本的 Windows 操作系统中可用。

  • Hyper-V 键盘
    此功能在 windows 操作系统Windows 10版本 1903 及更高版本中可用。

配置

配置以下设置,以使用键盘启用系统崩溃:

  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并发出 Bug 检查 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 值是要使用的第一个热键的位映射。 例如,可以将第一个热键设置为最左侧的 SHIFT 键,而不是使用最右侧的 CTRL 键来启动热键序列。

下表描述了第一个热键的值。

键盘快捷方式序列中使用的第一个键
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 或将其从注册表中删除。

示例:在此方案中,笔记本电脑使用 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 驱动程序。

另请参阅

Bug 检查 0xE2:MANUALLY_INITIATED_CRASH

!analyze -v

使用 WinDbg 分析内核模式转储文件

Bug 检查 0x161:LIVE_SYSTEM_DUMP

生成内核或完整的故障转储

Kernel-Mode 转储文件的品种