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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: [笔记]深入解析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)。

相关文章
|
28天前
|
运维 持续交付 云计算
深入解析云计算中的微服务架构:原理、优势与实践
深入解析云计算中的微服务架构:原理、优势与实践
63 1
|
20天前
|
运维 监控 持续交付
微服务架构解析:跨越传统架构的技术革命
微服务架构(Microservices Architecture)是一种软件架构风格,它将一个大型的单体应用拆分为多个小而独立的服务,每个服务都可以独立开发、部署和扩展。
150 36
微服务架构解析:跨越传统架构的技术革命
|
25天前
|
存储 Linux API
深入探索Android系统架构:从内核到应用层的全面解析
本文旨在为读者提供一份详尽的Android系统架构分析,从底层的Linux内核到顶层的应用程序框架。我们将探讨Android系统的模块化设计、各层之间的交互机制以及它们如何共同协作以支持丰富多样的应用生态。通过本篇文章,开发者和爱好者可以更深入理解Android平台的工作原理,从而优化开发流程和提升应用性能。
|
27天前
|
弹性计算 持续交付 API
构建高效后端服务:微服务架构的深度解析与实践
在当今快速发展的软件行业中,构建高效、可扩展且易于维护的后端服务是每个技术团队的追求。本文将深入探讨微服务架构的核心概念、设计原则及其在实际项目中的应用,通过具体案例分析,展示如何利用微服务架构解决传统单体应用面临的挑战,提升系统的灵活性和响应速度。我们将从微服务的拆分策略、通信机制、服务发现、配置管理、以及持续集成/持续部署(CI/CD)等方面进行全面剖析,旨在为读者提供一套实用的微服务实施指南。
|
21天前
|
安全 前端开发 Android开发
探索移动应用与系统:从开发到操作系统的深度解析
在数字化时代的浪潮中,移动应用和操作系统成为了我们日常生活的重要组成部分。本文将深入探讨移动应用的开发流程、关键技术和最佳实践,同时分析移动操作系统的核心功能、架构和安全性。通过实际案例和代码示例,我们将揭示如何构建高效、安全且用户友好的移动应用,并理解不同操作系统之间的差异及其对应用开发的影响。无论你是开发者还是对移动技术感兴趣的读者,这篇文章都将为你提供宝贵的见解和知识。
|
28天前
|
SQL 数据可视化 数据库
多维度解析低代码:从技术架构到插件生态
本文深入解析低代码平台,涵盖技术架构、插件生态及应用价值。通过图形化界面和模块化设计,低代码平台降低开发门槛,提升效率,支持企业快速响应市场变化。重点分析开源低代码平台的优势,如透明架构、兼容性与扩展性、可定制化开发等,探讨其在数据处理、功能模块、插件生态等方面的技术特点,以及未来发展趋势。
|
27天前
|
SQL 数据可视化 数据库
多维度解析低代码:从技术架构到插件生态
本文深入解析低代码平台,从技术架构到插件生态,探讨其在企业数字化转型中的作用。低代码平台通过图形化界面和模块化设计降低开发门槛,加速应用开发与部署,提高市场响应速度。文章重点分析开源低代码平台的优势,如透明架构、兼容性与扩展性、可定制化开发等,并详细介绍了核心技术架构、数据处理与功能模块、插件生态及数据可视化等方面,展示了低代码平台如何支持企业在数字化转型中实现更高灵活性和创新。
51 1
|
27天前
|
SQL 数据可视化 数据库
多维度解析低代码:从技术架构到插件生态
本文深入解析低代码平台,涵盖技术架构、插件生态及应用价值。重点介绍开源低代码平台的优势,如透明架构、兼容性与扩展性、可定制化开发,以及其在数据处理、功能模块、插件生态等方面的技术特点。文章还探讨了低代码平台的安全性、权限管理及未来技术趋势,强调其在企业数字化转型中的重要作用。
38 1
|
28天前
|
缓存 并行计算 Linux
深入解析Linux操作系统的内核优化策略
本文旨在探讨Linux操作系统内核的优化策略,包括内核参数调整、内存管理、CPU调度以及文件系统性能提升等方面。通过对这些关键领域的分析,我们可以理解如何有效地提高Linux系统的性能和稳定性,从而为用户提供更加流畅和高效的计算体验。
30 2
|
28天前
|
存储 边缘计算 安全
深入解析边缘计算:架构、优势与挑战
深入解析边缘计算:架构、优势与挑战
47 0

热门文章

最新文章

推荐镜像

更多