【GitHub】System Informer:Windows 平台最强开源系统监控与调试利器

一、项目概述

1.1 从 Process Hacker 到 System Informer 的演进

System Informer (前身为 Process Hacker )是 Windows 平台上最强大的开源系统监控、进程管理和调试工具之一。由 Winsider Seminars & Solutions, Inc. 开发和维护,现已发展成为替代 Windows 任务管理器的最佳选择。

"A free, powerful, multi-purpose tool that helps you monitor system resources , debug software and detect malware."

项目属性 详情
现用名 System Informer
前身 Process Hacker(2.0 ~ 3.0)
GitHub 仓库 winsiderss/systeminformer
官网 systeminformer.com
许可证 MIT
Stars ⭐ 14.5k+
Forks 🍴 1.7k+
提交数 15,790+ 次
最新版本 v3.2.25011.2103(2025年5月14日)

1.2 项目定位与核心价值

System Informer 的核心定位是:超越任务管理器的全能系统工具

对比维度 Windows 任务管理器 System Informer
进程信息深度 基础 极深(句柄、内存、线程、模块)
服务管理 简单 完整(创建、编辑、控制)
网络监控 基础 详细(连接、进程关联、可关闭)
调试功能 强大(堆栈跟踪、内核模式支持)
便携性 需安装 免安装、U 盘可用
开源 是(MIT)

二、核心功能详解

2.1 系统资源监控

实时图表与统计

System Informer 提供详细的系统活动概览,带有高亮显示:

复制代码
系统监控面板
├── CPU 使用率(按进程、核心、NUMA 节点)
├── 内存使用(物理、虚拟、分页文件)
├── I/O 读写速率
├── GPU 使用率(引擎、显存)
├── 磁盘活动(读写、响应时间)
└── 网络流量(按适配器、进程)
资源消耗定位

"Graphs and statistics allow you quickly to track down resource hogs and runaway processes."

  • 实时高亮:资源消耗大的进程会自动高亮显示
  • 快速排序:点击列标题即可按任意指标排序
  • 历史图表:可查看 CPU、内存、I/O 的历史趋势

2.2 进程管理

深度进程信息
信息类别 详细内容
基本信息 PID、PPID、用户名、会话、优先级、亲和性
内存 工作集、私有字节、可共享字节、堆信息
线程 TID、CPU 时间、等待原因、启动地址
模块 DLL 路径、版本、数字签名、加载时间
句柄 文件、注册表键、事件、互斥量等所有句柄
Token 权限、组、完整性级别、UAC 虚拟化
DEP/ASLR 数据执行保护、地址空间布局随机化
.NET 托管堆、GC 代数、JIT 编译统计
高级操作
markdown 复制代码
✅ 强制结束进程(包括顽固进程)
✅ 挂起/恢复进程
✅ 编辑环境变量
✅ 设置优先级和 I/O 优先级
✅ 设置处理器亲和性(支持最多 64 个处理器)
✅ 创建转储文件(Full/Mini/Dump)
✅ 重启进程
✅ 检测进程字符串

2.3 文件占用检测

"Can't edit or delete a file? Discover which processes are using that file."

这是 System Informer 最受欢迎的功能之一:

复制代码
使用场景:
  尝试删除文件 → 提示"文件被占用" → 无法删除
  
解决方案:
  1. 在 System Informer 中搜索文件名
  2. 查看哪些进程持有该文件的句柄
  3. 关闭这些进程或强制释放句柄
  4. 成功删除文件

2.4 网络监控

"See what programs have active network connections, and close them if necessary."

功能特性
功能 说明
连接列表 显示所有 TCP/UDP 连接和监听端口
进程关联 每个连接都关联到具体进程
远程地址 显示远程 IP 和端口
强制关闭 可强制关闭指定连接
流量统计 按进程统计网络发送/接收量
防火墙状态 显示连接的防火墙规则状态

2.5 服务管理

"Go beyond services.msc: create, edit and control services."

超越 services.msc
功能 services.msc System Informer
启动/停止服务
创建新服务
编辑服务配置 基础 ✅ 完整
查看服务进程
服务依赖关系 简单 ✅ 图形化展示
驱动服务管理 基础 ✅ 完整

2.6 堆栈跟踪与调试

"View detailed stack traces with kernel-mode, WOW64 and .NET support."

调试功能
复制代码
堆栈跟踪
├── 用户模式堆栈
├── 内核模式堆栈(需内核驱动)
├── WOW64 转换(32 位进程在 64 位系统上)
├── .NET 托管调用栈
└── 符号解析(需要 PDB 符号文件)

2.7 恶意软件检测

System Informer 集成了多种恶意软件检测机制:

检测方式 说明
数字签名验证 检查进程/模块是否有有效数字签名
行为分析 监控可疑行为(如注入、隐藏)
文件锁定检测 发现恶意软件锁定的文件
网络异常检测 发现可疑的外连行为
服务隐藏检测 识别隐藏的或可疑的系统服务
内核级监控 通过驱动获取底层系统活动

三、技术架构分析

3.1 项目结构

复制代码
SystemInformer/
├── SystemInformer/           # 主应用程序(用户模式)
│   ├── resources/           # 图标、对话框资源
│   ├── SystemInformer.rc   # 资源定义
│   └── ...                # 主程序源代码
│
├── KSystemInformer/         # 内核模式驱动
│   ├── drvmain.c          # 驱动入口
│   ├── process.c          # 进程通知回调
│   ├── thread.c           # 线程通知回调
│   └── ...              # 其他内核功能
│
├── kphlib/                 # 内核模式辅助库(Kernel PH Library)
│   ├── kph.c            # 内核函数封装
│   └── ...
│
├── phlib/                   # 用户模式核心库(Process Hacker Library)
│   ├── process.c         # 进程相关函数
│   ├── memory.c          # 内存操作函数
│   ├── thread.c          # 线程操作函数
│   └── ...
│
├── phnt/                   # Windows NT 内部 API 头文件
│   ├── ntdll.h          # NTDLL 导出函数声明
│   ├── ntos.h           # 内核函数声明
│   └── ...             # 大量未公开 API 声明
│
├── plugins/                # 插件系统
│   ├── DotNetTools/     # .NET 程序分析插件
│   ├── ExtendedTools/   # 扩展工具(磁盘、网络图表)
│   ├── HardwareDevices/  # 硬件设备监控(原 NetAdapters)
│   ├── ToolStatus/       # 工具栏和状态栏
│   ├── UserNotes/       # 用户备注
│   └── Updater/        # 自动更新插件
│
├── tools/                  # 辅助开发工具
│   └── ...
│
├── build/                  # 构建脚本
│   ├── build_init.cmd   # 初始化构建环境
│   ├── build_release.cmd # 编译发布版本
│   └── README.md        # 构建文档
│
├── cmake/                  # CMake 配置
│   └── ...
│
├── SystemInformer.sln      # Visual Studio 解决方案
├── Plugins.sln            # 插件解决方案
├── CMakeLists.txt         # CMake 主配置
└── ...

3.2 编程语言构成

语言 占比 用途
C 88.6% 核心功能、内核驱动、系统调用
C++ 7.5% 部分组件、插件
C# 3.3% 工具、辅助脚本、插件
Batchfile 0.3% 构建脚本
CMake 0.3% 构建系统配置
PowerShell 0.0% 辅助脚本

3.3 核心技术组件

3.3.1 phnt ------ Windows NT 内部 API 封装

phnt/ 是 System Informer 最具价值的技术资产之一,包含了大量 未公开的 Windows NT 内部 API 的声明和封装。

c 复制代码
// 示例:ntdll.h 中的声明
NTSYSCALAPI
NTSTATUS
NTAPI
NtQuerySystemInformation(
    _In_ SYSTEM_INFORMATION_CLASS SystemInformationClass,
    _Inout_ PVOID SystemInformation,
    _In_ ULONG SystemInformationLength,
    _Out_opt_ PULONG ReturnLength
    );

// 使用示例:枚举所有进程
PSYSTEM_PROCESS_INFORMATION processInfo;
ULONG bufferSize = 0x10000;
PVOID buffer = PhAllocate(bufferSize);

NtQuerySystemInformation(
    SystemProcessInformation,
    buffer,
    bufferSize,
    NULL
    );

// 遍历进程链表
PSYSTEM_PROCESS_INFORMATION p = buffer;
while (TRUE) {
    // 处理进程信息
    if (p->NextEntryOffset == 0) break;
    p = (PSYSTEM_PROCESS_INFORMATION)((PUCHAR)p + p->NextEntryOffset);
}
3.3.2 phlib ------ 用户模式核心库

phlib/ 提供了丰富的用户模式辅助函数:

模块 功能
process.c/h 进程枚举、信息获取、操作
memory.c/h 内存读取/写入、内存区域枚举
thread.c/h 线程枚举、线程操作
module.c/h 模块枚举、模块信息获取
handle.c/h 句柄枚举、句柄操作
service.c/h 服务管理
network.c/h 网络连接枚举
provider.c/h 进程提供者(实时更新进程信息)
3.3.3 KSystemInformer ------ 内核模式驱动

KSystemInformer/ 是内核模式驱动,提供超越用户模式的能力:

c 复制代码
// 驱动主要功能
├── 进程创建/退出通知
├── 线程创建/退出通知
├── 镜像加载通知
├── 注册表操作监控
├── 文件操作监控
├── 对象回调(ObRegisterCallbacks)
├── 进程/线程/句柄操作
└── 内核模式堆栈回溯

关键代码流程

复制代码
用户模式请求
    ↓
DeviceIoControl (自定义 IOCTL)
    ↓
内核驱动分发函数(DispatchDeviceControl)
    ↓
执行内核操作(如枚举进程、读取内存)
    ↓
返回结果到用户模式
3.3.4 插件系统

System Informer 支持插件扩展,插件使用明确的 API 接口:

c 复制代码
// 插件导出函数
BOOLEAN NTAPI PhPluginInitialization(
    _In_ PPH_PLUGIN Plugin
    );

BOOLEAN NTAPI PhPluginCleanup(
    _In_ PPH_PLUGIN Plugin
    );

// 插件可以:
// 1. 添加新的菜单项
// 2. 添加新的标签页
// 3. 处理事件通知
// 4. 扩展现有功能

四、编译与安装指南

4.1 系统要求

项目 要求
操作系统 Windows 10 或更高版本
架构 32 位(x86)或 64 位(x64)
构建工具 Visual Studio 2022 或更高版本
可选 CMake 3.10+

4.2 从源码编译

步骤 1:克隆仓库
bash 复制代码
git clone https://github.com/winsiderss/systeminformer.git
cd systeminformer
步骤 2:初始化构建环境(仅首次需要)
bash 复制代码
cd build
build_init.cmd

此脚本会:

  • 下载必要的构建工具
  • 更新第三方库(如果有)
  • 配置构建环境
步骤 3:编译项目

方式一:使用构建脚本

bash 复制代码
build_release.cmd

方式二:使用 Visual Studio

  1. 打开 SystemInformer.sln(主程序)
  2. 打开 Plugins.sln(插件)
  3. 选择配置(Debug/Release)
  4. 构建解决方案
步骤 4:获取编译输出
复制代码
bin/
├── Debug-x64/
│   ├── SystemInformer.exe
│   ├── KSystemInformer.sys
│   └── plugins/
├── Release-x64/
├── Debug-x86/
└── Release-x86/

4.3 便携式运行

System Informer 支持完全便携式运行:

复制代码
U 盘/
└── SystemInformer/
    ├── SystemInformer.exe
    ├── SystemInformer.exe.settings.xml  # 配置文件(可选)
    ├── KSystemInformer.sys
    └── plugins/
启用便携式配置
  1. 在文件夹选项中取消勾选"隐藏已知文件类型的扩展名"
  2. 在 SystemInformer.exe 同目录下创建一个空白文件
  3. 将文件重命名为 SystemInformer.exe.settings.xml

五、使用指南

5.1 界面布局

复制代码
System Informer 主界面
┌─────────────────────────────────────────────┐
│  菜单栏                                       │
├─────────────────────────────────────────────┤
│  工具栏(可选,ToolStatus 插件)               │
├──────────────────┬──────────────────────────┤
│                  │                           │
│  进程树列表       │  进程属性 / 详细信息        │
│  (可排序、     │  (标签页切换)             │
│   可筛选、     │                           │
│   高亮显示)    │  ┌─────────────────────┐  │
│                  │  │ 进程 │ 性能 │ 线程 │  │  │
│                  │  ├─────────────────────┤  │
│                  │  │ 模块 │ 句柄 │ 内存 │  │  │
│                  │  ├─────────────────────┤  │
│                  │  │ Token │ ...  │      │  │  │
│                  │  └─────────────────────┘  │
├──────────────────┴──────────────────────────┤
│  状态栏(可选)                                 │
└─────────────────────────────────────────────┘

5.2 常用操作

查找文件占用进程
复制代码
场景:无法删除文件 "example.txt"

步骤:
1. 按 Ctrl+F(查找句柄)
2. 输入文件名 "example.txt"
3. 查看搜索结果,显示持有该文件句柄的进程
4. 右键该进程 → 关闭句柄(或结束进程)
5. 现在可以删除文件了
查看进程详细信息
复制代码
右键进程 → 属性(或双击进程)
    ↓
弹出进程属性对话框
    ↓
标签页:
  - 进程:基本信息、内存、CPU、I/O
  - 线程:线程列表、CPU 使用率、等待原因
  - 模块:加载的 DLL 列表
  - 句柄:打开的句柄(文件、注册表、事件等)
  - 内存:内存区域、堆信息
  - Token:权限、组、完整性级别
  - .NET:托管堆、JIT 信息(.NET 进程)
  - 服务等
强制结束顽固进程
复制代码
右键进程 → 终止(或按 Delete 键)
    ↓
如果无法结束:
1. 勾选"强制终止"
2. 如果仍然无法结束,可能需要内核驱动支持
3. 安装 KSystemInformer 驱动后重试

5.3 系统信息窗口

Ctrl+I 或 菜单 → View → System Information:

复制代码
系统信息窗口
├── 计算机(CPU、内存、系统信息)
├── CPU(每个核心的使用率图表)
├── 内存(物理内存、虚拟内存图表)
├── I/O(磁盘读写速率)
├── GPU(GPU 引擎使用率、显存)
└── 网络(每个适配器的流量图表)

技巧 :按 F11 可以全屏显示系统信息窗口。

5.4 网络连接管理

复制代码
菜单 → View → Network
    ↓
网络连接列表
├── 协议(TCP/UDP)
├── 本地地址:端口
├── 远程地址:端口
├── 状态(Established、Listen 等)
├── PID
└── 进程名
    ↓
右键连接 → Close(强制关闭连接)

六、插件系统详解

6.1 官方插件

插件名 功能
DotNetTools .NET 程序分析(托管堆、GC、JIT)
ExtendedTools 扩展工具(磁盘活动、网络图表、GPU 信息)
HardwareDevices 硬件设备监控(原 NetAdapters,网络适配器图表)
ToolStatus 工具栏和状态栏增强
UserNotes 为用户/进程添加备注
Updater 自动检查更新并安装

6.2 插件开发入门

插件基本结构
c 复制代码
#include <ph.h>
#include <phplugin.h>

BOOLEAN NTAPI PhPluginInitialization(
    _In_ PPH_PLUGIN Plugin
    )
{
    // 注册插件信息
    PhRegisterPlugin(Plugin);
    
    // 添加菜单项
    PhPluginAddMenuItem(Plugin, ...);
    
    // 注册回调函数
    PhRegisterCallback(...);
    
    return TRUE;
}

BOOLEAN NTAPI PhPluginCleanup(
    _In_ PPH_PLUGIN Plugin
    )
{
    // 清理资源
    return TRUE;
}

// 导出函数
PH_PLUGIN_EXPORT BOOLEAN NTAPI PhPluginInitialization(...);
PH_PLUGIN_EXPORT BOOLEAN NTAPI PhPluginCleanup(...);

6.3 安装插件

复制代码
将插件 DLL 放入 plugins/ 目录
    ↓
重启 System Informer
    ↓
菜单 → Options → Plugin Settings
    ↓
勾选要启用的插件

七、技术深度剖析

7.1 Windows 内部 API 的运用

System Informer 的强大之处在于深度运用 Windows 未公开的内部 API:

NtQuerySystemInformation
c 复制代码
// 获取系统进程信息
NtQuerySystemInformation(
    SystemProcessInformation,
    buffer,
    bufferSize,
    &returnLength
    );

// 获取系统内存信息
NtQuerySystemInformation(
    SystemBasicPerformanceInformation,
    &perfInfo,
    sizeof(SYSTEM_BASIC_PERFORMANCE_INFORMATION),
    NULL
    );
NtQueryInformationProcess
c 复制代码
// 获取进程 PEB 地址
NtQueryInformationProcess(
    ProcessHandle,
    ProcessBasicInformation,
    &basicInfo,
    sizeof(PROCESS_BASIC_INFORMATION),
    NULL
    );

// 读取进程内存
NtReadVirtualMemory(
    ProcessHandle,
    BaseAddress,
    Buffer,
    BufferSize,
    &NumberOfBytesRead
    );

7.2 内核驱动通信

复制代码
用户模式                                                    内核模式
    │                                                            │
    │  DeviceIoControl(hDevice, IOCTL_XXX, input, ...)           │
    │────────────────────────────────────────────────────────────>│
    │                                                            │
    │                                                            │ DispatchDeviceControl(...)
    │                                                            │
    │                                                            │   switch (IoControlCode) {
    │                                                            │     case IOCTL_ENUM_PROCESSES:
    │                                                            │       // 枚举进程
    │                                                            │       break;
    │                                                            │     case IOCTL_READ_MEMORY:
    │                                                            │       // 读取内存
    │                                                            │       break;
    │                                                            │   }
    │                                                            │
    │<────────────────────────────────────────────────────────────│
    │  GetLastError() / Parse output buffer                       │

7.3 进程提供者(Process Provider)

System Informer 使用"提供者"模式实时更新进程信息:

c 复制代码
// 创建进程提供者
PPH_PROVIDER ProcessProvider = PhCreateProvider(
    PROCESS_PROVIDER_TYPE,
    ProcessProviderCallback,
    NULL
    );

// 提供者回调函数(定时执行)
VOID NTAPI ProcessProviderCallback(
    _In_ PVOID Context
    )
{
    // 枚举所有进程
    // 更新进程列表
    // 触发更新通知
}

八、与 Windows 任务管理器的全面对比

功能维度 Windows 任务管理器 System Informer
开源 ❌ 闭源 ✅ MIT 开源
便携性 ❌ 系统内置 ✅ 免安装
进程列表 基础信息 极详细信息(句柄、模块、线程、内存、Token)
服务管理 简单查看/启停 创建、编辑、完整控制
网络监控 基础 详细(进程关联、可关闭连接)
磁盘监控 仅 I/O 速率 详细磁盘活动、文件操作
GPU 监控 基础 详细(引擎使用率、显存、温度)
调试功能 堆栈跟踪、内核模式支持、.NET 分析
文件占用检测 ✅ 强大
句柄查看 ✅ 完整
内存分析 基础 详细(工作集、私有字节、堆、虚拟内存)
插件系统 ✅ 丰富
更新频率 随系统更新 ✅ 活跃维护(15,790+ commits)
高 DPI 支持
命令行版本 ✅(phcli)

九、典型应用场景

9.1 系统管理员

复制代码
场景:公司电脑运行缓慢
    ↓
使用 System Informer:
1. 查看 CPU/内存/I/O 图表,定位资源消耗大户
2. 查看进程列表,按 CPU 使用率排序
3. 发现某个进程异常(如 malware.exe)
4. 查看该进程的网络连接,发现可疑外连
5. 强制结束进程,删除文件
6. 检查服务列表,移除恶意服务

9.2 软件开发者

复制代码
场景:调试程序内存泄漏
    ↓
使用 System Informer:
1. 找到自己的进程
2. 打开进程属性 → 内存标签页
3. 查看内存区域分配
4. 查看堆信息
5. 创建内存转储文件(.dmp)
6. 使用 Visual Studio 或 WinDbg 分析转储

9.3 恶意软件分析

复制代码
场景:分析可疑程序
    ↓
使用 System Informer:
1. 启动可疑程序
2. 监控其文件操作(句柄标签页)
3. 监控网络连接(网络标签页)
4. 查看其加载的模块(模块标签页)
5. 检查数字签名(属性 → 数字签名)
6. 使用 .NET Tools 插件分析 .NET 程序

十、总结与展望

10.1 项目优势

优势 说明
功能强大 超越任务管理器的所有功能
开源免费 MIT 许可证,完全免费
活跃维护 15,790+ 次提交,持续更新
社区支持 14.5k+ Stars,1.7k+ Forks
插件丰富 可扩展性强
便携运行 免安装,支持 U 盘
深度监控 内核模式支持,信息极详

10.2 未来展望

方向 说明
ARM64 支持 随着 Windows on ARM 的普及,可能需要 ARM64 构建
WSL 监控 监控 WSL 子系统内的进程
容器监控 支持 Docker/容器进程查看
更多插件 社区贡献更多功能插件

十一、参考资料


本文首发于 CSDN,转载需注明出处。

相关推荐
MY_TEUCK3 小时前
【Git 实习生小白专用】:最安全、永不翻车、公司最爱 的标准版本控制工作流程
git·安全·github
HashFlag3 小时前
Codex配置Skill
windows·ai·mac·codex
idolao4 小时前
RayLink_v8.1.6.8安装步骤详解(附RayLink远程控制与设备码连接教程)
windows
SamDeepThinking4 小时前
RocketMQ消息可靠性的三道关卡
java·后端·程序员
逛逛GitHub5 小时前
这款 DeepSeek V4 终端编程神器,在 GitHub 上火了。
github
lingx_gps6 小时前
Windows 下安装领新北斗(TracSeek)车辆动态监控系统小白指南
windows·jt808·车辆监控·主动安全·jt1078·车辆定位
冴羽yayujs6 小时前
GitHub 前端热榜项目 - 日榜(2026-05-07)
前端·github
java1234_小锋6 小时前
能让你的 AI 编程 Token 降低 60% 以上的开源神器:目前 GitHub 狂揽约 4.2 万星标
人工智能·github·ai编程