文章目录
- [卸载博图 TIA Portal 后,我的键盘全灭了一次](#卸载博图 TIA Portal 后,我的键盘全灭了一次)
卸载博图 TIA Portal 后,我的键盘全灭了一次
前情提要
事情起因很简单:我觉得西门子博图(TIA Portal)V15 卸载之后,系统里留了一堆垃圾,就顺手开始清理 C:\ProgramData\Siemens 这类残留目录。删的时候还挺爽,心想着又给 C 盘腾了点空间。
然后,键盘没了。
不是某一个键盘,是所有键盘。笔记本自带的键盘、外接的 USB 键盘、Windows 自带的屏幕键盘,全部按不出一个字。屏幕键盘点上去,光标纹丝不动。
那一刻血压直接拉满。登录密码都输不进去,差点就要重装系统。最后靠远程控制才把自己救了回来。
现象:三个入口全灭
- 笔记本内置键盘:无反应
- USB 键盘:无反应
- 屏幕键盘(osk):能打开,但点了没反应
最诡异的是第三点。屏幕键盘是纯软件,按理说不该和硬件键盘一起死。它一起死,反而说明问题根本不在硬件,而在系统输入这条链的最底层。
排查:从设备管理器一路查到注册表
好在还有远程控制能登录进来,不然真的只能重装系统。
先看设备管理器,键盘那一栏一堆黄色感叹号(Error),还有一堆 Unknown。
再看键盘驱动服务的状态:
kbdclass(系统标准键盘类驱动):STOPPED,没加载kbdhid(USB 键盘驱动):RUNNINGi8042prt(PS/2 键盘驱动):RUNNING
到这里基本就明白了:底层硬件驱动都活着,但上层的 kbdclass 没加载起来。而 kbdclass 是所有键盘输入最终要经过的类驱动,它一躺,什么键盘、什么屏幕键盘,全都收不到按键。
那为什么 kbdclass 加载不起来?答案藏在键盘设备类的注册表里:
HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e96b-e325-11ce-bfc1-08002be10318}
这个键的 UpperFilters(上层过滤器链)当时的值是:
cortkbdrtmwdf, WinCCRtKbdFilter, HKKbdFltr, kbdclass
cortkbdrtmwdf 和 WinCCRtKbdFilter,一看就是西门子 WinCC Runtime 注册的键盘过滤驱动。而 WinCCRtKbdFilter 这个服务,已经被我删掉了,但我删的只是 C:\ProgramData\Siemens 里的运行时文件,注册表里这个死链接还留着。
根因:一条断掉的过滤驱动链
Windows 构建键盘设备栈时,会从 UpperFilters 列表里逐个加载驱动。它加载到 WinCCRtKbdFilter 时,发现"名字在,服务没了",直接失败。一个过滤器失败,整条链就断了,排在后面的 kbdclass 自然也没机会加载。
于是出现了最魔幻的一幕:我删了一个 Siemens 残留,结果把整个系统的键盘输入干废了。屏幕键盘也不例外,因为它注入的按键同样要走 kbdclass 这一层。
解决:两步修好
-
清掉键盘过滤链里的死链接。把
UpperFilters从cortkbdrtmwdf, WinCCRtKbdFilter, HKKbdFltr, kbdclass改成HKKbdFltr, kbdclass,只留正常的热键过滤驱动和系统驱动。 -
重启。键盘设备栈要重启才能重新构建。重启后
kbdclass正常 RUNNING,键盘全部恢复。
顺带把剩下的两个 Siemens 残留服务 cortkbdrtmwdf 和 cortsmartserver,以及孤儿驱动文件 cortkbdrtmwdf.sys 也删干净了。
避坑总结
- 卸载带驱动、带系统服务、带过滤器的软件(西门子、杀毒软件、游戏反作弊、输入法这些都是重灾区),务必先走官方卸载程序,别手删残留目录。
- 尤其要小心
HKLM\SYSTEM\CurrentControlSet\Control\Class下的设备类UpperFilters/LowerFilters。一个死链接就能让整类设备瘫痪。 - 键盘、鼠标、触摸板这类输入设备全灭时,先怀疑过滤驱动链,而不是硬件坏了。
- 屏幕键盘失灵不等于系统崩溃。它和物理键盘共用
kbdclass这一层,所以会一起死。
教训就是:清理一时爽,排查火葬场。删 Siemens 残留之前,记得先把注册表里它的驱动引用看清楚。