知られていないsvchost.exe

screenshot

ソーシャルブックマークを眺めていたら、Gigazine「svchost.exe」の正体を探るという記事が注目を集めているようだ。

正直、書かれている内容は、おそらくWindowsをちょっと知っている人にとってはすでに知られていること。こういうのを読むと、いかにWindowsの動作というのが世の人には知られていないのだなと思う。

svchost.exeの正体

svchostはその名前が示すようにサービスをホストするプロセスだ。Windowsはsvchost用のために用意されたレジストリ設定にしたがって複数のサービスを1つのグループとし、グループごとに独立したsvchostプロセスを起動している。そのため、プロセス名はsvchostと同じプロセスが複数実行されることとなる。

svchostがホストするサービスは以下のレジストリに設定情報が保存されている。

HKLM\Software\Microsoft\WindowsNT\CurrentVersion\Svchost

たとえば、ここにはLocalServiceという値に

  • Alerter
  • WebClient
  • LmHosts
  • RemoteRegistry
  • upnphost
  • SSDPSRV

が設定されていることがわかる*1

WindowsのサービスはHKLM\System\CurrentControlSet\Services\<サービス名>に格納されるが、ImagePath[REG_EXPAND_SZ]に設定される起動イメージはsvchostによるサービスの場合は、%SystemRoot%\System32\svchost.exe -k <グループ名>となる。ここで<グループ名>は先ほどのHKLM\Software\Microsoft\WindowsNT\CurrentVersion\Svchostに保存されている値である。

svchostでホストされているサービスの表示

GigazineではSysinternalsのProcess Explorerを使って、どのサービスがどのsvchostプロセスでホストされているかを判別する方法を紹介していた。グラフィカルに見るには、Process Explorerも良いが、実は標準機能でも見ることはできる。tasklistがそのコマンドだ。


C:\>tasklist /svc /fi "imagename eq svchost.exe"

イメージ名 PID サービス
========================= ====== =============================================
svchost.exe 1104 DcomLaunch, TermService
svchost.exe 1168 RpcSs
svchost.exe 1256 AudioSrv, BITS, CryptSvc, Dhcp, ERSvc,
EventSystem, helpsvc, HidServ, Irmon,
lanmanserver, lanmanworkstation, Netman,
Nla, RasMan, Schedule, seclogon, SENS,
SharedAccess, ShellHWDetection, srservice,
TapiSrv, Themes, TrkWks, W32Time, winmgmt,
wuauserv, WZCSVC
svchost.exe 1416 Dnscache
svchost.exe 1472 LmHosts, RemoteRegistry, SSDPSRV, WebClient
svchost.exe 272 stisvc
svchost.exe 5272 HTTPFilter

Windowsはブラックボックスだとかいう話を良く聞くが、これだって、KBとかで公開されている情報だ。もう少し、先入観なしに見てみても良いと思うのだが。

*1:もちろんマシン設定による。