学习 让你全面认识系统svchost进程

【学习 让你全面认识系统svchost进程】 很多朋友对svchost.exe进程都不太了解,有时在任务管理器中一旦看到有多个该进程(图1中有6个),就以为自己的电脑中了病毒或木马,其实并非如此!正常情况下,Windows中可以有多个svchost.exe进程同时运行,例如Windows 2000至少有2个svchost进程,Windows XP中有4个以上,Windows 2003中则有更多,所以当你看到多个svchost进程时,未必就是病毒!


svchost.exe进程是干什么的?
svchost.exe文件存在于“%system root%system32”(例如C:Windowssystem32)目录下,它是Windows NT核心的重要进程(Windows 9X没有该进程),专门为系统启动各种服务的 。例如svchost.exe调用rpCSS.dll文件,就会启动rpcss服务(remote procedure call) 。
svchost.exe实际上是一个服务宿主,它本身并不能给用户提供任何服务,但是可以用来运行动态链接库DLL文件,从而启动对应的服务 。svchost.exe进程可以同时启动多个服务 。
svchost是如何启动系统服务的?
由于系统服务都是以动态链接库(DLL)形式实现的,它们把可执行程序指向svchost,因此svchost只要调用某个动态链接库,即可启动对应的服务 。那么svchost启动某服务时,又是如何知道应该调用哪个动态链接库?由于系统服务在注册表中都设置了相关参数,因此svchost通过读取某服务在注册表中的信息,即可知道应该调用哪个动态链接库,从而启动该服务 。
下面我们以svchost启动helpsvc(Help and Support)服务为例,介绍其启动服务的方法 。在Windows XP中点击“开始”“运行”,输入“services.msc”命令,弹出服务对话框,然后双击打开“Help and Support”服务属性对话框,可以看到helpsvc服务的可执行文件的路径为“C:WINDOWSSystem32svchost.exe -k netsvcs” (如图2),说明helpsvc服务是依靠SVCHOST调用“netsvcs”参数来实现的,而参数的内容则是存放在系统注册表中的 。
在运行对话框中输入“regedit.exe”后回车,打开注册表编辑器,找到[HKEY_LOCAL_MacHINESYSTEMCurrentControlSetServiceshelpsvc]项,找到类型为“REG_EXPAND_SZ”的键“magePath”,其键值为“%SystemRoot%System32svchost.exe -k netsvcs”(这就是在服务窗口中看到的服务启动命令),另外在“Parameters”子项中有个名为“ServiceDll”的键,其值为“%WINDIR%PCHealthHelpCtrBinarIEspchsvc.dll”,其中“pchsvc.dll”就是helpsvc服务要使用的动态链接库文件 。这样SVCHOST进程通过读取“helpsvc”服务注册表信息,就能启动该服务了 。
svchost到底启动了哪些服务?
如果你想了解每个SVCHOST进程当前到底提供了哪些系统服务,可以在命令提示符下输入命令来查看 。例如在Windows XP中,打开“命令提示符”,键入tasklist /svc命令查看;在Windows 2000中,则输入“Tlist -S”命令来查看 。
如果你在Windows XP中,想得到所有进程的详细信息,可以打开“命令提示符”,键入tasklist /svc >abc.txt 命令,于是在当前目录中,将会生成一个abc.txt文件,其内容就是当前正在运行的所有进程情况,例如进程名、PID号、该进程启动了哪些服务 。
如何发现svchost进程有问题?由于svchost进程可以启动各种服务,因此病毒、木马也经常伪装成系统的DLL文件,使svchost调用它,从而进入内存中运行、感染和控制电脑 。
建议你使用“Windows优化大师”进程管理器(可以到《个人电脑》的下载频道http://download.pcpro.com.cn的“系统工具”中去下载),查看所有svchost进程的执行文件路径(如图3),正常的svchost文件应该存在于“c:Windowssystem32”目录下,如果你发现其执行路径在其他目录下,就有可能染上了病毒或木马了,应该马上进行检测和处理 。

推荐阅读