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可以方便地操作它的线程和进程。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jyl_sh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值