blazingphoenix7/thinkcentre-fan-control

GitHub: blazingphoenix7/thinkcentre-fan-control

通过逆向工程直接读取嵌入式控制器,解决 ThinkCentre 台式机风扇转速始终显示为零的问题,并提供逐核心温度监控和满速风扇模式切换。

Stars: 0 | Forks: 0

# 🌀 ThinkCentre 风扇控制 **Lenovo ThinkCentre 台式机上的所有工具都信誓旦旦地说风扇转速为 `0` RPM。** ### 显然,它在转。这个工具能真正读取它的转速。它还能显示每个核心的温度,并让你自由切换风扇模式,甚至可以直接拉满到其他工具无法企及的满速状态。 [![License: MIT](https://img.shields.io/badge/License-MIT-14b8a6?style=flat-square)](LICENSE) [![Platform: Windows 10/11](https://img.shields.io/badge/Windows-10_|_11-0078D6?style=flat-square&logo=windows&logoColor=white)](#install) [![.NET 8](https://img.shields.io/badge/.NET-8.0-512BD4?style=flat-square&logo=dotnet&logoColor=white)](#build-from-source) [![Latest release](https://img.shields.io/github/v/release/blazingphoenix7/thinkcentre-fan-control?style=flat-square&color=14b8a6)](../../releases/latest) 这是一款专为 Lenovo **ThinkCentre 和 ThinkStation 台式机**打造的小型 Windows 应用。它直接从嵌入式控制器(EC)读取**真实的风扇 RPM** 并将其驻留在你的系统托盘中,同时打开一个显示**每个 CPU 核心温度**的窗口,并提供包括 Vantage 都不让你碰的 **Full Speed**(满速)在内的多种风扇模式。 ![The window taking the fan from idle up to Full Speed: live RPM, per-core CPU temperatures, and the mode selector](https://raw.githubusercontent.com/blazingphoenix7/thinkcentre-fan-control/main/docs/screenshots/demo.gif)
## 为什么开发它 随便找个工具问问你的 ThinkCentre 风扇到底在干嘛。Task Manager、HWiNFO、LibreHardwareMonitor,甚至是 Lenovo 自家的 Vantage。它们每一个都在对你睁眼说瞎话: 你能听到风扇在转。但 Windows 接收到的是一个伪造的、被阉割的控制器数据,里面全是零,而所有工具都在盲目复读这个零。真正的传感器位于另一块芯片上,通过自己专属的端口进行响应,完全独立工作。所以我直接读取了那块芯片,并把真实数据放在了你的托盘里。 ## 功能特性 - 🌀  **实时风扇 RPM。** 其他工具都不提供的真实数据,显示在托盘和窗口中,直接每秒从 EC 的转速寄存器中读取。 - 🌡️  **各核心 CPU 温度。** 从 CPU 自身的温度传感器读取每个核心的数据,并绘制成实时图表。托盘还会显示温度最高的 EC 传感器(被称为“最高温传感器”而不是“CPU”,因为我还没完全摸清它对应的是哪个物理部件)。 - 🎛️  **风扇模式,包含 Full Speed 等。** Quiet(静音)、Balanced(均衡)和 Performance(高性能)模式通过固件瞬间切换,走的是和 Vantage 完全一样的路径。**Full Speed** 会触发一个 BIOS 设置以实现真正的最大风量——也就是那个 Vantage 向你隐瞒的吵闹模式,它会在下次重启后生效。 - 🪟  **独立窗口,或者仅驻留托盘。** 双击查看全部读数,或者让它躲在后台,鼠标悬停即可查看 RPM。随你喜欢。 - 🪶  **轻量无感。** 无遥测、无需账号、几乎不占用空闲 CPU,驻留托盘仅占用约 15 MB 内存。采用 MIT 许可证。并且它绝不会对芯片进行裸写入,模式切换全部通过厂商自身支持的接口完成。 ## 做不到的事情 ## 安装说明 **你需要** Windows 10 或 11 系统、**管理员权限**,最好是 **ThinkCentre M70t Gen 6**(这是我实际验证过的主板;[其他型号见下文](#supported-hardware))。 **1. 安装 PawnIO 驱动。** 读取 EC 需要 ring-0 级别的驱动,因此本应用依赖于 [PawnIO](https://pawnio.eu/),这是一款经过代码签名的小型驱动。它与 [FanControl](https://github.com/Rem0o/FanControl.Releases) 和 LibreHardwareMonitor 使用的是相同的驱动,而且请放心,它绝不是那个会被杀毒软件标记的 WinRing0。从 [pawnio.eu](https://pawnio.eu/) 下载它,运行后在 UAC 提示框中点击同意。 **2. 下载应用。** 下载最新的 [release ZIP](../../releases/latest) 并解压到任意位置。经过签名的 `LpcACPIEC.bin` EC 模块已经包含在内,无需额外寻找。只要保持文件放在一起就行,如果把 exe 单独拎出来,它将找不到该模块。 **3. 运行。** 右键点击 `Tcfc.Tray.exe`,选择 **以管理员身份运行**(直接双击也可以,它会自动请求提权)。托盘区会出现一个小风扇图标,它可能藏在 `^` 箭头下面。 ## 使用说明 ![The fan-control window: the live RPM readout, the per-core temperature graph, the four fan modes, and the Start-with-Windows toggle](https://static.pigsec.cn/wp-content/uploads/repos/cas/01/010206760a33ef6ce6821052429d3d83118c7d19e21f979dd0f652b296afe31c.png) - **悬停**在托盘图标上,工具提示会显示实时 RPM。 - **双击**它打开窗口:大字体的 RPM 数值、各核心温度图表、四种风扇模式以及开机自启选项。关闭窗口只会将它最小化回托盘,并不会退出程序。 - **右键点击**打开快捷菜单: - 顶部会有一行状态信息,`RPM | 最高温传感器 °C`,会在你每次打开菜单时刷新。 - **Fan mode**(Quiet、Balanced、Performance)。点击其中一个进行切换,当前选中的模式会被打上勾。 - **Start with Windows**,这会创建一个提权登录任务,这样你就不必每次开机都去点 UAC 了。 - **Exit。** Quiet、Balanced 和 Performance 是固件自带的风扇配置文件。Quiet 让风扇保持安静。Performance 则让风扇更早开始提速。但无论哪种模式,底层依然是由固件在控制风扇曲线。**Full Speed** 是个特例:它通过 BIOS 设置强制风扇全速运行,因此需要重启才能开启,再次重启才能关闭。 ## 支持的硬件 目前我只实际验证了 **ThinkCentre M70t Gen 6**(主板代号 `3376`)。 | 主板 | 风扇 RPM + EC 温度 | 风扇模式 + Full Speed | |---|---|---| | **ThinkCentre M70t Gen 6** (`3376`) | ✅ 正确 | ✅ 已启用 | | 其他 ThinkCentre / ThinkStation 台式机 | ⚠️ 回退至 M70t 的布局,因此读数**可能有误** | 🔦 关闭(不会在我未检查过的主板上写入数据) | 各核心 CPU 温度直接从处理器内部读取,因此无论主板如何,在任何 Intel 机器上都是准确的。 不同的型号?EC 寄存器布局必须针对不同主板逐一映射。 请[提交一个 issue](../../issues) 并附上你的型号和主板产品信息,我会深入研究。 ## 工作原理 ACPI 和 WMI 在这里走不通。Windows 看到的嵌入式控制器(EC)只是个桩程序:它的 `_STA` 返回零,每个字段的读取值都是零,而且风扇遥测数据流经的固件表通常甚至根本没有加载。这个零正是其他所有工具所报告的数据。 但实际上背后隐藏着第二个 EC,也就是真正的 EC,它就在桩程序的背后,通过端口 `0x62` 和 `0x66` 响应。我通过签名的 [PawnIO](https://pawnio.eu/) 驱动读取了它的 RAM,并在负载状态下上下调节风扇转速时进行了差异比对。转速数据马上就显现出来了:位于 `0x00:0x01` 的一个 16 位大端序值,这已经过完整的加速和减速验证。温度数据则位于 `0x21` 到 `0x2F` 之间。 各核心 CPU 温度完全没有涉及到 EC。它是通过同一个 PawnIO 驱动读取每个核心的 `IA32_THERM_STATUS` MSR,然后减去 Tjmax 偏移量得到的。这就是为什么它们被标注为各个核心的真实温度,而不是瞎猜的。 预设模式的切换是最简单的部分:Lenovo 提供了一个固件确实认可的 WMI 方法(`SetSmartFanMode`),且已在主板上验证通过。**Full Speed** 倒是我没想到的。Lenovo 的 BIOS 中有一个带有“Full speed”选项的“Intelligent Cooling”设置,而且这个设置可以通过 Lenovo 自家的 BIOS WMI 从 Windows 环境下进行写入,尽管 Vantage 从来不让你碰它。因此,本应用可以强制风扇满速运转,而你根本不需要进 BIOS。不过这是一个固件级别的设置,所以必须重启后才能生效。 精确调节 RPM 的滑块是唯一一个我没能发布的特性。写入路径是一个 ACPI 方法(调用 `FNSL` 的 `_FSL`),它深藏于一个仅存在于运行时的表中,想要调用它不仅需要签名的内核驱动,还得干掉 Intel 的温控服务。为了这个功能去赌上硬件的安全实在不划算。完整的剖析记录(包括走不通的死胡同)在这里:
📖 完整的逆向工程剖析 - [设计规范与决策](docs/specs/2026-07-08-thinkcentre-fan-control-design.md):架构、安全闸门以及思路转变。 - [EC 解码](docs/research/ec-decode-m70t.md):被阉割的 ACPI EC、背后的物理 EC、转速追踪,以及扼杀滑块功能的写入测试。 - [温度标注](docs/research/temp-labeling.md):为什么传感器读数标为“最高温传感器”而不是“CPU”。 - [硬件实测验证](docs/research/v1-cli-verify.md):怠速 932 RPM,负载下约 2,800 RPM,与探针数据相符。
## 从源码构建 你需要安装 [.NET 8 SDK](https://dotnet.microsoft.com/download/dotnet/8.0)。 ``` dotnet build dotnet test tests/Tcfc.Tests ``` 以管理员身份运行 `src\Tcfc.Tray\bin\x64\Debug\net8.0-windows\Tcfc.Tray.exe`。构建程序会先在 exe 旁边查找 `LpcACPIEC.bin`,然后是仓库的 `lib\pawnio\` 目录,最后是 `C:\Program Files\PawnIO\modules\`。如果你没有这个签名的 `LpcACPIEC` 模块,可以从 [PawnIO.Modules releases](https://github.com/namazso/PawnIO.Modules/releases) 下载。 在构建托盘程序的同时还会生成一个控制台工具(未包含在发布的 ZIP 中),名为 `Tcfc.Cli.exe`,可在提权的终端中使用: ``` Tcfc.Cli monitor # live RPM, the full 15-byte EC temp block, and mode Tcfc.Cli temps # Tjmax and every CPU core's temperature Tcfc.Cli mode # show the current and supported modes Tcfc.Cli mode quiet|balanced|performance # set a mode (verified board only) ``` ## 故障排除 | 症状 | 解决方法 | |---|---| | 启动时提示 **"EC not available"** | 你不是**管理员**、**未安装 PawnIO**,或者 `LpcACPIEC.bin` 没有和 exe 放在一起(它包含在 ZIP 中,请务必保持文件放在一起)。 | | 托盘显示 **`- RPM`** | 读取超时,通常是因为其他占用 EC 锁的 EC 或风扇工具还在运行(请关闭它们),或者是你没有提权。 | | **风扇选项变灰**(仅限监控) | 你的主板不是已验证的 `3376` 主板,出于安全考虑已锁定控制功能([详见上文](#supported-hardware))。 | | **Full Speed 没起作用** | 这是一个 BIOS 设置,因此只能在**重启**后生效,并且在你选择其他模式并再次重启之前,它会一直保持开启。 | | **"Windows 已保护你的电脑"** | 未签名的 exe。点击**更多信息**,然后选择**仍要运行**,或者选择[从源码构建](#build-from-source)。 | ## 许可证 **MIT。** 随你怎么用。详情请见 [LICENSE](LICENSE)。
专为那些没人在意去逆向工程的 ThinkCentre 台式机而打造。
标签:云资产清单, 嵌入式控制器, 温度监控, 硬件监控, 系统工具, 逆向工程, 风扇控制