通过键盘强制系统崩溃

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

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

  • USB 键盘
    Windows Vista 及更高版本的 Windows 操作系统中提供此功能。

  • Hyper-V 键盘
    Windows 10 版本 1903 及更高版本的 Windows 操作系统中提供此功能。

配置

配置以下设置以使用键盘实现系统崩溃:

  1. 如果希望编写故障转储文件,则必须启用此类转储文件。 选择路径和文件名,然后选择转储文件的大小。 有关详细信息,请参阅启用内核模式转储文件

  2. 对于 PS/2 键盘,你必须在注册表中启用键盘启动的崩溃。 在注册表项 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\i8042prt\Parameters 中,创建一个名为 CrashOnCtrlScroll 的值,并将其设置为等于 0x01 的REG_DWORD 值。

  3. 对于 USB 键盘,你必须在注册表中启用键盘启动的崩溃。 在注册表项 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\kbdhid\Parameters 中,创建一个名为 CrashOnCtrlScroll 的值,并将其设置为等于 0x01 的REG_DWORD 值。

  4. 对于 Hyper-V 键盘,你必须在注册表中启用键盘启动的崩溃。 在注册表项 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\hyperkbd\Parameters 中,创建一个名为 CrashOnCtrlScroll 的值,并将其设置为等于 0x01 的REG_DWORD 值。

某些笔记本电脑将 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 注册表值是要使用的第一个热键的位映射。 例如,可以将第一个热键设置为最左侧的 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 驱动程序。

另请参阅

错误检查 0xE2:MANUALLY_INITIATED_CRASH

!analyze -v

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

错误检查 0x161:LIVE_SYSTEM_DUMP

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

内核模式转储文件的种类