Executive(执行体)
Windows executive 是Ntoskrnl.exe中的上层,内核是.Ntoskrnl中的下层。
executive包括下列类型的函数:
- 用户模式下可调用的函数,这些函数调用系统服务,通过Ntdll导出。大多数服务都可以通过windows API访问,少数服务没有公开写在文档中,例如NtCreatePagingFile。
- 设备驱动函数,这些函数通过DeviceIoControl函数调用,提供了从用户模式到内核模式的一个接口。
- 只能从内核模式调用的函数,WDK的文档里有。
- 内核模式可调用的函数,但不在WDK的文档里。
- 定义成全局符号的函数。
- 定义成全局符号的内部模块函数。
executive包括以下一些组件:
- 配置管理器(管理注册表)
- 进程管理器,创建和终止进程和线程。
- 安全引用监视器,强制本机的安全规定,保护系统资源。
- I/O管理器。
- 即插即用管理器。
- 电源管理器。
- 驱动模型管理器。
- 缓存管理器。
- 内存管理器。
- logical prefetcher 和 Superfetch
- 对象管理器。
- 高级LPC
- 一组通用的运行时库。
- Executive 支持的routines。
- 内核调试库。
- 用户模式调试框架。
- kernel transaction manager
- hypervisor library,Hyper-V的一部分。
- errata manager
- 驱动验证。
- 事件跟踪器。
- Windows诊断部件。
- 文件系统运行时库。
内核
Ntoskrnl.exe中提供了一些基础的内核函数,比如线程调度和同步机制,可以给executive中的组件使用,也可以给低层的硬件架构提供支持,比如中断和异常分发。
内核代码主要是用C语言写的,还有一些汇编代码用于访问特殊的处理器指令和C语言不容易访问的寄存器。内核函数在WDK文档里有描述。
设备驱动
设备驱动可以加载到内核模式的模块中,一般都是以.sys结尾。是I/O管理器和相关硬件之间的接口,运行在内核模式下中的三种上下文中:
- 用户线程初始化I/O。
- 内核模式的系统线程。
- 中断的结果。
有几种类型的设备驱动:
- 硬件设备驱动,操作硬件输出或获取物理设备或网络数据。比如总线驱动,人体接口驱动,大存储驱动等。
- 文件系统驱动,面向文件I/O请求。
- 文件系统过滤驱动,例如磁盘镜象和加密。
- 网络重定向和服务器驱动。
- 协议驱动,实现网络协议,TCP/IP,NetBEUI,IPX/SPX。
- 内核流过滤驱动,数据流的信号处理,比如记录和显示声音和视频。
因为安装设备驱动是仅有的一种在系统中添加用户可写的内核模式代码的方式,有些程序员为了访问在用户模式下不能访问的操作系统内部函数或数据结构,将程序写成设备驱动。
WDF
Windows Driver Foundation (WDF) 相比WDM简化了Windows驱动开发,提供了两套框架:
- 内核模式驱动 (KMDF)
- 用户模式驱动(UMDF)
开发者可以用KMDF在Windows 2000 SP4以后的版本上写驱动,UMDF支持Windows XP以后的版本。
KMDF提供了一个简单的接口给WDM,并且隐藏了复杂的模型。
UMDF允许某些级别的驱动,大多数是基于USB的,比如摄像头,MP3,手机,PDA,打印机。
UMDF的驱动在用户模式下以服务的方式运行,用ALPC与内核模式通信。
系统进程
下面一些进程是每个Windows系统都有的:
- 空闲进程(Idle进程)。
- 系统进程(包括内核模式的主要线程),由PsCreateSystemThread建立系统线程。
- 会话管理器(Smss.exe),系统创建的第一个用户模式下的进程。
- 本地会话管理器(Lsm.exe)
- Windows子系统(Csrss.exe)
- Session0初始化(Wininit.exe),创建temp文件夹,创建Services.exe,开户Lsass.exe,Lsm.exe。
- 登陆(Winlogon.exe)
- 服务控制器(Services.exe)和其创建的子服务进程(Svchost.exe)
- 本地安全认证服务器(Lsass.exe)