【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,转载需注明出处。

相关推荐
达达尼昂2 分钟前
编码智能体中的模型选择与执行深度
人工智能·后端·程序员
诚信定制83918 分钟前
GitHub 三大协作利器:Topics标签、Discussions与Actions Marketplace
github
XUHUOJUN1 小时前
Windows Server 2025 Stretch Cluster 架构详解
windows·microsoft·azure local
zhou135284822671 小时前
Windows 配置 WSL (Ubuntu) 环境完整指南
linux·windows·ubuntu
程序员cxuan1 小时前
Cursor 掀桌子了,Grok 4.5 这次要上天了?
人工智能·后端·程序员
XUHUOJUN2 小时前
Windows Server 2025 RAC vs Stretch Cluster 技术定位
windows·microsoft·azure local
jojo甜在心2 小时前
(开源)宠物商城系统 全栈开发实录 采用 Java + SpringBoot + Vue + MySQL
java·开源·宠物
欣慰的猫咪2 小时前
GitHub Copilot 正式成为 JetBrains AI Assistant 的原生默认 Agent 之一
人工智能·github·copilot
鲸~屿2 小时前
Git上传本地文件到GitHub教学指南
git·github
sg_knight3 小时前
Claude Code 安装指南(macOS / Linux / Windows WSL)
linux·windows·macos·claude·code·anthropic·claude-code