[笔记]深入解析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)。

相关文章
|
7月前
|
运维 负载均衡 微服务
|
7月前
|
数据采集 机器学习/深度学习 人工智能
YOLOv11浅浅解析:架构创新
YOLOv11是YOLO系列最新升级版,通过C3k2模块、SPPF优化和解耦检测头等创新,显著提升检测精度与速度,mAP提高2-5%,推理更快,支持多平台部署,适用于工业、安防、自动驾驶等场景。
|
7月前
|
机器学习/深度学习 人工智能 搜索推荐
从零构建短视频推荐系统:双塔算法架构解析与代码实现
短视频推荐看似“读心”,实则依赖双塔推荐系统:用户塔与物品塔分别将行为与内容编码为向量,通过相似度匹配实现精准推送。本文解析其架构原理、技术实现与工程挑战,揭秘抖音等平台如何用AI抓住你的注意力。
1933 7
从零构建短视频推荐系统:双塔算法架构解析与代码实现
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
34_GPT系列:从1到5的架构升级_深度解析
大型语言模型(LLM)的发展历程中,OpenAI的GPT系列无疑扮演着至关重要的角色。自2018年GPT-1问世以来,每一代GPT模型都在架构设计、预训练策略和性能表现上实现了质的飞跃。本专题将深入剖析GPT系列从1.17亿参数到能够处理百万级token上下文的技术演进,特别关注2025年8月8日发布的GPT-5如何引领大模型技术迈向通用人工智能(AGI)的重要一步。
758 2
|
6月前
|
存储 监控 安全
132_API部署:FastAPI与现代安全架构深度解析与LLM服务化最佳实践
在大语言模型(LLM)部署的最后一公里,API接口的设计与安全性直接决定了模型服务的可用性、稳定性与用户信任度。随着2025年LLM应用的爆炸式增长,如何构建高性能、高安全性的REST API成为开发者面临的核心挑战。FastAPI作为Python生态中最受青睐的Web框架之一,凭借其卓越的性能、强大的类型安全支持和完善的文档生成能力,已成为LLM服务化部署的首选方案。
1182 3
|
7月前
|
存储 监控 NoSQL
Redis高可用架构全解析:从主从复制到集群方案
Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。
|
7月前
|
Java 数据库 数据安全/隐私保护
Spring Boot四层架构深度解析
本文详解Spring Boot四层架构(Controller-Service-DAO-Database)的核心思想与实战应用,涵盖职责划分、代码结构、依赖注入、事务管理及常见问题解决方案,助力构建高内聚、低耦合的企业级应用。
1505 1
|
边缘计算 Kubernetes 物联网
Kubernetes 赋能边缘计算:架构解析、挑战突破与实践方案
在物联网和工业互联网快速发展的背景下,边缘计算凭借就近处理数据的优势,成为解决云计算延迟高、带宽成本高的关键技术。而 Kubernetes 凭借统一管理、容器化适配和强大生态扩展性,正逐步成为边缘计算的核心编排平台。本文系统解析 Kubernetes 适配边缘环境的架构分层、核心挑战与新兴解决方案,为企业落地边缘项目提供实践参考。
674 0

推荐镜像

更多