今天,将向大家介绍Windows 7 / Windows Server 2008 R2的新特性――控制台主机(ConHost.exe) 。
其实,不论是作为普通用户还是企业管理员,我们在日常的Windows应用和运维过程中都会或多或少的使用到控制台应用程序 。控制台应用程序是没有用户界面的,我们需要通过命令提示符(CMD,这可不是DOS,很多人混淆不清)对其进行输入、输出操作 。
那么大家来回想一下,Windows自带了哪些控制台应用程序呢?
其实最典型的就有cmd.exe、nslookup.exe和telnet.exe等 。
在早期的Windows版本中,所有代表非GUI活动的应用程序(即控制台应用程序)要在桌面上运行时,都通过系统进程Csrss.exe进行协调 。当控制台应用程序需要接收字符时,会在Kernel32.dll中调用一个小型的“控制台APIs以让Kernel32产生LPC来调用CSRSS 。此时CSRSS会对控制台窗口的输入队列进行检查和校验,并将字符模式的结果通过Kernel32返回给控制台应用程序进行关联 。早期Windows版本中控制台应用程序对消息的处理机制如下图所示:
这样的处理机制就已经产生了一个问题:即使一个控制台应用程序在普通用户的上下文环境中执行,但Csrss.exe始终是运行在本地系统账户权限下的 。因此,某些情况下“坏人开发的恶意软件就有可能通过本地系统账户权限执行的Csrss.exe获取到更多特权 。这种攻击模式被称为Shatter Attack 。
而到了Win7和Windows Server 2008 R2时代,所有控制台应用程序都被放到了一个新的上下文进程ConHost.exe中来执行,而ConHost(控制台主机)与控制台程序运行在相同安全级的上下文环境当中,取代了发出LPC消息请求到CSRSS中进行处理这种机制,而是去请求ConHost 。因此,任何应用程序企图利用消息请求来导致特权的自动提升都不会成功 。下图为Windows7和Windows Server 2008 R2中所采用新机制的示意图:
ConHost取代了在控制台应用程序对I/O处理方式的永久性变化,用户不能通过注册表或组策略强制将Windows恢复到“传统模式控制台的行为(机制) 。因此,用户需要在升级到Windows7或Windows Server 2008 R2之前对应用程序进行全面的测试 。请不要忘记,虽然有的应用程序大部分功能都通过GUI来实现,但仍然在后台通过控制台或其它功能接口对数据进行批量处理 。因此,在迁移或等级之前进行全面的应用程序功能测试是非常有必要的 。
当有应用程序无法在Windows7中正常使用时,我们应当首先测试使用管理员权限再次执行看问题是否发生,其实再使用Process Monitor来监控此应用程序对文件或注册表的访问权限是否正常 。如果排除以上问题应用程序还是无法正常运行,您则需要考虑联系ISV或其开发人员了 。
如果应用程序发生崩溃,相应的崩溃转储文件是最有利于开发人员和ISV找到问题症结的 。如果应用程序停止响应,您可以尝试使用ADPlus来抓取它及与其相关的ConHost.exe进程Dump 。控制台应用程序可以共享Windows控制台的许多子进程,例如:当用户从CMD窗口启动Telnet,则Telnet.exe会成为Cmd.exe的子进程 。在此种情况下,ConHost.exe主机则同时处理父进程和子进程的消息实例 。通过使用Process Explorer我们便可以确认ConHost.exe正在处理哪些进程:
您还可以用Windows7资源监视器功能中自带的“分析等待链功能来查看ConHost.exe进程的申请过程:
【ConHost.exe Win 7的新特性:控制台主机】最后别忘记了,迁移之前的应用程序全面测试哦!
推荐阅读
- 在excel中设置居中打印的教程
- 小米微信分身怎么弄
- 解决浏览器中淘宝支付页面打不开的方法
- 系统技巧:Windows 7下开启四声道的方法
- E700的VMD格式真人真唱铃声制作
- 全面解读Shift键在Word中的使用技巧
- 房东手上的期房能买吗
- 哺乳期想吃石榴,石榴是回奶的水果吗?
- 两年免息的车贷划算吗
- 凉拌豆腐的做法 凉拌豆腐怎么做
