通过键盘强制系统崩溃 - Windows drivers

通过键盘强制系统崩溃 - Windows drivers

排查系统问题时,可能需要生成故障转储文件来分析系统状态。 可以使用特定的组合键直接从键盘强制系统崩溃。 当系统无响应或需要捕获诊断信息时,此功能非常有用。

本文介绍如何:

配置注册表设置以启用通过键盘触发的崩溃

使用键盘快捷方式触发系统崩溃

设置备用键盘快捷方式

此功能适用于 PS/2 键盘(Windows 2000 及更高版本)、USB 键盘(Windows Vista 及更高版本),以及 Hyper-V 键盘(Windows 10 版本 1903 及更高版本)。

注意

强制系统崩溃会立即停止系统,并可能导致数据丢失。 仅当需要进行调试时使用此功能,并确保保存工作。

配置

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

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

对于 PS/2 键盘: 在注册表中启用键盘触发的崩溃:

导航到 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\i8042prt\Parameters

创建名为 CrashOnCtrlScroll 的值

将其设置为 REG_DWORD 值 0x01

对于 USB 键盘,你必须在注册表中启用键盘启动的崩溃。

在注册表项 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\kbdhid\Parameters中,创建名为 的值 CrashOnCtrlScroll

将其设置为等于 REG_DWORD 0x01的值。

对于 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 注册表值是要使用的第一个热键的位映射。 例如,可以将第一个热键设置为最左侧的 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,或者将其从注册表中删除。

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

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

内核模式转储文件的种类。

相关推荐