Win32子系统(csrss.exe,win32k.sys相关知识总结)

Win32子系统

Win32子系统是Windows操作系统必须的一部分,伴随这Windows启动时运行,它包含:

  1. win32子系统进程 csrss.exe
  2. win32子系统驱动 win32k.sys
  3. win32子系统DLL kernel32.dll,user32.dll,advapi32.dll,gdi32.dll
  4. 设备相关的显示和打印驱动程序等。

Windows的启动过程

windows操作系统在启动时会进行一系列的初始化操作:

  1. 自检阶段
  2. 初始化启动阶段
  3. Boot加载阶段
  4. 检测和配置硬件阶段
  5. 内核加载阶段
  6. 启动会话管理器smss.exe,它是Windows创建的第一个用户进程。

smss.exe运行后,会加载和初始化win32k.sys,然后紧接着调用win32k.sys的DriverEntry,然后启动Win32子系统进程csrss.exe和登录进程WinLogon.exe

csrss.exe

csrss.exe(Client/Server Runtime Server Subsystem,即客户端/服务器运行时子系统),负责维护Windows子系统的日常事务,为子系统的各个进程提供服务。例如维护进程和线程、管理控制台窗口、管理DOS程序虚拟机(VDM)进程等。

win32k.sys

win32k.sys是内核模块但是不用于处理I/O请求,主要是为应用层提供服务。实现窗口管理(收集、分发消息,控制窗口显示)和图形设备接口(各种图形绘制、文本输出)。

win32k.sys主要是user32.dll和gdi32.dll的内核实现。
ntoskrnl.exe主要是kernel32.dll的内核实现。
user32.dll、gdi32.dll和kernel32.dll中的API通过ntdll.dll实现过渡,最终调用的都是win32k.sys(Shadow SSDT)和ntoskrnl.exe(SSDT)中的系统服务。

SSDT(System Service Descriptor Table,系统服务描述表),由ntoskrnl.exe导出(x64下不导出),在内核中的名称是KeServiceDescriptorTable。在代码中声明一下即可使用。

extern PSYSTEM_SERVICE_DESCRIPTOR_TABLE	KeServiceDescriptorTable;
typedef struct _SYSTEM_SERVICE_DESCRIPTOR_TABLE
{
	PVOID		ServiceTableBase;			//SSDT表的基地址
	PVOID		ServiceCounterTableBase;
	ULONG_PTR	NumberOfServices;			//SSDT表中服务函数的个数
	PVOID		ParameterTableBase;
}SYSTEM_SERVICE_DESCRIPTOR_TABLE, *PSYSTEM_SERVICE_DESCRIPTOR_TABLE;

Shadow SSDT,在内核中的名称是KeServiceDescriptorTableShadow,不过它是未导出的,不能在自己的模块中导入和引用。

kernel32.dll

kernel32.dll包含如下的API:

  • 进程/线程管理
  • 文件操作(创建、打开、读写、搜索等)
  • 内存管理(Local开头、Global开头、Heap开头)
  • 调试(Debug开头)等

user32.dll

user32.dll是用户界面相关的,包含窗口管理、消息处理、用户输入的API,如EndDialog()、BeginPaint()、SetWindowPos()、MessageBox()、EnumWindows()等。

gdi32.dll

gdi32.dll是GDI图形用户界面相关的,包含各种图形文字绘制的API,如BltBlt()、CreateDC()、CreateCompatibleDC()、SetBitmapBits()、SetTextColor()、TextOut()等。

advapi32.dll

advapi32.dll包含如下的API:

  • 数据加密(Crypt开头)
  • 用户和账号管理(Lsa开头)
  • 注册表操作(Reg开头)
  • WMI(Wmi开头)
  • 终端服务(Wts开头)等

其他用户进程

  1. WinLogon.exe,登录进程,负责用户登录和安全有关的事务。它启动后,会创建 lsass.exe 和Services.exe。Windows XP的文件保护功能(Windows File Protection,简称WFP)也是在这个进程中实现的。
  2. lsass.exe,Local Security Authority Subsystem Service,本地安全和认证进程,负责用户身份验证。
  3. services.exe,服务管理进程,负责启动和管理系统服务程序。系统服务程序是按照NT系统服务规范编写的exe程序,通常没有用户界面,只在后台运行。例如:SvcHost.exe是一个通用的服务宿主程序。
  4. Shell,默认是explorer.exe,负责显示开始菜单、任务栏和桌面图标等。

其他环境子系统

Windows操作系统的环境子系统有三个:

  1. POSIX子系统,Portable Operating System Interface based on UniX,用于运行符合POSIX标准的程序。其核心文件是psxss.exe和psxdll.dll。
  2. OS/2子系统,支持16位的OS/2程序,其核心文件是os2.exe、os2srv.exe和os2ss.exe。
  3. Win32子系统(上面介绍的)

猜你喜欢

转载自blog.csdn.net/qq_42814021/article/details/120452462
今日推荐