Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1570396
  • 博文数量: 596
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 173
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-06 15:50
个人简介

在线笔记

文章分类

全部博文(596)

文章存档

2016年(1)

2015年(104)

2014年(228)

2013年(226)

2012年(26)

2011年(11)

分类: Windows平台

2013-12-26 17:50:42

http://www.cppblog.com/dawnbreak/archive/2009/07/16/90291.aspx

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 station存在但并不与用户交互。例如:加载到‘service-0x0-3e7$’无用户交互windows station中的服务。另外也有些需要与用户交互的服务被加载到winsta0。

内存页是被所有用户所共享的,但是每个用户会将其各自的session空间映射到虚拟内存。session空间被划分到四个不同的区域:

  • session 结构存储区-内存控制器结构,其中包含session工作集
  • session映像存储区-保留一块私有的win32k.sys修改过的数据,一个sin32k,sys代码副本和原始数据副本,还有各种驱动
  • session视图存储区-包括桌面堆在内的session映射视图
  • session分页存储区-用于这个session被分页了的内存池

 正如前文所提到的,一个桌面正是被加载了显示信息的内核对象。其中包括窗口,菜单,还有钩子。session0是一个基础session,服务在 其中运行,并且一般情况下也是控制台session。在windows Vista中session0仅仅用来运行服务,而控制台session一般在session1。下图显示了各自的关系,并且对比了vista和早期操作 的区别。(来自 our earlier post on Session 0 Application Compatibility Issues)

 
Session 0 in Windows XP / Windows Server 2003

 
Session 0 / Session 1 in Windows Vista
阅读(1143) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~