统计

  • 随笔 - 50
  • 文章 - 42
  • 评论 - 147
  • 引用 - 0

留言簿(6)

随笔分类

文章分类

Link

搜索

  •  

积分与排名

  • 积分 - 162617
  • 排名 - 161

最新评论

阅读排行榜

评论排行榜

windows session机制深入解析(上)

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

转载请注明出处http://www.cppblog.com/dawnbreak/

Sessions, Desktops and Windows Stations

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

未完,待续。。。。。

posted on 2009-07-16 23:26 pear_li 阅读(6413) 评论(1)  编辑 收藏 引用 所属分类: windows kernelTranslate

评论

# re: windows session机制深入解析(上) 2010-06-03 21:01 好看网

不错 相当的不错
  回复  更多评论    

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理