1.サービスとは
Windows サービスとはユーザログオン/ログオンオフにかかわらず、「バックグランドで動作可能」なプログラムのことです。「動作可能」と記載したのは、サービスによっては常時起動しているサービス、必要時のみ起動するサービス、ユーザが手動で起動させるサービス、起動が禁止されているサービスなどがあるためです。よってサービスは必ず常時動作している訳ではありません。
2.svchost.exe
サービスは明確にプログラム (exeファイル)が実行されるタイプとsvchost.exe が数個のサービスをまとめてホストして実行しているタイプの2種類のタイプがあります。
プロセスを1個起動することはWindows OSに多くの負荷をかけます。(コンテキストスイッチなど)。Windowsは見た目では分かりませんが、実際にはマルチタスクとして短時間にプロセス実行の割り当てが順番に行われています。よって起動されたプロセス数が多ければ多いほど、実行スケジューリングのための処理で負荷がかかります。
サービスごとにプログラムを実行すると常時起動しているプロセス数が大きくなり、Windows OSに負荷がかかります。よって一つの svchost.exe で複数のサービスの機能を提供することにより起動プロセスを少なくし負荷を低減させています。
実行中のsvchosts.exeと対応するサービスを確認するには以下のコマンドを実行します。(管理権限でコマンドプロンプトを開きます。)
C:\tasklist /svc /FO list
3.サービスの確認方法
(1)サービス管理ツール
Windows にインストールされたサービスの確認方法は主に以下の3通りの方法があります。
「ファイル名を指定して実行」から「services.msc」を実行します。
サービスの一覧が表示されます。このツールから「サービス起動」「サービス停止」「手動起動」「自動起動」「無効化」などの操作が可能です。またサービスの表示名やサービスの説明を確認することが可能です。サービスを実行するユーザの確認、エラーコントロール、サービスの依存関係の確認も可能です。
(2)net start コマンド
net コマンドを使用するとサービスの一覧が表示されます。手軽なコマンドですが、起動中のサービスの表示名のみ表示されます。
C:\>net start
(3)se queryex コマンド
sc コマンドではサービス、およびドライバの詳細情報を表示することが可能です。
サービス名、サービスの表示名、タイプ、現在の状態などの表示、設定が可能です。詳細まで設定可能なため、コマンドベースでのサービス管理ツールはsc コマンドを使うとよいでしょう。
(例1)以下の例ではサービスに関してすべてのタイプを表示します。(state= all により停止中、起動中などすべてのサービスが表示されます。)
C:\sc queryex type= service state= all
(注)state と = (イコール) の間はスペースは入れてはいけません。逆に = (イコール) と all の間にはスペースを入れます。
(例2)以下の例では起動中のサービスのみ表示します。
C:\sc queryex type= service
(例3)以下の例ではドライバに関してすべてのタイプを表示します。
C:\>sc queryex type= driver state= all
(4)ジストリ値で確認
サービスの設定はレジストリに保管されています。サービス(及びドライバ)は以下のレジストリに保管されています。
キー名:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
start のキーに対応する値は以下の通りです。
ドライバ/サービスの起動設定 レジストリ ブート Start = 0 システム Start = 1 自動(遅延開始) DelayedAutostart = 1
Start = 2自動 DelayedAutostart = 0
Start = 2手動 DelayedAutostart = 0
Start = 3無効 DelayedAutostart = 0
Start = 4
ErrorControl のキーに対応する値は以下の通りです。
サービス起動時の失敗時の動作 レジストリ ドライバのロードに失敗しても、エラー表示せずに継続する。 0 ドライバの実行に失敗したら警告を表示するが、ブート処理は継続する。 1 パニック処理を行う。現在のブートが"前回正常起動時の構成(last known good)"の場合は継続する。 現在のブートが"前回正常起動時の構成"でない場合は"前回正常起動時の構成"に切り替える。 2 現在のブートを失敗として記録する。現在のブートが"前回正常起動時の構成"の場合は診断を実行する。現在のブートが"前回正常起動時の構成"でない場合は"前回正常起動時の構成"に切り替える。 3
Type のキーに対応する値は以下の通りです。
ドライバ/サービスのタイプ レジストリ カーネルモードドライバ 0x01 ファイルシステム関連のカーネルドライバ 0x02 ネットワークアダプタ関連 0x04 スタンドアロンプロセスとして起動されるWin32 サービス 0x10 メモリ空間を共有可能なWin32 サービス 0x20
参考:各OSのサービス/デバイスに関するレジストリ値
Windows Server 2012 R2のサービス/ドライバのレジストリ値
Windows Server 10のサービス/ドライバのレジストリ値
Windows Server 2008 R2のサービス/ドライバのレジストリ値
Windows 7のサービス/ドライバのレジストリ値