svchost.exe启动服务原理
?svchost.exe本身只是作為服務宿主,并不實現任何服務功能,需要svchost.exe啟動的服務以動態鏈接庫形式實現,在安裝這些服務時,把服務的可執行程序指向svchost.exe,啟動這些服務時由svchost.exe調用相應服務的動態鏈接庫來啟動服務。
????雙擊服務列表的服務,可以看到服務詳細信息。
?
?
????其中,C:\Windows\System32\svchost.exe-k netsvcs這個路徑當然就是啟動服務的關鍵信息,其實,后邊的這個-k netsvcs參數并不是在告訴svchost.exe啟動哪個服務,netsvcs代表的是組,表示這個服務是屬于哪個組的,組具體有啥用,大概就是節省資源什么亂七八糟的。正是由于采用了分組機制,系統中才會有多個svchost.exe進程,每個進程代表一個組。
????那svchost.exe是怎么區分不同的服務呢?原來是根據服務名字區分的。。。搞個什么參數,弄的這么復雜,原來還是根據服務名字區分的。。。。
????注意服務的名稱,可不是服務列表里直接看到的名稱,雙擊服務從屬性里看以看到,如圖:
?
?
????哪個服務對應哪個dll,都是保存在注冊表里的,路徑是HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services。
????就拿上邊的Browser服務來說,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services路徑下有一個Browser項,名字和服務名字一樣(也就是說,有多少個服務,這個路徑下就有多少個項,和服務名稱相對應),這個項里里邊又有一個Parameters子項,Parameters子項里有一個名字叫ServiceDll的鍵,它的值就是dll的路徑。如圖:
?
?
????這樣一來,svchost.exe根據服務名稱找到相應的鍵值,就找到要啟動的dll了。
????當然,不是所有的服務都是通過svchost.exe啟動的,以上的方法僅僅適用于利用svchost.exe啟動的服務,如果服務本身就是exe,而不是dll,不需要借助于svchost.exe。
????如果服務不通過svchost.exe啟動,那么就更簡單,直接在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services路徑下找到和服務名稱一樣的項,項中有一個叫ImagePath的鍵,這個鍵的值就是服務exe文件的路徑和啟動參數。如圖:
總結
以上是生活随笔為你收集整理的svchost.exe启动服务原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网游变态功能
- 下一篇: OD 调试带启动参数的程序