53(75)--windows internals 6 mark david alex

windows子系统
虽然windows支持多个环境子系统,但是从实用的角度来看,每个子系统都支持窗口和io将会导致系统功能的大量重复,从而对系统的大小和性能都产生有害影响。由于windows是主要子系统,windows的设计者决定把主要功能都实现在windows子系统里,供其他子系统调用来显示界面。所以SUA子系统调用windows子系统来显示。
由于这个设计决策,windows子系统在任何windows系统上都是必须的,包括不需要用户登录的服务器系统。所以,csrss.exe被标志为关键进程(关键进程一旦退出,系统就会崩溃)。
windows子系统有以下的主要组件
对于每个会话,csrss.exe加载三个dll(Basesrv.dll, Winsrv.dll, and Csrsrv.dll)支持以下功能
进程、线程的创建和删除
支持16位Dos虚拟机
Side-by-Side (SxS)/Fusion和manifest支持
杂项功能如GetTempFile, DefineDosDevice, ExitWindowsEx及其他自然语言支持函数。
内核模式驱动程序(Win32k.sys)包含以下功能
窗口管理器 控制窗口显示 管理屏幕输出 收集键盘输入 ,鼠标 和其他设备 传递用户消息
图形设备接口(GDI),图形输出设备函数库。用于绘制直线,文本,图标,操纵图形。
directx的封装Dxgkrnl.sys
控制台宿主进程(conhost.exe),对控制台提供支持
子系统DLL(Kernel32.dll, Advapi32.dll, User32.dll, and Gdi32.dll)将文档化的api调用翻译成对Ntoskrnl.exe和Win32k.sys中的未文档化函数的调用
图形设备驱动程序,包括硬件相关的显示器驱动程序,打印机驱动程序 视频miniport驱动程序
注意:MinWin,是对windows进行重构的一项工程。子系统dll现在通常由实现api集合的库组成,然后链接为dll,通过重定向机制找到。第五章有详细介绍。
应用程序调用USER函数来创建控件,比如说窗口,按钮。windows窗口管理器将这些请求和GDI通信,GDI发送给图形设备驱动,在此会被格式化以适合显示设备。显示驱动和视频小端口驱动一起来完成视频显示的支持。
GDI提供了一组二维函数的集合,允许应用程序和图形设备通信,而不需要知道设备的任何情况。GDI位于应用程序和图形设备之间。它把应用程序的输出请求翻译并发送给图形驱动程序。它在不同的图形设备上提供标准的接口,这个接口允许应用程序独立于设备和硬件。GDI会根据设备能力来裁剪消息,把请求分割成能管理的小块。有些设备可以理解绘制椭圆的命令,一些需要GDI把这个命令分解成一系列点。关于图形和视频驱动架构,参加WDK中的Design Guide下的Display (Adapters and Monitors)
因为大部分子系统运行在内核模式,只有一小部分windows函数会向windows子系统进程发送消息。如进程线程的创建和销毁,网络驱动符映射,临时文件创建。一般来说,windows应用程序不会导致很多切换到windows子系统进程的需求。
控制台窗口宿主
在最初的windows子系统设计,子系统进程(csrss.exe)负责管理控制台,控制台程序和csrss通信。windows现在使用一个单独的进程,控制台窗口宿主(conhost.exe)。多个控制台程序可以共享一个控制台窗口,如在控制台中启动控制台。默认情况下,第二个控制台窗口共享第一个的窗口)。
当控制台程序向csrss注册时,csrss利用系统的安全令牌,而不是csrss的,创建一个conhost的新实例。然后映射一个共享的内存区段,允许所有的conhosts共享一部分内存给csrss,以提高缓冲区处理速度。然后,创建一个命名的异步本地过程调用(ALPC)在\RPC对象目录。(第三章会详细讲述ALPC)端口名字是 控制台-进程id-lpc-句柄。然后注册pid到当前用户程序相关的内核进程结构,可以查询这个信息来打开新的ALPC端口。这个进程也在命令行程序和conhost之间创建一个共享内存,以方便他们共享数据。最后,在session0的BaseNamedObjects下创建事件,以方便他们互相通知缓冲区数据。下图展示了一个conhost进程,打开了ALPC端口和事件。
conhost以用户的安全上下文运行,用户接口特权隔离(UIPI,第6章会描述)安全机制也为控制台进程提供了相应的保护。另外,cpu密集的控制台窗口可以通过支持的控制台进程加以区分。副作用是,conhost运行在csrss子系统外,控制台窗口可以有主题,加载第三方dll,和各种窗口特性。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值