Windows Session(会话)的概念

  会话 session 是由代表单个用户登录会话的所有进程和系统对象组成的。其中的对象包括所有的窗口,桌面和windows stations。桌面是特定session页的内存池并且被加载到内核存储区。这个区域正是session私有的GUI对象的存储区域。windows station基本上可以被描述为包含桌面和进程的安全边界。因此,一个session可以包含多个windows station,而每个windows station又可拥有多个桌面。

  只有被称为 winsta0(交互工作站) 的 windows station 才被允许与用户交互。在winsta0下共被载入三个桌面:winlogon(登陆界面),缺省桌面(用户桌面),和Disconnect( ? )。它们三个都有各自的显存,这就是为什么当你锁定工作站时你的主桌面会消失。当你锁定工作站时,屏幕由用户桌面切换到登录界面,并且两者之间并没有交 互。在windows vista(微软最新发布的操作系统)这一点更是体现的淋漓尽致。例如当你看到UAC弹出时,系统会将用户桌面的快照降低灰度,而在前端显示UAC窗口,UAC窗口是安全桌面 (vista系统的新特性类似登录桌面)并且在你给予权限之前禁止你与用户桌面的交互。

Windows Session(会话)的组成

内存页是被所有用户所共享的,但是每个用户会将其各自的session空间映射到虚拟内存。session空间被划分到四个不同的区域:
session结构存储区 - 内存控制器结构,其中包含session工作集
session映像存储区 - 保留一块私有的win32k.sys修改过的数据,一个sin32k,sys代码副本和原始数据副本,还有各种驱动
session视图存储区 - 包括桌面堆在内的session映射视图
session分页存储区 - 用于这个session被分页了的内存池

Session 0 与 Session 1

(1)在Windows XP、Windows Server 2003,以及更老版本的Windows操作系统中,服务和应用程序使用相同的会话(Session)运行,而这个会话是由第一个登录到控制台的用户启动的。该会话就叫做Session 0,如下图所示,在Windows Vista之前,Session 0不仅包含服务,也包含标准用户应用程序。

Session 0 in Windows XP / Windows Server 2003:

        

(2)将服务和用户应用程序一起在Session 0中运行会导致安全风险,因为服务会使用提升后的权限运行,而用户应用程序使用用户特权(大部分都是非管理员用户)运行,这会使得恶意软件以某个服务为攻击目标,通过“劫持”该服务,达到提升自己权限级别的目的。

在Windows Vista(微软最新发布的操作系统)上,也就是Win7之后,只有服务可以托管到Session 0中。用户应用程序和服务之间会被隔离,用户应用程序需要运行在用户登录到系统时创建的后续会话中。例如第一个登录的用户创建 Session 1,第二个登录的用户创建Session 2,以此类推,如下图所示。

Session 0 / Session 1 in Windows Vista:

  

  Win7之后,windows又引入了session隔离用来保证各个用户之间的安全。特别是session0,是为第一个用户创建的,也就是系统服务,自己创建的服务程序也在这个 system 用户下,session 默认也在0。不过 session0 创建的子进程可以是其他 session 的,这个就是通过SetTokenInformation修改token中的sessionid来做到。也就是说我们可以创建一个 system 权限,又工作在 session1 下面的进程。

  当用户登陆到系统中之后,用户下所有的进程都属于这个会话空间。在每个进程的PEB当中就有SessionID,该结构最后一个成员就是SessionID。

typedef struct _PEB
{
BYTE Reserved1[2];
BYTE BeingDebugged;
BYTE Reserved2[1];
PVOID Reserved3[2];
PPEB_LDR_DATA Ldr;
PRTL_USER_PROCESS_PARAMETERS ProcessParameters;
BYTE Reserved4[104];
PVOID Reserved5[52];
PPS_POST_PROCESS_INIT_ROUTINE PostProcessInitRoutine;
BYTE Reserved6[128];
PVOID Reserved7[1];
ULONG SessionId;
} PEB, *PPEB;

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

参考链接:https://blog.csdn.net/linfengmove/article/details/90640131/
http://www.cppblog.com/dawnbreak/
https://blog.csdn.net/zacklin/article/details/7579217

英文原文移步这里查看: http://www.cppblog.com/dawnbreak/articles/90278.html/

SESSION会话机制解析的更多相关文章

  1. session 会话机制以及变量覆盖

    session会话机制介绍如下 http是无状态协议.服务器靠cookie和session来记住用户.$_SESSION 和 $_GET等一样,是超全局变量. 后台脚本里面会写: session() ...

  2. note.js之 Mongodb在Nodejs上的配置及session会话机制的实现

    上篇我们使用nodejs实现了一个express4的网站构建配置,但一个有面的网站怎么可以缺少一个数据库呢.现在较为流行的就是使用MONGODB来作为nodejs网站引用的数据库,可能它与nodejs ...

  3. java 浅谈web系统当中的cookie和session会话机制

    一 Cookie: 1. Cookie翻译为小甜饼,有一种特殊的味道.cookie主要用来在(浏览器)客户端做记号用的.Cookie不属于java,Cookie是一种通用的机制,属于HTTP协议的一部 ...

  4. 63.note.js之 Mongodb在Nodejs上的配置及session会话机制的实现

    转自:https://www.cnblogs.com/alvin_xp/p/4751784.html 1.第一步安装mongodb数据库,这直接官网下载,这里不介绍. 2.也可以使用npm实现直接下载 ...

  5. B/S结构系统的会话机制(session)

    B/S结构系统的会话机制(session) 目录 B/S结构系统的会话机制(session) 每博一文案 1. session 会话机制的概述 2. 什么是 session 的会话 3. sessio ...

  6. java web Session会话技术(原理图解+功能+与Cookie的区别+基本使用)

    java web Session会话技术(原理图解+功能+与Cookie的区别+基本使用) 这是我关于会话技术的第二篇文章,对 Cookie有不了解的兄弟可以点击下方的Cookie跳转 Cookie链 ...

  7. Cookie&Seesion会话 共享数据 工作流程 持久化 Servlet三个作用域 会话机制

    Day37 Cookie&Seesion会话 1.1.1 什么是cookie 当用户通过浏览器访问Web服务器时,服务器会给客户端发送一些信息,这些信息都保存在Cookie中.这样,当该浏览器 ...

  8. 使用HTML5 WebStorage API构建与.NET对应的会话机制

    HTML5的Web Storage API,我们也称为DOMStarage API,用于在Web请求之间持久化数据.在Web Starage API 出现之前,我们都是将客户端和服务端之间的交互数据存 ...

  9. 【转】php中的会话机制(2)

    原文:https://segmentfault.com/a/1190000000468220 发现,在调用session_start()的时候, session_start() 里面应该是有调用类似 ...

  10. 【Consul】Consul架构-Session会话

    Consul提供session会话机制--可以用于构建分布式锁,session可以绑定到节点.健康检查.KV数据.目的是提供颗粒锁--受 The Chubby LockService for Loos ...

随机推荐

  1. RocketMQ(2)---核心概念、特性、使用等

    对于RocketMQ而言,感觉官方提供的东西还是可以的:https://github.com/apache/rocketmq/tree/master/docs/cn

  2. 【驱动】SPI驱动分析(五)-模拟SPI驱动

    简介 模拟SPI驱动是一种软件实现的SPI总线驱动.在没有硬件SPI控制器的系统中,通过软件模拟实现SPI总线的功能.它允许在不修改硬件的情况下,通过GPIO(通用输入/输出)引脚模拟SPI总线的通信 ...

  3. WebGPU光追引擎基础课系列目录

    大家好~我开设了"WebGPU光追引擎基础课"的线上课程,从0开始,在课上带领大家现场写代码,使用WebGPU开发基础的光线追踪引擎 课程重点在于基于GPU并行计算,实现BVH构建 ...

  4. 移动端h5中rem适配

    1 (function (win, lib) { 2 var doc = win.document; 3 var docEl = doc.documentElement; 4 var metaEl = ...

  5. Bash 常用命令总结

    基础常用命令 某个命令 --h,对这个命令进行解释 某个命令 --help,解释这个命令(更详细) man某个命令,文档式解释这个命令(更更详细)(执行该命令后,还可以按/+关键字进行查询结果的搜索) ...

  6. 带你熟悉NLP预训练模型:BERT

    本文分享自华为云社区<[昇思技术公开课笔记-大模型]Bert理论知识>,作者: JeffDing. NLP中的预训练模型 语言模型演变经历的几个阶段 word2vec/Glove将离散的文 ...

  7. [转帖]Oracle nvarchar2存储特殊字符乱码问题

    https://www.cnblogs.com/PiscesCanon/p/15157506.html 这个问题研究了一天多,终于搞定了. 起因是业务需要存特殊字符'ø'到varchar2的字段中出现 ...

  8. [转帖]内存管理参数zone_reclaim_mode分析

    zone_reclaim_mode 官方解释 调整方法 调整的影响 官方解释 最近在性能优化,看到了zone_reclaim_mode参数,记录备用 zone_reclaim_mode: Zone_r ...

  9. [转帖]TiDB Lightning 监控告警

    https://docs.pingcap.com/zh/tidb/v6.5/monitor-tidb-lightning tidb-lightning 支持使用 Prometheus 采集监控指标 ( ...

  10. [转帖]clickhouse存储机制以及底层数据目录分布

    https://www.cnblogs.com/MrYang-11-GetKnow/p/15818141.html#:~:text=%E6%AF%8F%E4%B8%80%E4%B8%AA%E6%95% ...