Sandboxie 作者的任务管理器:75 万行只写 14 万
一句话总结
Sandboxie-Plus 的开源化维护者 David Xanatos「站在 Process Hacker 肩上」,用约 14 万行自写的 Qt 应用层,把成熟的内核内省 C 库 phlib 重壳成一个现代化、有跨平台志向的强力 Windows 任务管理器——它不告诉你「哪些程序在跑」,而是深挖「程序在干什么」。
值得关注的理由
- 「复用而非重造」的务实工程范式样本:全仓 75 万行里约 85% 是 vendored 的第三方源码(Process Hacker 的 phlib/phnt/KSystemInformer 内核驱动 + Qt 绘图库 qwt),作者真正自写的只有
TaskExplorer/下约 14 万行。这层「C 内核库 ↔ Qt model/view」的桥接抽象,是任何想给重型 C/C++ 系统库做现代化前端的人都能照搬的设计。 - 作者背书极硬:David Xanatos 是著名沙箱软件 Sandboxie-Plus 的接手者与开源化推手,13 年 GitHub 账号、949 粉丝,全线产品(wumgr、priv10/MajorPrivacy)一致聚焦「用户掌控、开源透明、反封闭花园」。可信度在 Windows 安全/系统工具圈属顶级。
- 细分蓝海里的差异化卡位:在 Process Hacker/System Informer 这一「Windows 进程内省事实标准」之上,TaskExplorer 用 Qt 换掉原生 Win32 GUI,预留 Linux 移植接缝,并与 Sandboxie 生态打通——是「既依赖根基、又与根基竞争」的独特存在。近 25 天月入 100+ star,明显加速。
项目展示

线程/栈回溯面板:可逐线程查看调用栈回溯,远超内置任务管理器的「线程数」一个数字。

句柄视图:句柄列表带文件名、偏移与大小,是逆向/排障定位「谁占用了这个文件/资源」的关键能力。
项目画像
| 维度 | 数据 |
|---|---|
| GitHub | https://github.com/DavidXanatos/TaskExplorer |
| Star / Fork | 3615 / 286 |
| 代码行数 | 753K(tokei 全仓;其中约 85% 为 vendored 第三方源码,作者自写应用层 ≈13.3 万行)。语言:C 32.8% / C Header 29.2%(主要来自 vendored phlib/phnt)+ C++ 20.2%(作者 Qt 代码)+「TypeScript」12.7%(实为 Qt Linguist 翻译 XML,非 TS)+ C# 1.5% |
| 项目年龄 | 84 个月(约 7 年,2019-05 起) |
| 开发阶段 | 低维护(成熟稳定,近 90 天仅 5 commit、近 30 天 0,但 2026-05 仍在打 v1.8.0 补丁,未放弃) |
| 贡献模式 | 独立开发(主作者占 ~85% 贡献,其余多为社区翻译者) |
| 热度定位 | 中等热度 / 细分精品(被低估,近期高速增长) |
| 质量评级 | 代码[良好] 文档[一般] 测试[无] |
作者视角:为什么存在这个项目
创始人/作者背景
David Xanatos(维也纳,Xanasoft,xanasoft.com)是 Windows 安全/系统内核工具领域的资深个人开发者。他最知名的身份是 Sandboxie-Plus 的接手维护者与开源化推手——Sandboxie 经 Invincea→Sophos 几度易手后,由他自 2020 年起接管并彻底开源化。他还做过 wumgr(Windows 更新管理)、priv10/MajorPrivacy(隐私+防火墙)、NeoScriptTools。整条产品线一致聚焦「Windows 安全、隐私、系统内省、用户掌控、反封闭花园」,他甚至公开反对 Google 对 Android 开发者的强制验证。这种价值观直接塑造了 TaskExplorer 的选择:GPL-3.0 全开源、自带可审计的内核驱动、与 Sandboxie 生态打通。
问题判断
作者看到的不是「Windows 缺一个任务管理器」——Process Hacker(现 System Informer)早已是事实标准。他看到的是另一条被忽视的轴:Process Hacker 的 GUI 与 Win32/phlib 数据死耦合,无法跨平台,且界面停留在传统 Win32 风格。于是他没有重造内核轮子,而是复用 phlib 作数据底座,自己只写一层 Qt 应用——换来现代化界面、未来的 Linux 移植可能,以及与自家 Sandboxie 生态的深度集成。时机上,这与他 2020 年起全面接手 Sandboxie、需要一个能深挖沙箱进程的进程浏览器高度吻合(典型的 dogfooding + 生态延伸)。
解法哲学
- 明确选择「复用而非重造」:内核态/系统查询全部交给成熟的 phlib + KSystemInformer 驱动,自己只写应用层,把精力投在差异化(Qt GUI + 跨平台 + Sandboxie 集成)上。
- 明确选择开放透明:GPL-3.0,源码可审,自带内核驱动(代价是承接 Process Hacker 的信任包袱,见 Issue #114 驱动签名讨论)。
- 明确不做的事:不自研内核组件、不做云端/SaaS、(v1.7 起)放弃 32 位 Windows 以减负。
战略意图
TaskExplorer 是作者「Windows 系统掌控工具矩阵」中的进程内省支柱,与 Sandboxie-Plus(沙箱)、MajorPrivacy(隐私/防火墙)互补,并共享基建(Qt 辅助库 MiscHelpers/、在线更新器 UpdUtil/)。纯开源 + Patreon 捐赠,无 open-core/商业化痕迹。7 年低维护但 2025 年(Qt6 迁移 + TaskHelper 重构)有明显复活。
核心价值提炼
创新之处
- 「Qt 重壳 + Process Hacker phlib 内核」的桥接范式(新颖度 4/5 · 实用性 4/5 · 可迁移性 4/5):不重写内核库,而是用
CastPhString/CastQString字符串桥 + 抽象CSystemAPI/CProcessInfo,把一整套成熟 C 内核库「翻译」成 Qt model/view 喂给现代 GUI——既蹭满 PH 的能力,又获得跨平台与 UI 现代化的接缝。 - Qt-free 特权 worker + 命名管道 CVariant RPC 的权限分离(新颖度 3/5 · 实用性 4/5 · 可迁移性 4/5):v1.7 起拆出独立
TaskHelper.exe,刻意不依赖 Qt(只链 phlib + 自研序列化),保持小巧可审计;与 GUI 通过 named pipe 走「长度前缀 + CVariant 序列化」的定长帧通信,承担提权操作(RunAsTrustedInstaller / 改优先级 / 释放内存)。 - DynData 自更新解决内核结构版本漂移(新颖度 4/5 · 实用性 3/5 · 可迁移性 2/5):把易随 Windows 内核版本失效的偏移数据外置为可热更新的
ksidyn.bin,复用上游 SystemInformer 的发布物,无需重发驱动即可适配新系统。 - 多产品线共享基建(新颖度 2/5 · 实用性 3/5 · 可迁移性 3/5):与 Sandboxie-Plus 共用 Qt 辅助库与 Sandboxie 风格在线更新器,沙箱进程标记 + Original Token 查看打通生态。
可复用的模式与技巧
- OS 无关抽象基类 + 按平台分目录实现:抽象
CSystemAPI/CProcessInfo(QObject 纯虚),GUI 只绑抽象QSharedPointer,平台差异列用#ifdef WIN32门控——给原生库做跨平台 GUI 前端的通用范式。 - 带 refcount 处理的双向 FFI 字符串 cast 原语:
CastPhString(转出即PhDereferenceObject)/CastQString(PhCreateStringFromUnicodeString)——任何 C 库 ↔ Qt/C++ 类型绑定边界都能照搬。 - out-of-process 特权 worker + 长度前缀消毒帧 + Qt-free 序列化 RPC:
TaskHelper+SendCVariant/RecvCVariant(带 100MB 上限消毒)——桌面应用权限分离与高危操作隔离。 - set-diff(Added/Changed/Removed)增量更新信号 → 模型
Sync():高频数据下保选中/滚动态、免全量重置,全程QReadWriteLock保护、异步枚举用QFutureWatcher——实时进程/网络/日志表格视图通用做法。 - Result 类型(
STATUS/ERR()/OK,FlexError.h)承载 NTSTATUS:以返回值而非异常传播错误——与 C API 大量交互、不想用异常的 C++ 代码库。 - 外置可热更新的内核偏移数据(DynData):解耦驱动二进制与内核版本漂移。
关键设计决策
- 平台无关抽象基类,为 Linux 移植预留接缝:
API/SystemAPI.h定义抽象CSystemAPI(大量纯虚UpdateProcessList()等),Windows 侧CWindowsAPI/CWinProcess落地,API/Linux/LinuxAPI.cpp提供同名子类但全是空壳(方法直接return true)。换来「GUI 永不直接碰 phlib」的干净解耦,代价是抽象基类大量样板、Linux 实现至今仍是占位——跨平台是架构志向而非已实现能力,需如实看待。 - 特权分离三层架构:主 GUI 进程 ↔
TaskHelper.exe(Qt-free 特权 worker/服务)↔KTaskExplorer.sys(KSystemInformer 内核驱动,KphConnect+ DynData)。把高危操作下沉到无重型依赖的独立进程,主进程瘦身、攻击面收窄,代价是引入跨进程 IPC 与序列化复杂度。 - 字符串/内存模型的 FFI 边界设计:phlib 用引用计数
PPH_STRING+ NT 结构体,Qt 用QString/QSharedPointer,两套内存模型靠CastPhString/CastQString两个原子函数无缝互转;CWinProcess::InitStaticData(_SYSTEM_PROCESS_INFORMATION*)是主战场(WinProcess.cpp达 127KB)。海量逐字段桥接样板正是那 14 万行应用层的主体——这也是「价值不在代码量」的原因。
竞品格局与定位
竞品对比矩阵
| 维度 | TaskExplorer | System Informer(前 Process Hacker) | Process Explorer(Sysinternals) | Windows 任务管理器 |
|---|---|---|---|---|
| GUI 框架 | Qt(现代化 + 跨平台志向) | 原生 Win32 | 原生 Win32 | 原生 Win32 |
| 内省深度 | 深(句柄/线程栈/内存编辑/ETW) | 深(同源 phlib,更权威) | 中(句柄/DLL,网络弱) | 浅(屏蔽受保护进程) |
| 开源 | GPL-3.0 ✓ | MIT ✓ | 闭源 | 闭源(内置) |
| 内核驱动 | 自带(重编译 systeminformer.sys) | 自带(官方) | 微软签名 | 系统级 |
| 生态集成 | Sandboxie 沙箱集成 | 插件体系 | 无 | 无 |
| 维护活跃度 | 低维护(7 年长尾) | 高(官方继任) | 缓慢(微软) | 随系统 |
| Star 量级 | 3.6K | 万级(~12K+) | 闭源无 star | 内置 |
差异化护城河
- 生态护城河:Sandboxie 集成 + 与自家工具线共享更新器/辅助库,这是 System Informer 不会做的。
- 技术差异化:Qt 重壳带来的跨平台接缝(Linux 高级 GUI 任务管理器卡位)与现代界面。
- 信任护城河:开源可审 + 知名作者背书(Sandboxie 作者)。
- 但需诚实承认:内核能力本身非独占——它借自上游 phlib,护城河在「壳」与「生态」而非「核」。
竞争风险
最可能被 System Informer 覆盖——它是 TaskExplorer 的技术根基,活跃度与资源全面占优。若 System Informer 推出现代化/跨平台 GUI,TaskExplorer 的差异化将被大幅蚕食。7 年低维护节奏(近 90 天仅 5 commit)也是长期可持续性风险。
生态定位
Process Hacker/System Informer 内核能力的「Qt 现代化前端 + Sandboxie 生态绑定」分支,在「Linux 高级 GUI 任务管理器」这一细分蓝海里抢卡位,与上游是「既依赖又竞争」的微妙关系。
套利机会分析
- 信息差:知名度(3.6K star)远落后于其技术根基 System Informer(万级)与实际工程质量,且作者背书极硬——属于「高质量 + 活跃 + 知名度尚未匹配实力」的潜力股。
- 技术借鉴:「C 库 ↔ Qt model/view 桥接」「Qt-free 特权 worker + 长度前缀 RPC 权限分离」「OS 无关抽象基类 + 平台分目录」三套模式,对任何要给重型原生库做跨平台桌面前端的团队都是现成蓝本。
- 生态位:填补了「现代 Qt GUI + 跨平台志向 + 深度进程内省 + 沙箱集成」的空白;正面对手只有 System Informer 与 Process Explorer,偏蓝海而非红海厮杀。
- 趋势判断:近 25 天月入 100+ star、明显加速,与 v1.7.x/v1.8.0 连发、Qt6.8 升级、微软签名驱动 + EV 代码签名等稳定性里程碑吻合——成熟项目的「二次生长」信号。
风险与不足
- 构建门槛极高(Issue #86「无法从源码构建」19 评论):嵌入 Process Hacker、phlib、qwt、zlib 多套源码树 + Qt + MSVC + 内核驱动的混合工具链,对外部贡献者几乎劝退,也是项目长期单人主导的客观成因。
- 跨平台仍是空头支票:
API/Linux/LinuxAPI.cpp至今是空壳,「Linux 高级 GUI 任务管理器」是志向而非现实,勿被宣传误导。 - 无任何应用层测试:质量靠手测 + Issue 反馈驱动;CI(
.github/workflows/main.yml)仅workflow_dispatch触发且只编内核驱动产物,不构建 App、不跑测试。 - 无架构/设计文档:理解架构需读码或借助外部 DeepWiki;CHANGELOG 详尽但含较多拼写错误。
- 信任成本:自带需加载的内核驱动,对安全敏感环境是天然顾虑(Issue #114)。
- 巴士因子=1:7 年单人维护、近期低频,作者一旦停手,社区难以接力(构建门槛太高)。
行动建议
- 如果你要用它:你是逆向/安全研究者、需深挖「程序在干什么」(线程栈回溯、句柄文件名、内存字符串搜索、ETW 网络追踪)且偏好现代 Qt 界面 + 开源可审,或本就是 Sandboxie 用户——选它。若只求权威稳定、要微软签名背书或更活跃维护,选 System Informer 或 Process Explorer。
- 如果你要学它:重点读
TaskExplorer/API/Windows/ProcessHacker.cpp(CastPhString/CastQString/InitKSI桥接核心)、API/Windows/WinProcess.cpp(phlib→Qt 字段翻译)、API/SystemAPI.h+API/ProcessInfo.h(OS 无关抽象基类)、TaskHelper/Main.cpp(Qt-free 特权进程 + named pipe RPC)、GUI/Models/ProcessModel.h(增量 set-diff 模型)。 - 如果你要 fork 它:最有价值的方向是把
API/Linux/的空壳真正实现(读/proc填充抽象基类),兑现「Linux 高级 GUI 任务管理器」的承诺——抽象接缝已经铺好,这是回报最高的切入点;其次是补应用层测试、简化构建链降低贡献门槛。
知识入口
| 资源 | 链接 |
|---|---|
| DeepWiki | https://deepwiki.com/DavidXanatos/TaskExplorer (已收录,含架构/内核组件/API 参考) |
| Zread.ai | 未收录 |
| 关联论文 | 无 |
| 在线 Demo | 无(桌面原生应用;官网 https://xanasoft.com/ 提供截图与安装包) |