【windows】会话(Session)、窗口站(WindowsStation)、桌面、窗口

Windows Session

  • 会话
    • 会话的组成
    • 会话管理器
    • Windows会话过程
      • 终端服务会话(Terminal Services Session)创建过程
      • 身份认证过程
    • 其他
  • 窗口站 windows station

     一个系统可以同时登录多个用户(包括远程用户登录)
    一个用户拥有一个会话(远程用户被称为远程会话)
    一个会话拥有多个工作站和窗口。只能拥有一个交互式工作站(Winsta0)。
    一个会话拥有一系列私有的进程和模块:Csrss.exe、WinLogin.exe、win32k.sys
    一个会话拥有一个私有对象名字空间(\BaseNamedObjects),私有对象名字空间中的内核对象不能被其他会话访问。
    一个交互式工作站最少拥有三个桌面:默认桌面、登陆桌面、屏保桌面
    一个非交互式工作站最少拥有一个桌面
    一个桌面拥有0-N个窗口(非交互式工作站中的桌面可以没有窗口)
    一个与用户交互的桌面拥有一个Explorer.exe进程
    窗口必须与一个桌面绑定
    窗口之间不能跨桌面访问

用户登录到Windows系统之后,不管该用户是本地登陆还是远程登录,系统都会为这个用户分配一个新的会话ID(SID)。也就是说会话与用户的登录是相关联的。

会话

会话(session)是由进程和其他的系统对象(比如窗口站、桌面和窗口)构成的,他们代表了一个用户的工作站登录会话。

Windows系统是支持多会话的,因此会话空间(session space)包含了依稀而针对每个会话的全局信息。==》会话空间是用来管理会话的。

会话的组成

  1. 每个会话包含一个单独的win32k.sys
  2. 专门的换页池区域
  3. 私有wijndows子系统和登录进程的拷贝
  4. 系统空间中被映射的空间,被称为会话空间的区域

会话管理器

会话管理器(smss.exe)是系统中第一个创建的用户态模式进程,负责完成执行体和内核的初始化工作的内核模式系统现在最后阶段创建了实际的smss进程。

Windows会话过程

  1. 内核模式的系统线程初始化Windows执行体和内核,最后阶段创建实际的Smss进程。
  2. 在启动Windows的过程中,会话管理器负责许多重要的步骤,比如打开额外的页面文件、执行延迟的文件改名和删除操作(重启后删除或重启后重命名)、创建系统环境变量;它也将子系统进程(csrss.exe)he winlogon.exe进程启动起来,winlogon进程一次会创建其他的系统进程。
    smss的初始化相关步骤在注册表中配置,对应注册表中的路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager。如下图:
    【windows】会话(Session)、窗口站(WindowsStation)、桌面、窗口_第1张图片
    其中,PendingFileRenameOperations记录了"重启后重命名"的文件路径
  3. Smss的主线程负责监视Csrss和winlogon,一旦Csrss或Winlogon非正常终止,Smss会让系统崩溃。(崩溃代码是STATUS_SYSTEM_PROCESS_TERMINATED或0xC000021A)
  4. Smss等待加载子系统的请求、调试事件,以及创建新的终端服务器会话
  5. 【身份认证阶段】
  6. 认证完成后,lsass调用安全引用监视器中的函数NtCreateToken生成一个访问令牌对象,其包含了当前用户的安全轮廓。
  7. winlogon利用此访问令牌来创建用户会话中的初始进程。(此初始进程保存在注册表【HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon】下Userinit中)
  8. Userinit执行该用户环境中的一些初始化工作(比如运行登录脚本、应用组策略),然后再注册表中查找Shell值,并创建进程来运行外壳程序Explorer.exe
  9. 至此会话创建完成。

终端服务会话(Terminal Services Session)创建过程

终端服务会话(Terminal Services Session)的创建是由Smss来完成的。当Smss接到一个创建会话的请求时,它会做以下处理:

  1. 调用NySetSystemInformation,建立内核模式的会话数据结构
  2. 调用内存管理器函数MMSessionCreate,建立会话虚拟地址空间(包括会话中的换页内存池、Win32子系统的内核模式部分Win32k.sys等),然后Smss为该会话创建Winlogon和Csrss实例。

身份认证过程

  • Winlogon登录进程处理交互式用户的登录和注销。
  • winlogon在用户登录、注销、截取键盘SAS时是活动的,它是负责处理这些交互工作的进程。
  • 登录过程的身份识别和认证是在GINA.dll中实现的。开发人员可以提供自己的GINA.dll实现其他的身份识别和认证机制。
  • 用户名和密码捕捉到后,被送到本地安全认证服务器进程lsass.exe进行认证。lsass.exe检查口令是否符合存储在活动目录或者SAM中的口令信息。

参考链接:
https://blog.csdn.net/sunleishandong/article/details/28618203
https://blog.csdn.net/chenyujing1234/article/details/8027934
https://www.cnblogs.com/russinovich/archive/2011/04/26/2029655.html

其他

1、Session 0隔离:

http://technet.microsoft.com/zh-cn/ee791007.aspx

2、穿透Session 0 隔离

http://www.cnblogs.com/gnielee/archive/2010/04/07/session0-isolation-part1.html

3、Application Compatibility: Session 0 Isolation

http://msdn.microsoft.com/en-us/library/bb756986.aspx

窗口站 windows station

一个窗口站包含一个剪切板、一个原子表、和一个或多个桌面对象
窗口站创建时和进程相关联,并且被放到当前的会话
只有WinSta0可以有交互界面,和接收用户输入,其他窗口站是不可以有用户交互的
远程登录的用户会新建一个会话,每个会话和自己的窗口站关联(窗口站名为WinSta0)
系统会创建默认的窗口站和桌面,并且和当前的用户关联WinSta0\Default
CreateWindowStation 创建窗口站
如果服务进程所在的会话没有窗口站系统会创建一个窗口站(如果是LocalSystem账户,并且没有SERVICE_INTERACTIVE_PROCESS属性,则名称为Service-0x0-3e7 , 不 能 交 互 。 如 果 是 用 户 账 户 那 么 名 称 为 S e r v i c e − 0 x Z 1 − Z 2 ,不能交互。如果是用户账户那么名称为Service-0xZ1-Z2 Service0xZ1Z2,Z1是SID的高部分,Z2是SID的低部分。上面两种情况都是不可交互的)和桌面(Default)
程序调用User32或者GDI函数时自动连接,如果调用了SetProcessWindowStation或者从父进程继承了指定的窗口站,那么就会连接到指定的窗口站。或者连接创建进程指定的STARTINFO里面的lpDesktop。如果都没有的话,则会连接到交互进程的窗口站。如果从父进程继承了多个,那么连接行为是不确定的。
连接过程中不能调用CloseWindowStation来关闭
调用GetSecurityInfo和SetSecurityInfo来设置安全描述符

https://blog.csdn.net/zxy355/article/details/50790158

你可能感兴趣的:(windows)