BewlyCat 不加载首页视频封面

之前使用的 BewlyBewly/BewlyBewly: Just make a few small changes to your Bilibili homepage. 终止了开发,好在后继有人切换到 keleus/BewlyCat: BewlyCat——基于ewlyBewly开发的Bilibili拓展 上了。近期发现首页点插件侧边栏的刷新按钮,视频封面经常只显示个骨架图,不加载真实封面。

其实不是不加载,只是没轮到它触发懒加载。因为代码中
BewlyCat/src/components/LazyPicture.vue at 56a175ca9eb89858eaff13059c5c9f598fae3b05 · keleus/BewlyCat 用的 Intersection Observer API ,上下滚动一下页面触发就行。怀疑是原地内部元素刷新未触发。

喔,已经有人提了 Issue,刷新后界面视频无法正常显示,需要点击浏览器的刷新按钮 · Issue #486 · keleus/BewlyCat

注册表项访问频率异常

未解之谜

几个月前就在 Process Monitor 观察到 HKLM\Software\Microsoft\WBEM\Tracing 这个位置经常被访问。

找了一个发出请求的 C:\WINDOWS\system32\svchost.exe -k netsvcs -p -s Winmgmt 进程观察调用栈

0	ntoskrnl.exe	CmpCallCallBacksEx + 0x283	0xfffff805e463f043	C:\WINDOWS\system32\ntoskrnl.exe
1	ntoskrnl.exe	NtQueryValueKey + 0x4c6	0xfffff805e48d4906	C:\WINDOWS\system32\ntoskrnl.exe
2	ntoskrnl.exe	KiSystemServiceCopyEnd + 0x28	0xfffff805e44b2258	C:\WINDOWS\system32\ntoskrnl.exe
3	ntdll.dll	NtQueryValueKey + 0x14	0x7ffda85e1fa4	C:\WINDOWS\SYSTEM32\ntdll.dll
4	KERNELBASE.dll	BaseRegQueryValueInternal + 0x16d	0x7ffda5aed7dd	C:\WINDOWS\System32\KERNELBASE.dll
5	KERNELBASE.dll	RegQueryValueExW + 0xfb	0x7ffda5aebadb	C:\WINDOWS\System32\KERNELBASE.dll
6	wbemcomn.dll	DLRegQueryValueExW + 0x4c	0x7ffd8b045840	C:\WINDOWS\SYSTEM32\wbemcomn.dll
7	wbemcomn.dll	Registry::GetDWORD + 0x3b	0x7ffd8b04486b	C:\WINDOWS\SYSTEM32\wbemcomn.dll
8	wbemcore.dll	CWmiArbitrator::MaybeDumpInfoGetWait + 0xb4	0x7ffd88d09004	C:\WINDOWS\system32\wbem\wbemcore.dll
9	wbemcore.dll	CWmiArbitrator::Arbitrate + 0x2bb	0x7ffd88d08bab	C:\WINDOWS\system32\wbem\wbemcore.dll
10	wbemcore.dll	CWmiArbitrator::ReportMemoryUsage + 0x195	0x7ffd88d08715	C:\WINDOWS\system32\wbem\wbemcore.dll
11	wbemcore.dll	CWmiFinalizerObj::`vector deleting destructor' + 0xd2	0x7ffd88d391a2	C:\WINDOWS\system32\wbem\wbemcore.dll
12	wbemcore.dll	CWmiFinalizer::PullObjects + 0x100	0x7ffd88d05ea0	C:\WINDOWS\system32\wbem\wbemcore.dll
13	wbemcore.dll	CWmiFinalizerEnumerator::Next + 0xc9	0x7ffd88d05be9	C:\WINDOWS\system32\wbem\wbemcore.dll
14	wbemess.dll	CBasePollingInstruction::ExecQuery + 0x40c	0x7ffd802b54fc	C:\WINDOWS\system32\wbem\wbemess.dll
15	wbemess.dll	CBasePollingInstruction::staticTimerCallback + 0x17	0x7ffd802b5047	C:\WINDOWS\system32\wbem\wbemess.dll
16	ntdll.dll	RtlpTpTimerCallback + 0xe0	0x7ffda84ee9e0	C:\WINDOWS\SYSTEM32\ntdll.dll
17	ntdll.dll	TppTimerpExecuteCallback + 0x1b0	0x7ffda84f2dc0	C:\WINDOWS\SYSTEM32\ntdll.dll
18	ntdll.dll	TppWorkerThread + 0x80d	0x7ffda84f63cd	C:\WINDOWS\SYSTEM32\ntdll.dll
19	KERNEL32.DLL	BaseThreadInitThunk + 0x17	0x7ffda722e8d7	C:\WINDOWS\System32\KERNEL32.DLL
20	ntdll.dll	RtlUserThreadStart + 0x2c	0x7ffda850c53c	C:\WINDOWS\SYSTEM32\ntdll.dll
 

反正是没找出调用源,在干净的虚拟机上观察也有大量调用,不会是 Process Monitor 自己吧?

然后找到这个 svchost.exe,终结了它,写入动作就干净没了。

Activity Watcher

还有另一条路径,在事件查看器中导航到 应用程序和服务日志 -> Microsoft -> Windows -> WMI-Activity -> Operational,查找标记为错误或高频出现的 ID 5857/5858 的事件。

刚好有一条错误信息 操作 = Start IWbemServices::ExecQuery - root\cimv2 : SELECT Name FROM Win32_Process WHERE ProcessId = -1094023312;ResultCode = 0x80041017;PossibleCause = Unknown,对应的 ClientProcessId 字段指向 aw-watcher-window.exe

翻了翻 代码 确实是通过 WMI 协议获取应用程序名的。但看它其实只是个 falblack 分支,不是罪魁祸首。

但它会不断访问 HKCR\TypeLib\{565783C6-CB41-11D1-8B02-00600806D9B6}\1.2\0\win64\(Default) 。Gemini 说这个是 Microsoft WMI Scripting Library (v1.2),在 Python 调用 WMI 对象时会产生,也算符合预期吧。

调高循环间隔来降低调用次数

[aw-watcher-window]
poll_time = 2.0