博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
win7之session理解
阅读量:4192 次
发布时间:2019-05-26

本文共 2094 字,大约阅读时间需要 6 分钟。

服务(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()        {        }    }}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 检查

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

可看到AlertService 处于Session 0 中:

再来看看Outlook 应用程序:

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

转载地址:http://lkloi.baihongyu.com/

你可能感兴趣的文章
刘作虎:一加新品将全系支持 5G
查看>>
滴滴顺风车上线新功能,特殊时期便捷出行
查看>>
网易云推出“音街”APP 入局免费K歌市场
查看>>
首批马云援欧口罩运抵比利时eWTP枢纽
查看>>
微信小程序上线订单管理功能:实现订单管理、售后维权一体化
查看>>
被哥哥巨额索赔56亿?贾跃亭回应:40多亿为联合担保
查看>>
苹果公布App审查新机制 禁止发布疫情相关娱乐程序和游戏
查看>>
市民举报邻居去韩国代购归来未隔离,真相很尴尬:表面防疫,实则打假?
查看>>
首批国产特斯拉车主,被“割了韭菜”
查看>>
中消协发布疫情期间消费维权热点:口罩类投诉最多
查看>>
猛料一顿狂堆!华为P40 Pro详细参数被曝光
查看>>
台积电:如果不能向华为销售芯片,其他订单可快速取代华为空缺
查看>>
张朝阳直播带货首秀 带的不仅是好物而是价值平台
查看>>
修手机时创意被剽窃,男子向苹果索赔7万亿!是认真的吗?
查看>>
拼多多:不搞套路,要实现同品全网最低价直售
查看>>
京东股价创新高:市值首次突破千亿美元 !
查看>>
iPhone 12 Pro系列变贵的原因在这儿!
查看>>
刘慈欣、Netflix联手!《三体》系列将拍摄剧集,但编剧被网友疯狂吐槽
查看>>
2198元买真全面屏手机!网友:笑而不语...
查看>>
官宣!《花木兰》内地定档
查看>>