Windows中Session 0隔离对服务程序和驱动程序的影响

来源:互联网 发布:淘宝产品上架教程 编辑:程序博客网 时间:2024/04/28 13:42

读完Impact of Session 0 Isolation on Services and Drivers in Windows的笔记

推荐使用Logonsessions查看当前所有Session以及其进程、使用ProcessExplorer查看当前进程的内核对象来进行验证。

Session 0隔离:

   在Windows XP,Windows Server 2003以及更早的版本中,第一个登录的用户以及Windows的所有服务都运行在Session 0上。

这样做危险的地方是,用户使用的应用程序可能会利用Windows的服务程序提升自己的权限。

    如下图所示,第一个登录的用户与Windows服务程序运行在同一个会话中,第二个以及后续的登录用户(在XP中为通过FUS登录的用户,在Server 2003中则为远程登录的用户)就运行在其他的会话中。

    Windows Vista,Windows Server 2008及后续版本中,Windows服务运行于Session 0,第一个登录的用户则在Session 1中运行。

    Session 0是一个非交互型的(noninteractive)Session,只能运行系统进程以及服务程序。

    所以服务程序已经不能像之前一样工作,比如不能访问视频驱动程序。

    image       image
            Windows XP,Windows Server 2003及更早版本                                Windows Vista,Windows Server 2008及后续版本

受影响的程序:

主要影响到了一些以服务程序形式安装的应用程序或者驱动程序,
和一些由运行在Session 0下的操作系统进程以及操作系统服务程序加载的驱动程序。

比如:

1、打印机驱动,由spooler service加载(spooler service运行在Session 0下)

2、UDMF的驱动程序(其托管进程WUDFHost.exe运行在Session 0下)

潜在的问题:
当然,所有服务程序或者由服务程序加载的驱动程序,如果它们运行时假设用户运行于Session 0,在新版操作系统中将不能运行。

1、服务程序创建的用户界面,用户是看不到的,因为用户都不在Session 0中运行。

2、服务程序尝试发送窗口消息(例如调用SendMessage或者PostMessage)是不可行的。

原因是,应用程序运行在另外一个Session中,接收不到消息,并且服务程序跟应用程序的消息队列是不一样的。

3、用Local来创建或者打开命名对象默认已经不再是创建或者打开\BaseNamedObjects\下的对象,

而是创建或者打开\Session\<n>\BaseNamedObjects\下的对象,Local对象已经被不同Session隔离。

在Session 1中创建事件对象以及在系统中生成的事件对象的名称的例子:

    CreateEvent(NULL, FALSE, FALSE, "Object") --> \Session\1\BaseNamedObject\Object

    CreateEvent(NULL, FALSE, FALSE, "Global\\Object") -->\BaseNamedObject\Object

用户应用程序和服务程序的同步最好是用Global命名空间。

有关创建服务程序以及由服务托管的驱动程序的建议:

1、与应用程序通信时,使用RPC、命名管道等C/S模式代替窗口消息

2、如果服务程序需要UI与用户交互的话,有两种方式:

    ①用WTSSendMessage来创建一个消息框与用户交互

    ②使用一个代理(agent)来完成跟用户的交互,服务程序通过CreateProcessAsUser创建代理。

        并用RPC或者命名管道等方式跟代理通信,从而完成复杂的界面交互。

3、应该在用户的Session中查询显示属性,如果在Session 0中做这件事,将会得到不正确的结果。

4、明确地使用Local或者Global为命名对象命名,

  (Local\为Session\<n>\BaseNamedObject\,Global\为BaseNamedObject\)

5、将程序放在实际环境中测试是最好的方法,如果条件不允许,可以在XP的FUS下测试。

在XP的FUS下能工作的服务程序将很可能可以在新版系统中工作,注意XP的FUS下的测试不能检测到在Session 0下跟视频驱动有关的问题

 

附《Impact of Session 0 Isolation on Services and Drivers in Windows》地址:
http://www.microsoft.com/whdc/system/sysinternals/session0changes.mspx

 

转自:http://www.cnblogs.com/wihing/archive/2010/09/25/1834778.html