[笔记]深入解析Windows操作系统《二》系统架构(五)

简介: [笔记]深入解析Windows操作系统《二》系统架构(五)

服务控制管理器(SCM)

回顾本章前面提到过的,Windows中的“服务( service)”既可以指服务器进程,也可以指设备驱动程序

这一节讲的服务是指用户模式的进程。服务就像UNIX中的“守护进程(daemon process)”或者VMS中的“分派进程(detached process)”,这些进程可以被配置成能在系统引导时自动启动起来,而不要求有交互式的登录过程,也可以被手工启动(比如,通过运行“服务(Services)”管理工具,或者调用Windows的StartService函数)。 在通常情况下,这些服务并不与登录用户进行交互,尽管在特殊条件下这也是有可能的(参见第4章)。

服务控制管理器是一个特殊的系统进程,它运行的映像文件是%SystemRoot%System32Services.exe,它负责启动停止服务进程,也负责与这些服务进程进行交互

**所谓服务程序,实际上只是调用了一些特殊Windows函数的Windows映像文件。它们通过这些特殊的Windows函数,与服务控制管理器进行交互,以便执行诸如此类的动作:注册一个服务的成功启动、响应状态请求,以及暂停或停止一个服务。**Windows服务定义在注册表的HKLM\SYSTEM\Current\Control\SetlServices\下。

记住,服务有三种名称:

  • 在系统中看到的正在运行的进程名称、
  • 注册表中的内部名称,
  • 以及在“服务”管理工具中给出的显示名称(并不是所有的服务都有显示名称—一如果一个服务没有显示名称,则显示内部名称)。

在Windows中,服务还可以有一个描述域( description field),以进一步详细说明该服务所做的事情。

要想从一个服务进程映射到该进程所包含的服务,可以使用tlist lstasklist /svc命令。

然而,请注意,服务进程和所运行的服务之间并不总是一一对应的,因为有的服务与其他的服务共享一个进程。在注册表中,一个服务的类型代码指明了该服务是运行它自己的进程,还是与同一映像中的其他服务共享一个进程。

有许多Windows组件是以服务的方式来实现的,比如Print Spooler(假脱机打印)、事件日志、任务计划,以及各种网络组件。有关服务的更多细节,参见第4章。

实验:列出当前安装的服务

为了列出当前系统中所安装的服务,请从控制面板中选择“管理工具(AdministrativeTools)”,然后选择“服务(Services)”。你应该会看到如下所示输出:

要想看到有关一个服务的详细属性,请在这个服务上右键单击,然后选择“属性(Properties)”。例如,下面是Print Spooler服务(在上图中被加亮显示)的属性:

注意,“可执行文件的路径(Path to executable)”域指明了包含这一服务的程序。记住,有的服务与其他的服务共享同一个进程一一从服务到进程的映射关系并不总是一一对应的。

实验:检查服务进程内部的有关服务的细节

Process Explorer可以加亮显示那些包含.一个或在一个包含有服务的进程上双击,你单中选择“Configure Colors”就可以配置成这样)。如架仕一个媒于展个昭务,显示了该服将会看到有一个Services选项卡,具中列出 孩进E以风术该服冬的文本信息(如果有的话),务的注册表键的名称、管理员可见的显示名称,以及描服务的个运行在Svstcm账号下的对于Svchost服务,还会列出实现该服务的DLL路径。例如,一个运行在System账号下的

Svchost.exe进程中所包含的服务如下图所示:

本地会话管理器(Lsm.exe)

本地会话管理器(Lsm.exe)管理本地机器上的终端服务器会话的状态。它通过ALPC端口SmSs WinStationApiPort向Smss发送请求启动新的会话(例如,创建Csrss和Winlogon进程),比如当用户在资源管理器(Explorer)中选择“切换用户(Switch User)”时。Lsm也跟Winlogon和Csrss。

进行通信(通过一个本地系统RPC)。

它通知Csrss诸如建立连接、断开连接、终止等事件,也广播系统消息。

对于以下的事件,它接收Winlogon的通知:

  • 登录(Logon)和注销(Logoff)。
  • Shell/启动和终止。
  • 连接到一个会话。
  • 与一个会话断开连接。
  • 锁住或解锁桌面。

WinLogon、LogonUl和UserInit

Windows登录进程(%SystemRoot%\System32\Winlogon.exe)处理交互式用户的登录和注销。当安全注意序列(SAS,Secure Attention Sequence)组合键被按下时,Winlogon就会接到一个用户登录请求。在Windows上默认的SAS是组合键Ctrl+Alt+Delete。使用SAS是为了保护用户免受那些模拟登录过程的口令窃听程序欺骗,因为用户模式应用程序不可能截取这一键盘序列。

登录过程的身份识别和认证是通过一种称为凭证提供者(credential provider)的DLL来实现的。

标准的Windows凭证提供者实现了默认的Windows认证接口:口令和智能卡。

不过,开发人员可以提供他们自己的凭证提供者来实现其他的身份识别和认证机制—一比如基于声波纹(voice print)的方法,或者像指纹阅读器这样的生物采集设备——以替换Windows标准的用户名/口令方法。因为Winlogon是系统依赖的一个关键系统进程,所以,凭证提供者和显示登录对话框的UI都运行在Winlogon的一个子进程中,称为LogonUI。当Winlogon检测到SAS时,它就启动这一进程,该进程会初始化凭证提供者。一旦用户输入了凭证,或者取消了登录界面,LogonUI进程就终止。

而且,Winlogon可以加载那些需要执行二级认证的附加网络提供者DLL。这种能力使得多个网络提供者可以在正常的登录过程中一次采集到所有的身份识别和认证信息。

一旦获取到用户名和口令,就可以将它们送到本地安全认证服务器进程(%SystemRoot%lSystem32\Lsass.exe,第6章中讲述)进行认证。LSASS调用适当的认证包(实现为DLL的形式)执行实际的验证工作,比如检查该口令是否与存储在活动目录或者SAM(属于注册表的一部分,其中包含了关于本地用户和组的定义)中的口令相符。

在成功地完成了认证以后,LSASS调用安全引用监视器中的一个函数(例如,NtCreateToken),以生成一个访问令牌对象,该访问令牌对象包含了当前用户的安全轮廓(security profile)。如果系统使用了UAC(用户账户控制),并且正在登录的用户是管理员组的成员或者具有管理员特权,那么,LSASS将创建该令牌的另一个受限版本。然后,Winlogon利用此访问令牌来创建该用户会话中的初始进程。这一(或这些)初始进程被存储在注册表键HKLMISOFTWAREMicrosoft\Windows NTICurrentVersion\Winlogon下的注册表值Userinit中(默认是Userinit.exe,不过,在该注册表值中可以列出多个映像名称。)

Userinit执行用户环境的一些初始化工作(比如运行登录脚本、应用组策略),然后在注册表中查找Shell值(在上一段提到的Winlogon键的下面),并且创建一个进程来运行系统定义的外壳(shell)程序(默认是Explorer.exe)。然后,Userinit退出。这正是Explorer.exe在进程树中没有父进程的原因—一它的父进程已经退出,而且如第1章中所解释的那样,tlist将所有父进程已不在运行的进程左对齐。(看待这一现象的另一种方法是: Explorer是Winlogon的孙子进程。)

Winlogon不仅在用户登录和注销的时候是活动的,无论何时,只要它截取到键盘的SAS就是活动的。例如,在你登录进来后,若按下了Ctrl+Alt+Delete组合键,则Windows安全屏幕会出现,提示注销、启动任务管理器、锁定工作站、关闭系统等选项。Winlogon和LogonUI是负责处理这一交互过程的进程。

关于登录过程中各个步骤的完整描述,参见本书下册第13章的“Smss、Csrss和Wininit"一节。有关安全认证的更多细节,参见第6章。关于在跟LSASS交互时可调用函数(以Lsa开头的函数)的详细信息,参见Windows SDK中的文档。

总结

在本章中,我们概括地看了看Windows的总体系统架构。我们检查了Windows的关键组件,看到了它们是如何相互关联起来的。

在下一章,我们将更加详细地看一看这些组件所赖以建立起来的核心系统机制,比如对象管理器(object manager)和同步(synchronization)。

相关文章
|
21天前
|
算法 调度
深度解析操作系统中的进程调度策略
【5月更文挑战第25天】 在现代操作系统中,进程调度策略是核心组件之一,它决定了处理资源的分配和任务执行的优先级。本文将深入探讨几种常见的进程调度算法,包括先来先服务、短作业优先以及多级反馈队列,并分析各自的优势与局限性。通过比较这些算法在不同场景下的性能表现,旨在为系统设计者提供选择最合适调度策略的参考依据。
|
4天前
|
搜索推荐 Android开发 iOS开发
深入解析安卓与iOS操作系统的异同
安卓和iOS是目前两大主流移动操作系统,它们分别代表了开放性和封闭性的设计理念。本文将从系统架构、用户界面、应用生态等方面深入探讨安卓和iOS之间的异同,帮助读者更好地理解这两个操作系统的特点和优势。
18 3
|
9天前
|
调度
操作系统的目标和功能笔记分享
【6月更文挑战第1天】操作系统的目标和功能笔记分享
41 1
|
10天前
|
存储
操作系统:管程与进程通信机制解析
操作系统:管程与进程通信机制解析
11 0
|
17天前
|
存储 缓存 监控
深度解析操作系统中的核心组件:进程管理与内存优化
【5月更文挑战第29天】 在现代计算技术的心脏,操作系统扮演着至关重要的角色。它不仅管理和控制计算机硬件资源,还为应用程序提供了一个运行环境。本文将深入探讨操作系统中的两个核心组件——进程管理和内存管理,并分析它们对系统性能的影响以及如何通过技术手段实现优化。通过对操作系统内部机制的剖析,我们将揭示这些组件是如何相互作用,以及它们如何共同提升系统的响应速度和稳定性。
|
18天前
|
存储 JSON Java
【字节跳动青训营】后端笔记整理-1 | Go语言入门指南:基础语法和常用特性解析(三)
在 Go 语言里,符合语言习惯的做法是使用一个单独的返回值来传递错误信息。
27 0
|
18天前
|
存储 Go C++
【字节跳动青训营】后端笔记整理-1 | Go语言入门指南:基础语法和常用特性解析(二)
Go 语言中的复合数据类型包括数组、切片(slice)、映射(map)和结构体(struct)。
42 0
|
18天前
|
Java 编译器 Go
【字节跳动青训营】后端笔记整理-1 | Go语言入门指南:基础语法和常用特性解析(一)
本文主要梳理自第六届字节跳动青训营(后端组)-Go语言原理与实践第一节(王克纯老师主讲)。
41 1
|
20天前
|
调度
操作系统的目标和功能笔记分享
【5月更文挑战第3天】操作系统的目标和功能笔记分享
23 2
|
20天前
|
编解码 5G Linux
FFmpeg开发笔记(二十一)Windows环境给FFmpeg集成AVS3解码器
AVS3是中国首个8K及5G视频编码标准,相比AVS2和HEVC性能提升约30%。解码器libuavs3d支持8K/60P视频实时解码,兼容多种平台。《FFmpeg开发实战》书中介绍了在Windows环境下如何集成libuavs3d到FFmpeg。集成步骤包括下载源码、使用Visual Studio 2022编译、调整配置、安装库文件和头文件,以及重新配置和编译FFmpeg以启用libuavs3d。
36 0
FFmpeg开发笔记(二十一)Windows环境给FFmpeg集成AVS3解码器

热门文章

最新文章

推荐镜像

更多