穿透Session 0 隔离(一)

转载 2013年12月03日 17:01:40

原地址: http://www.cnblogs.com/gnielee/archive/2010/04/07/1706229.html

     服务(Service)对于大家来说一定不会陌生,它是Windows 操作系统重要的组成部分。我们可以把服务想像成一种特殊的应用程序,它随系统的“开启~关闭”而“开始~停止”其工作内容,在这期间无需任何用户参与。

     Windows 服务在后台执行着各种各样任务,支持着我们日常的桌面操作。有时候可能需要服务与用户进行信息或界面交互操作,这种方式在XP 时代是没有问题的,但自从Vista 开始你会发现这种方式似乎已不起作用。

Session 0 隔离实验

     下面来做一个名叫AlertService 的服务,它的作用就是向用户发出一个提示对话框,我们看看这个服务在Windows 7 中会发生什么情况。

using System.ServiceProcess;
using System.Windows.Forms;

namespace AlertService
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            MessageBox.Show("A message from AlertService.");
        }

        protected override void OnStop()
        {
        }
    }
}

程序编译后通过Installutil 将其加载到系统服务中:

 

     在服务属性中勾选“Allow service to interact with desktop” ,这样可以使AlertService 与桌面用户进行交互。

在服务管理器中将AlertService 服务“启动”,这时任务栏中会闪动一个图标:

点击该图标会显示下面窗口,提示有个程序(AlertService)正在试图显示信息,是否需要浏览该信息:

flashmeg

     尝试点击“View the message”,便会显示下图界面(其实这个界面我已经不能从当前桌面操作截图了,是通过Virtual PC 截屏的,其原因请继续阅读)。注意观察可以发现下图的桌面背景已经不是Windows 7 默认的桌面背景了,说明AlertService 与桌面系统的Session 并不相同,这就是Session 0 隔离作用的结果。

Session 0 隔离原理

     在Windows XP、Windows Server 2003 或早期Windows 系统时代,当第一个用户登录系统后服务和应用程序是在同一个Session 中运行的。这就是Session 0 如下图所示:

     但是这种运行方式提高了系统安全风险,因为服务是通过提升了用户权限运行的,而应用程序往往是那些不具备管理员身份的普通用户运行的,其中的危险显而易见。

     从Vista 开始Session 0 中只包含系统服务,其他应用程序则通过分离的Session 运行,将服务与应用程序隔离提高系统的安全性。如下图所示:

     这样使得Session 0 与其他Session 之间无法进行交互,不能通过服务向桌面用户弹出信息窗口、UI 窗口等信息。这也就是为什么刚才我说那个图已经不能通过当前桌面进行截图了。

Session 检查

     在实际开发过程中,可以通过Process Explorer 检查服务或程序处于哪个Session,会不会遇到Session 0 隔离问题。我们在Services 中找到之前加载的AlertService 服务,右键属性查看其Session 状态。

可看到AlertService 处于Session 0 中:

再来看看Outlook 应用程序:

     很明显在Windows 7 中服务和应用程序是处于不同的Session,它们之间加隔了一个保护墙,在下篇文章中将介绍如何穿过这堵保护墙使服务与桌面用户进行交互操作。

穿透Session 0 隔离(二)

上一篇我们已经对Session 0 隔离有了进一步认识,如果在开发过程中确实需要服务与桌面用户进行交互,可以通过远程桌面服务的API 绕过Session 0 的隔离完成交互操作。      对于...
  • findsafety
  • findsafety
  • 2015年05月25日 16:32
  • 1895

穿透Session 0 隔离(一)

服务(Service)对于大家来说一定不会陌生,它是Windows 操作系统重要的组成部分。我们可以把服务想像成一种特殊的应用程序,它随系统的“开启~关闭”而“开始~停止”其工作内容,在这期间无需任何...
  • findsafety
  • findsafety
  • 2015年05月25日 16:33
  • 1038

关于win7的session0隔离的总结

微软做这个session隔离的原因我就不追查了,反正让人有蛋蛋的忧伤。       在vista以前的系统,后台服务和当前用户进程都运行在同一个session中(本地系统登录时的第一个session...
  • eagleatustb
  • eagleatustb
  • 2013年12月06日 15:45
  • 2352

解决vista和win7在windows服务中交互桌面权限问题:穿透Session 0 隔离

服务(Service)对于大家来说一定不会陌生,它是Windows 操作系统重要的组成部分。我们可以把服务想像成一种特殊的应用程序,它随系统的“开启~关闭”而“开始~停止”其工作内容,在这期间无需任何...
  • whatday
  • whatday
  • 2014年11月05日 12:57
  • 1327

解决vista和win7在windows服务中交互桌面权限问题:穿透Session 0 隔离

文章来源:http://www.cnblogs.com/therock/articles/2261371.html 服务(Service)对于大家来说一定不会陌生,它是Windows 操作系统重要的...
  • daiafei
  • daiafei
  • 2015年02月06日 16:32
  • 1087

windows7及以上如何穿透Session0隔离?

服务(Service)对于大家来说一定不会陌生,它是Windows 操作系统重要的组成部分。我们可以把服务想像成一种特殊的应用程序,它随系统的“开启~关闭”而“开始~停止”其工作内容,在这期间无需任何...
  • huang050535
  • huang050535
  • 2016年11月08日 17:30
  • 433

解决vista和win7在windows服务中交互桌面权限问题:穿透Session 0 隔离

解决vista和win7在windows服务中交互桌面权限问题:穿透Session 0 隔离 分类: .NET 2012-02-16 14:33 1161人阅读 评论(2) 收藏 ...
  • harrymeinan
  • harrymeinan
  • 2012年12月26日 17:30
  • 1639

解决vista和win7在windows服务中交互桌面权限问题:穿透Session 0 隔离

在某国外大型汽车公司BI项目中,有一个子项目,需要通过大屏幕展示销售报表,程序需要自动启动和关闭。开发人员在开发过程中,发现在Win7的service中不能直接操作UI进程,调查过程中,发现如下相关资...
  • kissqw
  • kissqw
  • 2012年02月16日 14:33
  • 16405

穿透Session 0 隔离(一)

服务(Service)对于大家来说一定不会陌生,它是Windows 操作系统重要的组成部分。我们可以把服务想像成一种特殊的应用程序,它随系统的“开启~关闭”而“开始~停止”其工作内容,在这期间无需任何...
  • reFreever
  • reFreever
  • 2014年03月13日 11:29
  • 530

穿透Session 0 隔离(一)

服务(Service)对于大家来说一定不会陌生,它是Windows 操作系统重要的组成部分。我们可以把服务想像成一种特殊的应用程序,它随系统的“开启~关闭”而“开始~停止”其工作内容,在这期间无需任何...
  • findsafety
  • findsafety
  • 2015年05月25日 16:33
  • 1038
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:穿透Session 0 隔离(一)
举报原因:
原因补充:

(最多只允许输入30个字)