概要
イベントログに、サービスの開始と終了を表す7036が大量に記録されるというものです。
環境によっては7042も記録される場合があります。
とりあえず解決したい
- 以下の内容のregファイルをインポートする
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ScEvents]
"7036"=dword:00000000
"7042"=dword:00000000
- 管理者権限のコマンドプロンプトまたはPowerShellでregコマンドを使用する
>reg add HKLM\SYSTEM\CurrentControlSet\Control\ScEvents /v 7036 /t REG_DWORD /d 0 /f
>reg add HKLM\SYSTEM\CurrentControlSet\Control\ScEvents /v 7042 /t REG_DWORD /d 0 /f
この作業を行った後に再起動すると反映されます。
どうしてこうなるの?
Windows Vistaや同系統のWindows Server 2008から実装されたもので、サービスの起動や終了のたびに逐次その旨をイベントログに記録していく仕様が追加されたものです。
本来であればWindows Server 2008以降のServer系エディションでのみ記録されるようになっています。
しかし、インターネットで検索したところWindows 7などClient系エディションでもServer系エディションと同じくサービスの起動と終了ログが大量に記録される事例1が散見されました。
サービスの起動と終了のログって?
- イベントソースがService Control Manager
- IDが7036または7042
これらのログの事を指します。
7036はサービスの動作状態の変更
サービス側のSetServiceStatus
APIによって動作状態が変更されたことを表します。
7042はサービスの動作状態を変更する要求
管理コンソールのサービススナップインからの操作やnet start service
、net stop service
など、サービス外のControlService
APIによって停止や再起動の要求がなされたことを表します。
解決方法は?
冒頭のレジストリ編集で解決できます。
また、応用として、IDが7000番台のイベントログを有効化することも出来ます。
有効化は単にDWORD値を0から1にするだけです。
動作のメカニズムについて
システムの起動時、正確にはサービスを管理するプロセスservices.exe
が起動されたときに、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ScEvents
を参照し、ScEvents
の中にある全ての値をスキャンします。
スキャン中に以下の条件を満たす値があればその値をチェックします。
- 値の名前がイベントIDの10進表記
- 7000番台
- 値のサイズが4バイト(※4バイトの値であればどの型でもかまいませんが、通常はDWORD値です)
その値が1になっていれば、該当するイベントIDが記録されます。
0であれば抑制するようになります。
このスキャン処理は初期化段階で一度だけ呼ばれるのみで、以降は再起動されるまでその状態を維持します。
したがって、ScEvents
の内容を変更した場合は再起動しなければなりません。
何故この記事を書いたのか
以前にツイッター2で解決方法を掲載したのだが、一年経っても検索結果に現れず。
希少な事象ほど検索しても見つかりにくいという事なのだろうか。
インターネットの検索結果1で解決策を調べようとしても、ID:7036はエラーや警告では無いから無視してもいいだとか、それならまだマシな方。
検索結果のリンクを一つ一つチェックしていたところ、何か適当なことでも書いておけばいいだろう精神で量産されたであろう記事3が検索結果のトップに近い位置に出てきた。
確認したのだが、さんざん無関係なトラブルシューティング手順をダラダラと書き並べ、剰え『まだ直りませんか?修復ツールをダウンロードして実行します』で締めくくられていて、問題を解決させる気が無い記事に失望した。
真面目に困っている人に失礼だ、というのがこの記事を書いた目的です。
-
Event ID 7036: What Does It Mean & How to Fix It - windowsreport.com/event-id-7036/ ※読むだけ時間の無駄なのでリンクは張りません ↩