================================================================================
ReactOS 项目目录工程分析文档
================================================================================
项目名称: ReactOS
版本: 0.4.15 (Alpha)
许可证: GNU GPL 2.0
构建系统: CMake (>= 3.17.0) + Ninja / MSVC 2019+
分析日期: 2026-06-04
================================================================================
一、项目概述
================================================================================
ReactOS 是一个开源操作系统项目,目标是开发一个与 Microsoft Windows NT 系列
(NT4, 2000, XP, 2003, Vista, 7)操作系统兼容的操作系统。项目当前主要聚焦于
Windows Server 2003 兼容性,同时关注与 Windows Vista 及更新版本的兼容性。
ReactOS 的用户态部分大量基于 WINE 项目,两个团队有密切合作。
目前 ReactOS 处于 Alpha 阶段,建议在虚拟机或无敏感数据的计算机上测试。
支持架构: i386 (x86), amd64 (x64), arm (ARM32), arm64 (AArch64)
二、顶级目录结构
d:\reactos\
├── .github/ GitHub CI/CD 配置 (FUNDING.yml, labeler.yml)
├── .theia/ Theia IDE 配置 (launch.json, tasks.json)
├── base/ 基础系统组件(应用程序、服务、Shell等)
├── boot/ 引导加载程序
├── dll/ 动态链接库(用户态 DLL)
├── drivers/ 设备驱动程序
├── hal/ 硬件抽象层 (HAL)
├── media/ 媒体与文档资源
├── modules/ 外部/附加模块
├── ntoskrnl/ NT 操作系统内核
├── sdk/ 软件开发工具包
├── subsystems/ 子系统
├── win32ss/ Win32 子系统(内核态图形/窗口)
└── 根目录配置文件
三、各目录详细分析
3.1 base/ - 基础系统组件
──────────────────────────────────────────────────────────────────────
包含用户态的系统应用程序、服务和控制面板小程序。
base/
├── shell/cmd/ 命令行解释器 (cmd.exe) - if.c
├── applications/ 用户应用程序
│ ├── cmd/ 命令行处理器 (cmd.c)
│ └── ... 其他应用程序
├── services/ 系统服务
│ ├── svchost/ 服务主机 (svchost.c)
│ └── wkssvc/ 工作站服务 (wkssvc.c)
├── system/ 系统工具
│ ├── logonui/ 登录界面 (logonui.c)
│ ├── winlogon/ 登录服务 (winlogon.c)
│ ├── msiexec/ MSI 安装程序 (msiexec.c)
│ └── regsvr32/ DLL 注册工具 (regsvr32.c)
└── CMakeLists.txt 构建配置
3.2 boot/ - 引导加载程序
──────────────────────────────────────────────────────────────────────
负责系统启动流程。
boot/
├── armllb/ ARM 底层引导
│ ├── inc/ fw.h, hw.h
│ ├── boot.s 启动汇编
│ ├── envir.c 环境初始化
│ ├── fw.c 固件接口
│ └── main.c 主入口
├── bcd/ 启动配置数据
├── bgfx/ 启动图形
├── rtl/ 引导运行时库 (nlsboot.c)
├── CMakeLists.txt
├── remaster.cmd 重建镜像脚本 (Windows)
└── remaster.sh 重建镜像脚本 (Unix)
3.3 dll/ - 动态链接库
──────────────────────────────────────────────────────────────────────
实现 Windows API 的用户态 DLL。
dll/
├── cpl/ 控制面板小程序 (Control Panel)
│ ├── desk/ 桌面设置 (desk.c, draw.c, misc.c)
│ ├── intl/ 区域与语言 (intl.c, date.c, time.c, sort.c)
│ ├── joy/ 游戏控制器 (joy.c)
│ ├── main/ 主控制面板 (main.c)
│ └── ncpa/ 网络连接 (ncpa.c)
├── np/ 网络提供者 (Network Providers)
│ └── nfs/ NFS 网络提供者 (nfsnp.rc)
├── opengl/ OpenGL 支持
│ └── mesa/ Mesa 实现 (dd.h, pb.c, vb.c)
└── win32/ Win32 API DLL
├── atl/ ATL 库 (atl.c)
├── hid/ 人体学输入设备 (hid.c)
├── ifmon/ 网络接口监视器 (ip.c)
├── lpk/ 语言包 (lpk.c)
├── mmdrv/ 多媒体驱动
├── mpr/ 多协议路由 (nps.c)
├── msi/ Windows Installer (msi.c, sql.y)
├── sfc/ 系统文件保护 (sfc.c)
├── sti/ 静止图像 (sti.c)
└── sxs/ 并行程序集 (sxs.c)
3.4 hal/ - 硬件抽象层
──────────────────────────────────────────────────────────────────────
封装硬件差异,提供统一的硬件访问接口。
hal/
├── halx86/ x86 HAL 实现
│ ├── acpi/ ACPI 电源管理 (halacpi.c, madt.c)
│ ├── apic/ APIC 中断控制器 (apic.c, apictimer.c)
│ ├── generic/ 通用功能
│ │ ├── halinit.c HAL 初始化
│ │ ├── clock.c 时钟管理
│ │ ├── display.c 显示接口
│ │ ├── dma.c DMA 管理
│ │ ├── memory.c 内存管理
│ │ ├── nmi.c 非屏蔽中断
│ │ ├── pic.c PIC 控制器
│ │ ├── reboot.c 重启功能
│ │ ├── rtc.c 实时时钟
│ │ ├── spinlock.c 自旋锁
│ │ ├── timer.c 定时器
│ │ ├── trap.S 异常处理(汇编)
│ │ ├── v86.S 虚拟 8086 模式(汇编)
│ │ └── x86bios.c BIOS 兼容
│ ├── i386/ i386 特定实现
│ ├── legacy/ 传统 PC 架构
│ │ └── bus/ 总线支持
│ │ ├── cmosbus.c CMOS 总线
│ │ ├── isabus.c ISA 总线
│ │ ├── pcibus.c PCI 总线
│ │ └── sysbus.c 系统总线
│ ├── minihal/ 精简 HAL
│ ├── mp/ 多处理器支持
│ │ ├── ioapic.c I/O APIC
│ │ ├── ipi_mp.c 处理器间中断
│ │ └── smp.c SMP 初始化
│ ├── smp/ SMP 对称多处理
│ └── xbox/ Xbox 平台支持
├── CMakeLists.txt
└── hal.spec
3.5 ntoskrnl/ - NT 操作系统内核
──────────────────────────────────────────────────────────────────────
ReactOS 的核心,实现 Windows NT 内核功能。
ntoskrnl/
├── cc/ 缓存管理器 (Cache Controller)
│ ├── copy.c 缓存复制
│ ├── fs.c 文件系统缓存
│ ├── mdl.c 内存描述符列表
│ ├── pin.c 缓存固定
│ └── view.c 缓存视图
├── ex/ 执行体 (Executive)
│ ├── atom.c 原子操作
│ ├── efi.c EFI 支持
│ ├── event.c 事件对象
│ ├── init.c 执行体初始化
│ ├── sem.c 信号量
│ ├── time.c 时间管理
│ ├── timer.c 定时器对象
│ ├── uuid.c UUID 生成
│ ├── work.c 工作队列
│ ├── zone.c 内存区域
│ └── zw.S Zw 系统调用(汇编)
├── io/ I/O 管理器
│ ├── debug.c 调试输出
│ └── pnpio.h 即插即用 I/O
├── kd/ 内核调试器
│ ├── kd.h 调试器头文件
│ └── kdio.c 调试 I/O
├── kdbg/ 内核调试扩展
│ ├── kdb.c 内核调试
│ └── kdb.h 调试头文件
├── ke/ 内核核心 (Kernel Core)
│ ├── apc.c APC 异步过程调用
│ ├── bug.c 错误检查 (BSOD)
│ ├── clock.c 时钟中断
│ ├── dpc.c 延迟过程调用
│ ├── gate.c 调用门
│ ├── ipi.c 处理器间中断
│ ├── mutex.c 互斥体
│ ├── queue.c 队列
│ ├── time.c 时间
│ └── wait.c 等待
├── lpc/ LPC 本地过程调用
│ ├── port.c 端口管理
│ └── send.c 消息发送
├── mm/ 内存管理器 (Memory Manager)
│ ├── marea.c 内存区域
│ └── rmap.c 反向映射
├── ob/ 对象管理器 (Object Manager)
│ ├── obdir.c 对象目录
│ └── obref.c 对象引用
├── po/ 电源管理器 (Power Manager)
│ └── power.c 电源管理
├── ps/ 进程管理器 (Process Manager)
│ ├── debug.c 进程调试
│ ├── job.c 作业对象
│ ├── kill.c 进程终止
│ ├── psmgr.c 进程管理
│ ├── query.c 查询
│ ├── quota.c 配额
│ ├── state.c 状态
│ └── win32.c Win32 进程
├── rtl/ 运行时库 (Runtime Library)
│ └── misc.c 杂项
├── se/ 安全管理器 (Security Manager)
│ ├── acl.c 访问控制列表
│ ├── audit.c 审计
│ ├── debug.c 调试
│ ├── priv.c 权限
│ ├── sd.c 安全描述符
│ ├── semgr.c 安全管理
│ ├── sid.c 安全标识符
│ ├── sqos.c 服务质量安全
│ ├── srm.c 安全引用监视器
│ └── token.c 令牌
├── wmi/ WMI Windows 管理规范
│ ├── wmi.c WMI 实现
│ └── wmip.h WMI 私有头文件
├── KrnlFun.c 内核函数
├── guid.c 全局唯一标识符
└── ntdll.S NT DLL 入口(汇编)
内核子系统功能总结:
┌────────────────┬──────────────────────────────────────┐
│ 子系统 │ 功能 │
├────────────────┼──────────────────────────────────────┤
│ cc (缓存) │ 文件系统缓存管理 │
│ ex (执行体) │ 进程/线程创建、同步、定时器、系统调用 │
│ io (I/O) │ 设备 I/O、驱动通信、即插即用 │
│ kd/kdbg (调试) │ 内核调试支持 │
│ ke (内核核心) │ 调度、中断、DPC、APC、同步原语 │
│ lpc (LPC) │ 进程间本地通信 │
│ mm (内存) │ 虚拟内存、物理内存、页面管理 │
│ ob (对象) │ 系统对象管理(句柄、目录) │
│ po (电源) │ 电源管理 │
│ ps (进程) │ 进程/线程创建、终止、调度、作业 │
│ rtl (运行时) │ 内核运行时工具函数 │
│ se (安全) │ ACL、令牌、审计、权限检查 │
│ wmi (WMI) │ Windows 管理规范 │
└────────────────┴──────────────────────────────────────┘
3.6 sdk/ - 软件开发工具包
──────────────────────────────────────────────────────────────────────
sdk/
├── cmake/ CMake 配置脚本
│ ├── gcc.cmake GCC 编译器配置
│ ├── msvc.cmake MSVC 编译器配置
│ ├── config.cmake 编译选项
│ └── ...
├── include/ 头文件
│ ├── crt/ C 运行时头文件 (io.h)
│ ├── ddk/ Windows DDK (rx.h)
│ ├── psdk/ Platform SDK (winddk.h)
│ ├── ndk/ Native Development Kit
│ ├── reactos/ ReactOS 特定头文件
│ ├── dxsdk/ DirectX SDK
│ ├── GL/ OpenGL (gl.h)
│ └── c++/ C++ 标准库头文件
├── lib/ 库文件
│ ├── rossym/ ReactOS 符号库 (pe.c)
│ ├── rtl/ 运行时库
│ │ ├── acl.c ACL 操作
│ │ ├── atom.c 原子操作
│ │ ├── crc32.c CRC32 校验
│ │ ├── debug.c 调试支持
│ │ ├── env.c 环境变量
│ │ ├── error.c 错误处理
│ │ ├── heap.c 堆管理
│ │ ├── image.c 映像加载
│ │ ├── nls.c 国际化
│ │ ├── path.c 路径处理
│ │ ├── sd.c 安全描述符
│ │ ├── sid.c SID 处理
│ │ ├── slist.c 单向链表
│ │ ├── srw.c SRW 锁
│ │ ├── time.c 时间函数
│ │ ├── trace.c 跟踪
│ │ └── utf8.c UTF-8 支持
│ └── uuid/ UUID 生成 (iid.c)
└── tools/ 开发工具
├── bin2c.c 二进制转 C 数组
├── hpp/ 预处理器 (hpp.c)
├── pefixup.c PE 修正
├── stubgen.c 存根生成器
└── wpp/ Widl 预处理器 (ppl.l, ppy.y)
3.7 win32ss/ - Win32 子系统
──────────────────────────────────────────────────────────────────────
内核态的 Windows 图形和窗口子系统。
win32ss/
├── gdi/ GDI 图形设备接口
├── user/ 用户/窗口管理
├── reactx/ ReactX (DirectX 兼容层)
│ └── dxg/ DirectX 图形
├── napi.h Native API 头文件
├── pch.h 预编译头
├── sys-stubs.S 系统存根(汇编)
├── win32k.h Win32k 主头文件
├── win32k.rc 资源文件
├── win32k.spec 导出规范
└── win32kp.h 私有头文件
3.8 media/ - 媒体与文档
──────────────────────────────────────────────────────────────────────
media/
├── doc/ 文档
│ ├── INDEX 文档索引
│ ├── HACKING 开发指南(编码、调试)
│ ├── INTERNALS 内核内部机制(IRQL, DPC)
│ ├── DIRS 目录布局说明(待补充)
│ ├── BUGLIST 已知 Bug 列表(待补充)
│ ├── TODO 待办任务列表
│ ├── NOTES 杂项笔记
│ ├── locks.txt 内核锁机制说明
│ ├── apc APC 相关文档
│ ├── books.txt 参考书籍
│ ├── news1/news2 开发新闻
│ └── WINESYNC.txt Wine 同步文件追踪
├── inf/ 驱动安装信息文件 (INF)
│ ├── audio.inf 音频
│ ├── bda.inf 广播驱动架构
│ ├── bth.inf 蓝牙
│ ├── fdc.inf 软盘控制器
│ ├── font.inf 字体
│ ├── hal.inf HAL
│ ├── hdc.inf 硬盘控制器
│ ├── input.inf 输入设备
│ ├── intl.inf 国际化
│ ├── ks.inf 内核流
│ ├── ports.inf 端口
│ ├── scsi.inf SCSI
│ └── usb.inf USB
└── nls/ 国际化语言支持文件
├── c_856.nls 希伯来语代码页
├── c_878.nls 西里尔语代码页
├── ctype.nls 字符类型表
└── geo.nls 地理信息
四、构建系统
ReactOS 使用 CMake 作为构建系统,支持以下编译器:
-
GCC (GNU Compiler Collection)
-
Clang
-
MSVC (Microsoft Visual C++ 2019+)
构建步骤:
-
运行 configure.cmd (Windows) 或 configure.sh (Unix)
-
运行 ninja (构建全部) 或 ninja <module> (构建指定模块)
-
运行 ninja bootcd 生成可启动 CD 镜像 (bootcd.iso)
支持的构建类型:
-
Debug (默认)
-
Release
-
MinSizeRel
-
RelWithDebInfo
关键 CMake 变量:
-
ARCH: i386, amd64, arm, arm64
-
SARCH: xbox, pc98 (子架构)
-
DBG: 启用调试
-
PCH: 预编译头
-
I18N_LANG: 国际化语言
模块类型定义 (REACTOS_MODULE_TYPE):
nativecui, nativedll, kernelmodedriver, wdmdriver,
kerneldll, win32cui, win32gui, win32dll, win32ocx, cpl, module
五、内核锁机制分析
根据 media/doc/locks.txt,NT 5.2 执行体锁机制如下:
- Rundown Protection - 线程/进程保护
状态: 已实现,需清理
- Guarded Mutex - 守护互斥体
状态: 已实现,可能有 Bug
使用: 配置管理器、PnP、LPC、作业、内存管理
- Fast Referencing - 快速引用
状态: 存根实现
使用: 令牌
4a. Pushlocks - 推锁
状态: 已实现,缺 Block/Unblock
使用: 配置管理器、句柄表、对象命名空间
4b. Cache-Aware Pushlocks - 缓存感知推锁
状态: 未实现
TODO: 内核锁(排队自旋锁和栈内自旋锁)
中断请求级别 (IRQL):
PASSIVE_LEVEL - 用户态和大多数内核态代码
APC_LEVEL - APC 级别(当前未使用)
DISPATCH_LEVEL - 禁用线程调度,用于自旋锁和 DPC
> DISPATCH_LEVEL - 各 IRQ 优先级
HIGH_LEVEL - 所有中断禁用
六、待办事项 (TODO)
关键路径任务:
-
测试和调试注册表例程
-
实现文件缓存 (File Cache)
-
实现分页 (Paging)
待实现功能组:
-
DMA 函数 (hal/x86/dma.c)
-
关机支持 (ex/power.c)
-
Zw(Set/Get)SystemInformation (ex/sysinfo.c)
-
I/O 取消支持 (io/cancel)
-
目录变更通知 (io/dir.c)
-
错误日志 (io/errlog.c)
-
I/O 完成端口 (io/iocomp.c)
-
文件锁定 (io/lock.c)
-
硬件资源管理 (io/resource.c)
-
异常支持 (ke/catch.c)
-
互斥体支持 (nt/mutex.c)
重点领域:
-
安全支持 (se/*.c)
-
SCSI 微型端口驱动
-
NTFS、EXT2 文件系统
七、编码规范
文件结构:
-
每个源文件必须包含文件头,含 PROJECT、LICENSE、PURPOSE、COPYRIGHT
-
使用 SPDX 许可证标识符 (GPL-2.0-or-later)
-
COPYRIGHT 每文件不超过 3 人
格式:
-
行宽最大 100 字符
-
使用 4 空格缩进(禁止 Tab)
-
不允许行尾空格
-
switch 中 case 与语句均缩进
Wine 同步代码不得重新格式化,由 3rd Party Files.txt 和 WINESYNC.txt 追踪。
八、文件统计概览
根目录配置文件: 约 15 个 (.gitignore, CMakeLists.txt, README.md 等)
许可证文件: 5 个 (COPYING, COPYING.ARM, COPYING.LIB, COPYING3, COPYING3.LIB)
主要 C 源文件: 约 200+ 个
汇编源文件: 约 10+ 个 (*.S)
头文件: 约 50+ 个 (*.h)
CMake 构建脚本: 约 15+ 个 (CMakeLists.txt)
九、架构层次图
┌─────────────────────────────────────────────────────────────┐
│ 应用程序层 (User Apps) │
├─────────────────────────────────────────────────────────────┤
│ Win32 DLL (kernel32, user32, shell32...) │
├─────────────────────────────────────────────────────────────┤
│ Win32 子系统 (win32ss) │
│ NTDLL (ntdll.S) │
╞══════════════════════ 系统调用接口 ═══════════════════════════╡
│ NTOSKRNL 内核 │
│ ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┐ │
│ │ ex │ ke │ mm │ ps │ ob │ io │ se │ ... │
│ └──────┴──────┴──────┴──────┴──────┴──────┴──────┘ │
│ HAL (硬件抽象层) │
╞══════════════════════════════════════════════════════════════╡
│ 硬件 (Hardware) │
└─────────────────────────────────────────────────────────────┘
================================================================================
文档结束
================================================================================