AIO水冷冷头屏幕驱动分析与非官方实现

本文目标是分析AIO水冷冷头屏幕和上位机的通信方式,并自行实现驱动服务替换制造商提供的管理软件。如果要起个轻小说标题,那应该是——

《VK你能不能别光惦记着往产品包装上画AI油腻小人而是改改你那个自启弹UAC再读好半天条里面还捆绑点神秘小软件的愚蠢软件不要恶心到我花好几天绕过它》

绝对不是因为Homelab系列难产一年了来写点片汤话充数喵

初步信息收集

本节目标是?
初步分析厂商软件确定显示屏方案,规划正确的实现思路
——我本来是想这么说的,可是他给的线索实在是太多了。

初步探索厂商灯控软件,在设置里找到了”查看设备连接日志“,基本可以确定。使用procmon查到实际写入位置为$env:LOCALAPPDATA\MythCool\OtherLogs\MythCool.exe_MSDisplayAddon.node_PID.log,内容如下:

根据日志信息进一步分析,我们可以得到如下信息:

  • 厂商软件使用electron,实际连接行为与MSDisplayAddon.node有关。
  • 该Addon实际为包含特殊导出表的32位DLL,位于安装包Apps\mainxxxx\version\win32\msdisplay,安装时被释放到LocalAppData
  • 顺MSDisplay找到了MindShow/USBDisplay。设备管理器USB VID=0x345f PID=0x9132,该屏幕应该使用了来自Ultrasemi的MS9132,和便宜采集卡常用的的MS2130/1同门。

实际这份日志的价值不止于此,稍后分析调用时我们还会用到。

Addon分析

既然有现成的NodeJS Addon,那没有不用的道理。本节将主要分析我们应当如何使用这个现成的驱动模块进行快速验证,而非直接分析其底层实现来重写一个类似的dll。

IDA加载MSDisplayAddon.node,搜索任意函数名如MSDisplayReadFlash即可定位到N-API真正创建导出表的方法。看了下基本没有任何混淆,分析和重命名方法直接ida-pro-mcp丢给Claude。Claude二进制看得是真的快,但是非常喜欢乱编各种方法的参数和功能。例如看到了驱动内部使用三个缓冲区轮换就认为一帧应发送三次、在分析中看到了RGBA8888转RGB565不经分析就假设API接受565。建议在让LLM逆向的时候,prompt中强调不允许使用猜测作为分析结果。

把前文日志丢给LLM,要求在Addon中搜索日志内容并分析方法时序,可以分析得到期望的调用流程如下:

其实这里更普适的做法应该是分析原electron应用或者hook得到调用顺序及参数,本次因函数数量较少且可以从命名、日志及静态分析推断,选择直接猜测流程。

假设检验

代码一定要能运行!
\😭/ \😭/ \😭/

基于上一节的分析,不难实现如下简单的验证脚本:从指定路径加载视频,用核显硬件加速解码,连接到显示屏并逐帧推送图像。

食用指南
0. 确保你的电脑已经接入屏幕并为它安装了特殊版本的libusb0驱动。如果你不确定怎么做,那装下官方软件。
1. 安装32bit nodejs,个人建议使用NVM For Windowsnvm install lts 32 && nvm use lts 32什么你用Linux那为什么不用官方的开源驱动自己改改完事了
2. 安装ffmpeg,笔者直接choco install ffmpeg装的。虽然choco的版本好像没编vulkan加速,但是d3d11va也不是不能用。
3. 提取MSDisplayAddon.node,置于脚本同级目录。希望播放的视频置于脚本同级目录。(虽然ffmpeg会承受一切,但是就算是为了你的硬件好,请先把视频压到期望分辨率)
4. 修改videoPath;修改preferredVendorId (这个是用来指定硬件解码加速的,为了用核显我写了AMD的vendor id)

实际测试平均帧延迟13.7ms,TP99=15ms,算是勉强守住了60fps的最高刷新率。

把下面这个玩意丢到C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup,理论上它应该就可以默默在后台工作了。至少笔者测试了一周,睡眠后恢复和开机自启都没什么毛病。偶尔ffmpeg会犯病卡死,不清楚为什么,但总之会因为超时被kill掉自动重启。

Update 20260202: 原来的版本在死机的时候不知道为什么会拉一坨僵尸ffmpeg进程,新加了个锁和清理机制。

没什么意义的效果展示,视频是我从wallpaper engine随便毛来的。

到这里,这个小项目最开始的目标已经达成了。考虑到显示器数量和机箱位置,笔者不需要也不太能从冷头看硬件监测数据;纯粹不想让这个溢价小配件闲着所以想要放点待机动画。

不过更多人应该是希望将它接入到其他支持显示屏的监控软件如AIDA64InfoPanel的。考虑到让这些软件多加个nodejs运行时不太现实,我们需要一个dll。大体路线是要不然需要根据linux驱动自己实现一个用libusb0的win驱动,要不然想办法把node addon里面各种被napi包了一层但没导出的函数都导出了。

后记

其实笔者曾经尝试过自行实现一版驱动,但经过连续三个没什么进展的周末之后我决定先搁置它。大概是POC能跑通之后手就不想动了,我决定move on到草稿箱里剩下的十篇草稿。骗你的,是move on到摸鱼了~

之前看有些人会专门买古老的电子相册给电脑当监控屏,似乎是看重它usb连接、不会被windows识别为显示器的特性。现在看来成本也不算高?MS9132带配套器件成本50元,各种1080p笔记本拆机屏幕带驱动板也值不了多少。或许某些做高定Mod的商家会感兴趣这套吧,给不差钱的富哥侧透换成LED屏然后接入监控软件或者放点动画什么的。不过分辨率高了开销未知;而且如果不能让Windows识别到的话,搞不好得自己写vulkan做加速……

罢了,不想了。如果是五年前的我一定会试试,但是现在的我已经只会开摆了。就这样~

评论

  1. 111111
    5 月前
    2026-2-02 14:23:51

    可以 有这个想法在网上搜到这个了 可以不用自己分析了

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇