请注意:本页内容发布于 4461 天前,内容可能已经过时,请注意甄别。
您是否在任务栏上看到过这个图标一闪一闪的?
而当单击这个图标后,以下对话框将出现:
如果点击「查看消息」,屏幕会一闪然后转到一个空白桌面,可能会有些对话框冒出来。
发生了什么事?
服务和系统进程运行在0号Session(会话)中。在Vista之前,控制台(第一登录用户的桌面)也运行在0号Session中。自Vista起,系统引入了Session 0隔离机制,以保护服务不受从控制台桌面提权的溢出攻击影响。
交互式服务检测(即任务栏上闪动的那个图标)是为传统应用程序准备的一种兼容性手段,当检测到某个服务尝试与桌面直接交互时会被启用(译注:例如安装某些旧式驱动时,驱动程序向用户进行提示)。此功能由「交互式服务检测」服务(UI0Detect)提供支持。
此服务的行为
「交互式服务检测」服务被设定为「手工」启动,这意味着它不会随系统一并启动。
在32位Windows系统中,系统会检测到尝试与桌面交互的行为,并启动UI0Detect服务,任务栏上就会出现那个闪动的图标。
在64位Windows系统中,如果一个服务是原生64位程序,则系统不会启动UI0Detect活动,因此,尝试与桌面互动的服务就好像挂起了一样。如果需要为64位服务提供交互式服务检测的兼容性,您需要确保此服务已经启动。
有趣的是,如果一个32位服务在64位系统中运行,WOW64(译注:64位系统下为普通应用程序提供的仿真层,全称为Windows 32-bit On Windows 64-bit)将启动UI0Detect服务,而「交互式服务检测」的提示将会弹出。之所以会这样是因为WOW64环境会尽可能模拟32位系统的行为——包括提供此类兼容性。
若想尝试「交互式服务检测」提示,一种方法是使用PsExec,例如,在控制台输入如下指令(译注:下一段文字是在64位系统的前提下进行说明的):
psexec \\localhost -i 0 calc.exe
此命令将在0号Session中启动计算器(calc.exe),是一种快速模拟系统服务与桌面进行交互的方法。有趣的是,由于PsExec是32位程序,所以UI0Detect将会被激活,而忽略计算器其实是个64位程序的事实。以下为此测试在Process Explorer中的显示:
可以看到,UI0Detect在0号Session中启动,并在1号Session中创建了一个进程。1号Session中的UI0Detect是「交互式服务检测」的提示对话框。PSEXESVC.exe是PsExec的命令行服务,注意,这是一个在0号Session中运行的32位程序(译注:通过上面的命令行中指定的-i 0参数达成),而Calc.exe通过PsExec中指定的参数运行在0号Session中。
多种问题,一种解药
如果一项服务出了问题,那么「远程桌面」服务和/或「快速用户切换」服务可能也会有问题。0号Session隔离、远程桌面和快速用户切换使用同一套隔离机制,所以,修好一个问题还不够,可能还要修理很多并不知道的问题。
译者附注
从以上说明我们可以看出,「交互式服务检测」其实是Vista/7系统的一种保护机制,利用系统服务原则上不应该弹出对话框的特点,将由服务弹出的内容拦截在隔离桌面中,以保护用户不受实际的侵扰。所以,当系统无缘无故地弹出「交互式服务检测」提示,并且在隔离桌面中弹出一些网页、广告等不知所谓的东西,你要做的第一件事不是想如何关掉「交互式检测服务」,而是尽快检查系统是否已被木马、病毒所感染。
远嚣 Comment