Svchost.exe進程是干什么的?
Svchost.exe文件存在于“%system root%\system32”(例如C:\Windows\system32)目錄下,它是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:\WINDOWS\System32\svchost.exe -k.netsvcs” (如圖2),說明helpsvc服務是依靠SVCHOST調用“netsvcs”參數來實現的,而參數的內容則是存放在系統注冊表中的。
在運行對話框中輸入“regedit.exe”后回車,打開注冊表編輯器,找到[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\helpsvc]項,找到類型為“REG_EXPAND_SZ”的鍵“magePath”,其鍵值為“%SystemRoot%\System32\svchost.exe -k netsvcs”(這就是在服務窗口中看到的服務啟動命令),另外在“Parameters”子項中有個名為“ServiceDll”的鍵,其值為“%WINDIR%\PCHealth\HelpCtr\Binaries\pchsvc.dll”,其中“pchsvc.dll”就是helpsvc服務要使用的動態鏈接庫文件。這樣SVCHOST進程通過讀取“helpsvc”服務注冊表信息,就能啟動該服務了?! ?
[1]