Bug 10 重启和正常输入的抉择记录

2019/04/19, 我新加了一个 M.2 的固态, 现在机器上挂了三个硬盘. 两个 SATA, 一个 M.2.

2019/04/20 上午, 我迁移了原来固态上的系统到了新加固态上. 并将新硬盘作为优先启动盘.

2019/04/20 中午, 我收到了这样一个补丁

Intel Corporation - Display - 11/18/2018 12:00:00 AM 25.20.100.6373

一个去年十一月的补丁现在才推过来很奇怪了.

我选择了更新, 之后出现了我在 1709/1803 经常见到的关机后自动重启和睡眠后自动开机, 之前几次都是找找事件管理器, 看下哪个设备唤醒了计算机, 禁掉就行了. 然而这次 Bug 10 给我了一击.

关键事件的常规描述是:

用户模式进程尝试通过调用 SetSuspendState 或 SetSystemPowerState API 更改系统状态。

没头没尾的. 转过去看看事件的 XML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="Microsoft-Windows-Kernel-Power" Guid="{331c3b3a-2005-44c2-ac5e-77220c37d6b4}" />
<EventID>187</EventID>
<Version>0</Version>
<Level>4</Level>
<Task>243</Task>
<Opcode>0</Opcode>
<Keywords>0x8000400000000404</Keywords>
<TimeCreated SystemTime="2019-04-23T04:48:31.851398700Z" />
<EventRecordID>23238</EventRecordID>
<Correlation />
<Execution ProcessID="12104" ThreadID="12148" />
<Channel>System</Channel>
<Computer>myuan</Computer>
<Security UserID="S-1-5-21-3775543428-34658433-2914125342-1001" />
</System>
<EventData>
<Data Name="ApiCallerNameLength">58</Data>
<Data Name="ApiCallerName">\Device\HarddiskVolume1\Windows\System32\RuntimeBroker.exe</Data>
<Data Name="SystemAction">2</Data>
<Data Name="LightestSystemState">2</Data>
</EventData>
</Event>

<DataName=”ApiCallerName”>\Device\HarddiskVolume1\Windows\System32\RuntimeBroker.exe

ApiCallerName 的路径是 "\Device\HarddiskVolume1", 是新硬盘引起的吗? 暂时不可知. "\Device\HarddiskVolume1" 应该就是指的当前的 C 盘. 为什么不直接写 C, 而是用了硬盘描述呢?

引起事件的程序是 RuntimeBroker.exe , 查一下, 有说要关通知的, 有说改注册表的, 改通知无效, 改注册表他们说是改

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TimeBroker

但是很遗憾, 我这里没有这个路径, 倒是有这个

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TimeBrokerSvc

成吧, Start 从 3 改成 4 表示禁止, 重启, 正常重启了, 睡眠, 也正常睡眠了. 之后就开始叫人揪心了.

  1. 输入法框消失, 设置中选择输入法显示只能运行在桌面模式
  2. 可以通过 Win 键唤出开始菜单, 但是之后的任何以此为焦点的输入都无效, 比如 Tab/上下左右/字母/数字, 包括再按 Win 键关掉开始菜单
  3. 快捷键仍然存在(Win + R), 但是设置里的按键也全部失效.

暂时怀疑因为 RuntimeBroker 是用于 Windows10 权限管理的, 把这项服务 ban 掉后, 有一些应用无法获取到某些权限了, 因而表现为 UWP 应用无法输入. 但是这个进程为什么会禁止我关机和睡眠, 而且关键在用户态进行, 这就很奇怪了.

暂时没空折腾了, 只好先放弃睡眠功能, 每次要关机就选择重启之后进入 BIOS 电源按钮关机咯.

Windows 1809, 17763.437, 教育版


19/05/03补充

上面那行中文描述应该是中文互联网上首次出现了, 现在搜索错误描述只有这篇文章一个.

我已经尝试过移除RuntimeBroker.exe了, 移除成功后同样出现上述禁用服务的错误, 通过 Alt+F4 睡眠时, 这次的ApiCallerName就变成了\Device\HarddiskVolume1\Windows\System32\winlogon.exe, 这个可没法动, 而且之后我恢复了RuntimeBroker.exe, 现在睡眠的时候会有两个事件了, 一个RuntimeBroker.exe, 之后winlogon.exe.

我猜想是explorer.exe发出睡眠信号后其他程序唤醒了计算机, 如果有人有空的话, 可以试着写一个内核应用, ban 掉这两个进程在短时间内的唤醒信号, 或者如果二者会一直唤醒的话, 可以定期自行唤醒, 不过还是不如微软自带的睡眠啊, 想自行监控睡眠期间的按键鼠标动作着实有点难.

等五月底的 1903 吧


06/21:

六月底还没有给我推新版本, 终于用了易升手动更新到了 1903, 问题一如之前莫名其妙地解决


从我的知乎文章搬运