ReactOS 项目目录工程分析文档

================================================================================

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+)

构建步骤:

  1. 运行 configure.cmd (Windows) 或 configure.sh (Unix)

  2. 运行 ninja (构建全部) 或 ninja <module> (构建指定模块)

  3. 运行 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 执行体锁机制如下:

  1. Rundown Protection - 线程/进程保护

状态: 已实现,需清理

  1. Guarded Mutex - 守护互斥体

状态: 已实现,可能有 Bug

使用: 配置管理器、PnP、LPC、作业、内存管理

  1. 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) │

└─────────────────────────────────────────────────────────────┘

================================================================================

文档结束

================================================================================

相关推荐
DS小龙哥3 小时前
基于STM32与华为云的智能康养木屋环境监测与控制系统
stm32·嵌入式硬件·华为云
顾喵3 小时前
嵌入式完整中断开发流程:注册函数、服务函数、回调函数详解
单片机·嵌入式硬件
破晓单片机3 小时前
049、STM32项目分享:智能宠物喂食器系统
stm32·单片机·嵌入式硬件·宠物
三佛科技-187366133973 小时前
BS66F350增强型触摸 A/D 闪存单片机,用于带触摸按键和LED显示的MCU
单片机·嵌入式硬件
清风6666663 小时前
基于单片机的多路自动投食机设计与智能语音喂养系统
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
sramdram3 小时前
基于32位MCU微控制器的血氧仪参考方案
单片机·嵌入式硬件·微控制器·32位mcu·mcu微控制器
济6173 小时前
ROS开发专栏---ROS2 三维视觉应用(2)---使用 PCL 进行桌面物品检测实验---适配Ubuntu 22.04
嵌入式硬件·嵌入式·ros2·机器人开发·机器人方向
ylscode4 小时前
加密合规性:1Password 解决硬件令牌配置差异问题
stm32·单片机·嵌入式硬件
清风66666613 小时前
基于单片机的锅炉压力与温度监测报警系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业