整体上来说,Windows 的分为两个大的部分,即 内核模式组件 和 用户模式组件,其中 内核模式组件 主要负责完成和硬件相关的操作,用户模式组件主要负责软件相关操作。另外,还有一个 虚拟机监控程序 独立于双方存在。
虚拟机监控程序
Hyper-V虚拟机监控程序,它独立于系统的内核模式组件和用户模式组件而存在,拥有单独的内部层和驱动程序,可用于实现基于虚拟化的安全架构。
内核模式组件
包含 硬件抽象层【HAL、HAL扩展】、设备和文件驱动程序、内核、执行体【I/O管理器、安全引用监视器、电源管理器、即插即用管理器、内存管理器、进程管理器、对象管理器、配置管理器、ALPC】、窗口和图形【图形驱动程序、Windows USER和GDI 组件】 组件,负责 Windows 系统和硬件的交互,其是 Windows 实现可移植性和兼容性的关键,当 Windows 运行在不同的硬件平台时,这些组件会有所不同。
用户模式组件
包含 NTDLL.DLL、子系统DLL、CSRSS、环境子系统、系统进程、服务进程、用户进程,负责 Windows 系统软件相关部分的交互。
可扩展性
可随市场的需求快速变化并轻松扩展和更改
可移植性
可在当前不同的硬件平台运行,并可在未来可能出现的新的硬件平台中运行
兼容性
可兼容老版本的 Windows 和 MS-DOS
可靠性和健壮性
能够保护自己免遭内部故障和外部篡改;系统中的应用程序不能伤害系统和其他的应用程序
性能
系统的响应速度需要尽可能的快
分层式设计
为满足系统的可扩展性、可移植性、兼容性,Windows 采取了分层式设计,即将系统拆分为多个层级,各个层级之间暴露接口进行通信,但其内部的具体实现对其他层级透明,这样的设计使得当系统进行移植时,可以尽可能少的修改代码。
这种思想在 Windows 中的体现为 硬件抽象层、内核、执行体、子系统、进程 的分层。
模块化设计
Windows 将功能拆分为多个模块,每个模块实现不同的功能,模块之间相互独立,使得不同的模块可以使用不同的技术实现,同时在系统维护时又相对方便。
这种思想在 Windows 中的体现为 Windows 中包含的各种执行体和子系统,每个执行体、子系统实现了不同的功能。
基于虚拟化的安全架构
为了满足系统的可靠性和健壮性,Windows 采用了基于虚拟化的安全架构,由于虚拟机使用了不同的内核和系统模块,使得不同的操作可以相互隔离,进一步提升了系统的安全性
Windows 中主要有如下重要组件:
Windows 中的硬件抽象层负责和硬件的交互,当 Windows 运行在不同的硬件平台时,使用了不同的 HAL,如 x86(32位)使用了 Halacpi.dll 或 Halmacpi.dll,x64(64位)、ARM 使用了 Hal.dll,HAL 的使用使得 Windows 上层与硬件平台完全脱钩,上层的组件无需重复考虑硬件兼容性问题,降低了开发难度。
Windows 中的设备驱动程序负责在 Windows 和 相关硬件之间建立接口,用于对硬件的具体操作,它并不之间调用硬件,而是调用 HAL 的接口。
Windows 中的设备驱动程序包含如下几个类型:
Windows 中的内核由 Ntoskrnl.exe 中的一系列用于提供基础机制的函数组成,用于调用设备驱动程序来实现上层的各种操作。
Windows 中的执行体是不同功能模块的通称,其包含了各种各样的管理器,通过调用内核实现各自的功能。
目前 Windows 中的执行体大致有如下几个类型:
一个特殊的系统支持库,主要被子系统 DLL 和原生应用程序使用。
负责将基本 Windows 执行体系统服务的某些子集暴露给应用程序,Windows 应用程序不能直接调用执行体,需要通过对执行体的调用来实现功能。
一个包含 Windows 基本函数的子系统,其他的子系统通过对 Windows 子系统的调用实现相关功能,它是任何 Windows 系统必不可少的子系统,也极其重要,如果其崩溃,将导致整个 Windows 系统的崩溃。
Windows 子系统包含如下组件:
负责启动 Windows 的子系统,Windows 需要启动的子系统会保存在注册表中,系统启动时,会话管理器便会按照注册表中的配置启动对应的子系统
微软研究院发起的 Drawbridge 项目提出了一种名为 Pico 模型的子系统实现方式,其通过一个 Pico 提供程序(自定义的内核模式驱动程序,本质上是一个自定义的内核模块),负责接收用户和内核模式之间几乎全部可能的转换,其必须在其他第三方驱动程序之前加载(包括引导驱动程序),在 Windows 10 中提供的 lxss.sys 和 lxore.sys 便是 Pico 提供程序,其提供了“适用于 Linux 的 Windows 子系统”组件。
Windows 的主要系统进程如下:
Idle 进程负责占用 CPU 的闲置时间,该“进程”中的“线程”数等于系统中逻辑处理器的数量。
在不同的软件中,Idle 进程的名称可能不同,它有如下名称:
System 进程(进程 ID 为 4)是一类运行在内核模式下的特殊线程的主体,也称为内核模式系统线程。
Secure System 进程的技术用途为 VTL 1 安全内核地址空间、句柄以及系统线程的主体,但是调度、对象管理以及内存管理是属于 VTL 0 内核的,因此该线程并无实际用途,仅作为系统已启用 VBS 功能的视觉指示符。
Memory Compression 进程使用自己用户模式的地址空间存储了压缩后的内存页。
会话管理器(smss.exe)进程是系统创建的第一个用户内核模式进程,其用于会话初始化相关操作。
Windows 初始化(wininit.exe)进程用于 Windows 初始化相关操作。
服务控制管理器用于控制(启动、停止、交互) Windows 中配置的服务进程。
Windows 服务类似 Linux 中的守护进程,可不依赖交互式登录,在系统引导时自动启动
Windows 服务有三种名称:系统中正在运行的进程名称、注册表中显示的内部名称、服务管理工具中展示的显示名称
服务进程与服务之间不一定是一对一的关系,可能存在不同的服务共用同一个进程的情况
Windows 登录进程负责处理交互式用户登录和注销。其包含 winlogon.exe、logonUI.exe、userinit.exe 三个进程,具体的任务如下:
本地安全认证服务(lsass.exe)进程通过调用相应的身份验证包,验证用户输入的登录凭据是否正确,当用户身份验证成功后,会使用 SRM 中的函数生成包含用户安全配置文件的访问令牌对象。
文件资源管理器(explorer.exe)进程是 userinit.exe 的子进程,用于运行系统定义的外壳,提供文件资源管理服务。