svchost.exe是一个属于微软Windows操作系统的系统程序,微软官方对它的解释是:Svchost.exe 是从动态链接库 (DLL) 中运行的服务的通用主机进程名称。这个程序对系统的正常运行是非常重要,而且是不能被结束的。在基于nt内核的windows操作系统家族中,不同版本的windows系统,存在不同数量的“svchost”进程,用户使用“任务管理器”可查看其进程数目。一般来说,win2000有两个svchost进程,winxp中则有四个或四个以上的svchost进程(以后看到系统中有多个这种进程,千万别立即判定系统有病毒了哟),而win2003server中则更多。这些svchost进程提供很多系统服务,如:rpcss服务(remoteprocedurecall)、dmserver服务(logicaldiskmanager)、dhcp服务(dhcpclient)等。到了Windows Vista 系统时svchost 进程多达12个,这些svchost.exe都是同一个文件路径下C :\Windows\System32\svchost.exe , 它们分别是imgsvc、 NetworkServiceNetworkRestricted、 LocalServiceNoNetwork 、NetworkService 、LocalService 、netsvcs 、LocalSystemNetworkRestricted、 LocalServiceNetworkRestricted 、services 、rpcss、 WerSvcGroup 、DcomLaunch服务组。如果要了解每个svchost进程到底提供了多少系统服务,可以在win2000的命令提示符窗口中输入“tlist-s”命令来查看,该命令是win2000supporttools提供的。在winxp则使用“tasklist/svc”命令。 svchost中可以包含多个服务 深入:windows系统进程分为独立进程和共享进程两种,“svchost.exe”文件存在于“%systemroot%system32”目录下,它属于共享进程。随着windows系统服务不断增多,为了节省系统资源,微软把很多服务做成共享方式,交由svchost.exe进程来启动。但svchost进程只作为服务宿主,并不能实现任何服务功能,即它只能提供条件让其他服务在这里被启动,而它自己却不能给用户提供任何服务。那这些服务是如何实现的呢? 原来这些系统服务是以动态链接库(dll)形式实现的,它们把可执行程序指向svchost,由svchost调用相应服务的动态链接库来启动服务。那svchost又怎么知道某个系统服务该调用哪个动态链接库呢?这是通过系统服务在注册表中设置的参数来实现。下面就以rpcss(remoteprocedurecall)服务为例,进行讲解。 从启动参数中可见服务是靠svchost来启动的。 实例 以windowsxp为例,点击“开始”/“运行”,输入“services.msc”命令,弹出服务对话框,然后打开“remoteprocedurecall”属性对话框,可以看到rpcss服务的可执行文件的路径为“c:\windows\system32\svchost-krpcss”,这说明rpcss服务是依靠svchost调用“rpcss”参数来实现的,而参数的内容则是存放在系统注册表中的。 在运行对话框中输入“regedit.exe”后回车,打开注册表编辑器,找到[hkey_local_machine\system\currentcontrolset\services\rpcss]项,找到类型为“reg_expand_sz”的键“Imagepath”,其键值为“%systemroot%system32svchost-krpcss”(这就是在服务窗口中看到的服务启动命令),另外在“parameters”子项中有个名为“servicedll”的键,其值为“%systemroot%system32rpcss.dll”,其中“rpcss.dll”就是rpcss服务要使用的动态链接库文件。这样svchost进程通过读取“rpcss”服务注册表信息,就能启动该服务了。 [编辑本段]病毒相关解惑 因为svchost进程启动各种服务,所以病毒、木马也想尽办法来利用它,企图利用它的特性来迷惑用户,达到感染、入侵、破坏的目的(如冲击波变种病毒“w32.welchia.worm”)。但windows系统存在多个svchost进程是很正常的,在受感染的机器中到底哪个是病毒进程呢?这里仅举一例来说明。 假设windowsxp系统被“w32.welchia.worm”感染了。正常的svchost文件存在于“c:\windows\system32”目录下,如果发现该文件出现在其他目录下就要小心了。“w32.welchia.worm”病毒存在于“c:\windows\system32\wins”目录中,因此使用进程管理器查看svchost进程的执行文件路径就很容易发现系统是否感染了病毒。windows系统自带的任务管理器不能够查看进程的路径,可以使用第三方进程管理软件,如“windows优化大师”进程管理器,通过这些工具就可很容易地查看到所有的svchost进程的执行文件路径,一旦发现其执行路径为不平常的位置就应该马上进行检测和处理。 Svchost.exe说明解疑对Svchost的困惑 --------------- Svchost.exe文件对那些从动态连接库中运行的服务来说是一个普通的主机进程名。Svchost.exe文件定位在系统的%systemroot%\system32文件夹下。在启动的时候,Svchost.exe检查注册表中的位置(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost)来构建需要加载的服务列表。这就会使多个Svchost.exe在同一时间运行。每个Svchost.exe的回话期间都包含一组服务,以至于单独的服务必须依靠Svchost.exe怎样和在那里启动。这样就更加容易控制和查找错误。 Svchost.exe 组是用下面的注册表值来识别。 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Svchost 每个在这个键下的值代表一个独立的Svchost组,并且当你正在看活动的进程时,它显示作为一个单独的例子。每个键值都是REG_MULTI_SZ类型的值而且包括运行在Svchost组内的服务。每个Svchost组都包含一个或多个从注册表值中选取的服务名,这个服务的参数值包含了一个ServiceDLL值。 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services 简单的说没有这个RPC服务,机器几乎就上不了网了。很多应用服务都是依赖于这个RPC接口的,如果发现这个进程占了太多的CPU资源,直接把系统的RPC服务禁用了会是一场灾难:因为连恢复这个界面的系统服务设置界面都无法使用了。恢复的方法需要使用注册表编辑器,找到 HKEY_LOCAL_MACHINE >> SYSTEM >> CurrentControlSet >> Services >> RpcSs, 右侧找到Start属性,把它的值改为2再重启即可 造成svchost占系统CPU 100%的原因并非svchost服务本身:以上的情况是由于Windows Update服务下载/安装失败而导致更新服务反复重试造成的。而Windows的自动更新也是依赖于svchost服务的一个后台应用,从而表现为svchost.exe负载极高。 常发生这类问题的机器一般是上网条件(尤其是去国外网站)不稳定的机器,比如家里的父母的机器,往往在安装机器几个月以后不定期发生,每个月的第二个星期是高发期:因为最近几年MS很有规律的在每个月的第二个星期发布补丁程序)。上面的解决方法并不能保证不重发作,但是为了svchost文件而每隔几个月重装一次操作系统还是太浪费时间了。 注意点: svchost.exe 常被病毒冒充的进程名有:svch0st.exe、schvost.exe、scvhost.exe。随着Windows系统服务不断增多,为了节省系统资源,微软把很多服务做成共享方式,交由svchost.exe进程来启动。而系统服务是以动态链接库(DLL)形式实现的,它们把可执行程序指向svchost,由svchost调用相应服务的动态链接库来启动服务。我们可以打开“控制面板”→“管理工具”→服务,双击其中“ClipBook”服务,在其属性面板中可以发现对应的可执行文件路径为“C:\WINDOWS\system32\clipsrv.exe”。再双击“Alerter”服务,可以发现其可执行文件路径为“C:\WINDOWS\system32\svchost.exe -k LocalService”,而“Server”服务的可执行文件路径为“C:\WINDOWS\system32\svchost.exe -k netsvcs”。正是通过这种调用,可以省下不少系统资源,因此系统中出现多个svchost.exe,其实只是系统的服务而已。 在Windows2000系统中一般存在2个svchost.exe进程,一个是RPCSS(RemoteProcedureCall)服务进程,另外一个则是由很多服务共享的一个svchost.exe;而在WindowsXP中,则一般有4个以上的svchost.exe服务进程。如果svchost.exe进程的数量多于6个,就要小心了,很可能是病毒假冒的,检测方法也很简单,使用一些进程管理工具,例如Windows优化大师的进程管理功能,查看svchost.exe的可执行文件路径,如果在“C:\WINDOWS\system32”目录外,那么就可以判定是病毒了。 svchost.exe病毒清除办法 1、用unlocker删除类似于C:SysDayN6这样的文件夹:例如C:Syswm1i、C:SysAd5D等等,这些文件夹有个共同特点,就是名称为 Sys*** (***是三到五位的随机字母),这样的文件夹有几个就删几个。 2、开始——运行——输入“regedit”——打开注册表,注册表到以下位置: HKEY_CURRENT_USER\Software\Microsoft\Windows\Current\Version\Policies\Explorer\Run 删除右边所有用纯数字为名的键,如 <66><C:SysDayN6svchost.exe> <333><C:Syswm1isvchost.exe> <50><C:SysAd5Dsvchost.exe> <4><C:SysWsj7svchost.exe> 3、重新启动计算机,病毒清除完毕。
追问我有一个程序调用一个DLL动态库,在WIN7 64位运行正常!到了win2008就不加载那个DLL动态库了!怎么回事?
你的意思是,我的2008服务器操作确实某种服务?所以不能正常运行自己开发的DLL动态库