首页 > 代码库 > Windows会话登录流程

Windows会话登录流程

Windows 结构图



Windows系统核心结构和组件


以上截图清晰的表现了Windows的主要结构,使我们对系统的构成有个大概的认识,下面介绍一下Windows会话登录大致流程:

1、内核模式的系统线程初始化Windows执行体和内核,最后阶段Smss(会话管理)进程。

2、Smss负责完成一系列操作,如打开额外页面文件,创建系统环境变量等,并将Csrss.exe(子系统进程)和Winlogon启动,Winlogon进程依次创建其他系统进程。

3、Smss的主线程负责监视Csrss和winlogon,一旦Csrss和Winlogon非正常终止,Smss让系统崩溃。

4、Smss等待加载子系统的请求、调试事件,以及创建新的终端服务器会话。

5、当Smss接到创建会话的请求时,调用NtSetSystemInformation,建立内核模式的会话数据结构;调用内存管理器函数MmSessionCreate,建立会话虚拟地址空间【包含会话中的换页内存池,Win32子系统的内核模式部分Win32k.sys等】,然后Smss为该会话创建Winlogon和Csrss实例。

6、Winlogon登录进程处理交互式用户的登录和注销。当安全注意序列SAS组合键被按下,Winlogon会接到用户登录请求。

  【Winlogon在用户登录、注销、截取键盘SAS时是活动的,它是负责处理这些交互工作的进程】

7、登录过程的身份识别和认证是在GINA.dll中实现的【开发人员可以提供自己的GINA DLL实现其他的身份识别和认证机制】。

8、用户名和密码捕捉到后,被送到本地安全认证服务器进程lsass.exe进行认证。lsass.exe检查口令是否符合存储在活动目录或者SAM中的口令信息。

9、认证完成后,lsass调用安全引用监视器中的函数NtCreateToken生成一个访问令牌对象,其包含了当前用户的安全轮廓。之后,winlogon利用此访问令牌来创建用户会话中的初始进程,此初始进程保存在注册表【HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon】下Userinit中。

10、Userinit执行该用户环境中的一些初始化工作(比如运行登录脚本、应用组策略),然后再注册表中查找Shell值,并创建进程来运行外壳程序Explorer.exe。


至此会话创建完成。


特别标注:

      此文所有内容均来自《深入解析WINDOWS操作系统》(第四版)。