windows内核开发学习笔记三十二:windows子系统
作者:互联网
windows支持三个环境子系统:OS/2、POSIX和windows(win32)。win32子系统是必须运行的,没有它windows无法运行,其他两个系统则被配置成按需启动。到了XP版本以后,只有win32子系统随系统发布。
在windows平台上,可执行文件(exe、dll、sys等)的格式为PE格式文件,其头部域subsystem指定了该程序运行在哪个子环境系统中,在微软开发工具的链接器(Linker )支持/SUBSYTEM命令选项来指定子系统类型。其中:为2时,说明是一个GUI应用程序;为3时是CUI控制台程序。
windows子系统中既有用户模式部分,也有内核模式部分。
- 内核模式部分:内核的核心是win32K.sys, 虽然形式上是驱动程序的格式,但实际上它并不处理I/O请求,而是向用户代码提供了大量的系统服务。功能构成上它是由窗口管理和图形设备接口(GDI)两部分构成,其中窗口管理部分负责收集和分发消息,以及控制窗口显示和管理屏幕输出;图形设备接口部分包含各种形状绘制以及文本输出功能。
- 用户模式部分:包括windows子系统进程(csrss.exe) 以及一组动态链接库(DLL)。csrss.exe进程主要负责控制台窗口的功能,以及创建或删除进程和线程等。子系统DLL则被直接链接到应用程序进程中,包括kernel.dll、user32.dll、gdi32.dll和advapi.dll等,负责实现以文档化的windows API函数。除了有些可以直接在用户模式中完成以外,很多API函数需要调用执行体API或win32k.sys模块提供的系统服务。
win32k.sys一方面向用户代码提供服务,另一方面也跟windows内核紧密地融合在一起。它通过向内核注册一组出调(callout)函数,以便介入内核的线程和进程管理等处理逻辑中,同时也可以接收电源事件。对于每个线程,一旦它调用了win32k.sys的任何一个系统服务,就变成了一个GUI线程,从而纳入到了windows子系统的线程和进程管理范畴。windows内核的线程和进程数据结构为Windows子系统预留了一些域,从而win32k.sys可以方便地操作它的线程和进程。
标签:三十二,windows,dll,sys,线程,内核,子系统 来源: https://blog.csdn.net/jyl_sh/article/details/118256216