教你全面認(rèn)識(shí)操作系統(tǒng)的svchost進(jìn)程

svchost.exe進(jìn)程是干什么的?
svchost.exe文件存在于“%system root%\system32”(例如C:\Windows\system32)目錄下,它是Windows NT核心的重要進(jìn)程(Windows 9X沒(méi)有該進(jìn)程),專門為系統(tǒng)啟動(dòng)各種服務(wù)的。例如svchost.exe調(diào)用rpcss.dll文件,就會(huì)啟動(dòng)rpcss服務(wù)(remote procedure call)。
svchost.exe實(shí)際上是一個(gè)服務(wù)宿主,它本身并不能給用戶提供任何服務(wù),但是可以用來(lái)運(yùn)行動(dòng)態(tài)鏈接庫(kù)DLL文件,從而啟動(dòng)對(duì)應(yīng)的服務(wù)。svchost.exe進(jìn)程可以同時(shí)啟動(dòng)多個(gè)服務(wù)。
svchost是如何啟動(dòng)系統(tǒng)服務(wù)的?
由于系統(tǒng)服務(wù)都是以動(dòng)態(tài)鏈接庫(kù)(DLL)形式實(shí)現(xiàn)的,它們把可執(zhí)行程序指向svchost,因此svchost只要調(diào)用某個(gè)動(dòng)態(tài)鏈接庫(kù),即可啟動(dòng)對(duì)應(yīng)的服務(wù)。那么svchost啟動(dòng)某服務(wù)時(shí),又是如何知道應(yīng)該調(diào)用哪個(gè)動(dòng)態(tài)鏈接庫(kù)?由于系統(tǒng)服務(wù)在注冊(cè)表中都設(shè)置了相關(guān)參數(shù),因此svchost通過(guò)讀取某服務(wù)在注冊(cè)表中的信息,即可知道應(yīng)該調(diào)用哪個(gè)動(dòng)態(tài)鏈接庫(kù),從而啟動(dòng)該服務(wù)。
下面我們以svchost啟動(dòng)helpsvc(Help and Support)服務(wù)為例,介紹其啟動(dòng)服務(wù)的方法。在Windows XP中點(diǎn)擊“開(kāi)始” “運(yùn)行”,輸入“services.msc”命令,彈出服務(wù)對(duì)話框,然后雙擊打開(kāi)“Help and Support”服務(wù)屬性對(duì)話框,可以看到helpsvc服務(wù)的可執(zhí)行文件的路徑為“C:\WINDOWS\System32\svchost.exe -k netsvcs” (如圖2),說(shuō)明helpsvc服務(wù)是依靠SVCHOST調(diào)用“netsvcs”參數(shù)來(lái)實(shí)現(xiàn)的,而參數(shù)的內(nèi)容則是存放在系統(tǒng)注冊(cè)表中的。

在運(yùn)行對(duì)話框中輸入“regedit.exe”后回車,打開(kāi)注冊(cè)表編輯器,找到[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\helpsvc]項(xiàng),找到類型為“REG_EXPAND_SZ”的鍵“magePath”,其鍵值為“%SystemRoot%\System32\svchost.exe -k netsvcs”(這就是在服務(wù)窗口中看到的服務(wù)啟動(dòng)命令),另外在“Parameters”子項(xiàng)中有個(gè)名為“ServiceDll”的鍵,其值為“%WINDIR%\PCHealth\HelpCtr\Binaries\pchsvc.dll”,其中“pchsvc.dll”就是helpsvc服務(wù)要使用的動(dòng)態(tài)鏈接庫(kù)文件。這樣SVCHOST進(jìn)程通過(guò)讀取“helpsvc”服務(wù)注冊(cè)表信息,就能啟動(dòng)該服務(wù)了?! ?
svchost到底啟動(dòng)了哪些服務(wù)?
如果你想了解每個(gè)SVCHOST進(jìn)程當(dāng)前到底提供了哪些系統(tǒng)服務(wù),可以在命令提示符下輸入命令來(lái)查看。例如在Windows XP中,打開(kāi)“命令提示符”,鍵入tasklist /svc命令查看;在Windows 2000中,則輸入“Tlist -S”命令來(lái)查看?! ?
如果你在Windows XP中,想得到所有進(jìn)程的詳細(xì)信息,可以打開(kāi)“命令提示符”,鍵入tasklist /svc >abc.txt 命令,于是在當(dāng)前目錄中,將會(huì)生成一個(gè)abc.txt文件,其內(nèi)容就是當(dāng)前正在運(yùn)行的所有進(jìn)程情況,例如進(jìn)程名、PID號(hào)、該進(jìn)程啟動(dòng)了哪些服務(wù)。
如何發(fā)現(xiàn)svchost進(jìn)程有問(wèn)題?
由于svchost進(jìn)程可以啟動(dòng)各種服務(wù),因此病毒、木馬也經(jīng)常偽裝成系統(tǒng)的DLL文件,使svchost調(diào)用它,從而進(jìn)入內(nèi)存中運(yùn)行、感染和控制電腦?! ?
建議你使用“Windows優(yōu)化大師”進(jìn)程管理器(可以到《個(gè)人電腦》的下載頻道http://download.pcpro.com.cn的“系統(tǒng)工具”中去下載),查看所有svchost進(jìn)程的執(zhí)行文件路徑(如圖3),正常的svchost文件應(yīng)該存在于“c:\Windows\system32”目錄下,如果你發(fā)現(xiàn)其執(zhí)行路徑在其他目錄下,就有可能染上了病毒或木馬了,應(yīng)該馬上進(jìn)行檢測(cè)和處理。
svchost進(jìn)程殺不掉怎么辦?
如果有些svchost進(jìn)程,你在任務(wù)管理器中無(wú)法關(guān)閉之,可以使用ntsd命令來(lái)殺掉它,方法如下:

首先需要了解欲殺的svchost進(jìn)程,其PID是多少?在Windows XP下,按Ctrl+Alt+Del打開(kāi)任務(wù)管理器,點(diǎn)擊“進(jìn)程選項(xiàng)卡” “查看” “選擇列”,在彈出的窗口中(圖4),勾選“PID(進(jìn)程標(biāo)識(shí)符)”,然后回到任務(wù)管理器中,即可看見(jiàn)PID了(例如要?dú)⒌膕vchost進(jìn)程,其PID是844)?! ?
接下來(lái)關(guān)閉該進(jìn)程。點(diǎn)擊“開(kāi)始” “程序” “附件” “命令提示符”,在命令提示符下,輸入命令ntsd -c q -p 844即可殺掉svchost進(jìn)程(PID是844)?! ?
小提示:除了System、SMSS.EXE和CSRSS.EXE這三個(gè)進(jìn)程,ntsd命令可以殺掉任何一個(gè)系統(tǒng)進(jìn)程。從Windows 2000開(kāi)始,微軟就提供了ntsd工具,該命令執(zhí)行后,可讓你獲得系統(tǒng)的debug權(quán),因此能夠用來(lái)關(guān)閉大部分的系統(tǒng)進(jìn)程,如果你遇到無(wú)法關(guān)閉的進(jìn)程,就可以使用該命令,其殺進(jìn)程的命令格式為:ntsd -c q p XXX
以上XXX為欲殺進(jìn)程的PID;
ntsd p XXX 表示在調(diào)試器中打開(kāi)某進(jìn)程(PID為XXX);
而-c q參數(shù)則表示退出調(diào)試器。由于調(diào)試器關(guān)閉之后,它打開(kāi)的進(jìn)程會(huì)隨調(diào)試器一起退出,因此ntsd命令能夠關(guān)閉進(jìn)程。
相關(guān)文章
關(guān)于待機(jī),休眠的經(jīng)典問(wèn)答正文分析錯(cuò)誤
關(guān)于待機(jī),休眠的經(jīng)典問(wèn)答正文分析錯(cuò)誤...2007-09-09
Windows XP+SP2系統(tǒng)屬性的造假原理正文分析錯(cuò)誤
Windows XP+SP2系統(tǒng)屬性的造假原理正文分析錯(cuò)誤...2007-09-09
用ASP編程實(shí)現(xiàn)網(wǎng)絡(luò)內(nèi)容快速查找
用ASP編程實(shí)現(xiàn)網(wǎng)絡(luò)內(nèi)容快速查找2006-07-07

