読者です 読者をやめる 読者になる 読者になる

こけめも

メモみたいなもの

イベントログに出力される説明文を任意の文字列に変更する方法(Windows7編)

需要少ないと思うのでごく簡潔に。


イベントログの説明文を編集したい、もしくは自分でログ追加ため「説明が見つかりません」や「メッセージリソースは存在しますが、メッセージが文字列テーブル/メッセージ テーブルに見つかりません」と言われる時の対応方法です。




例えば、次のようなログの説明文を編集したい場合
・「サービス」ログ
・ソース「disk」
・イベントID「12241」(Qualifiers:1、EventID:12241=)


まずは、レジストリからソースに関連付けられたdllを調べます。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\System\disk
                                            ^^^^^^^^                ^^^^^

目印付けたところがポイントです。
今回は「サービス」ログのソース「disk」なので上のようなレジストリを調査します。


「アプリケーション」ログのソース「Outlook」なら次の通りです。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\Outlook


レジストリを見ると、EventMessageFileは「%SystemRoot%\System32\IoLogMsg.dll」となっています。
XPのころはこのdllにメッセージテーブルを持っていたのですが、Vista以降は変更が加わっています。


参考にしたのはこれ。
http://data.blogdns.net/2006/05/mui-on-vista/


「%SystemRoot%\System32\IoLogMsg.dll」であれば、「%SystemRoot%\System32\ja-jp\iologmsg.dll.mui」にメッセージリソースを持ちます。
後はこのファイルをリソースエディタで開いて、MessageTableのIDと説明文を登録します。


この時、IDはQualifiersの「1」とEventIDの「12241」=「0x2FD1」から、0x00012FD1となります。


編集を終えたら、iologmsg.dll.muiを置き換えて、イベントビューアー再起動。
私はシステムファイルの書き換えが面倒だったので、任意のフォルダにIoLogMsg.dllとja-jpフォルダ(iologmsg.dll.mui 込み)を置いて、レジストリのエントリーを任意フォルダのIoLogMsg.dllパスに書き換えました。


任意のイベントIDの追加はEventloggerが利用できます。
管理者権限でexe実行しておきましょう。
「アプリ名」に入力した文字列がログ上のソースとなります。
参考:http://www.atmarkit.co.jp/fwin2k/win2ktips/489evtout/evtout.html


リソースファイルの編集ですが、実はXP端末でXN Resource Editorを使用しました。
優秀なのにWindows7では正常に使えないんですよね…
Windows7で使える良いリソースエディタがあったら是非教えてください。

おまけ

diskキーをHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application に作成すると、ソース「disk」のログはアプリケーションログに出力される。
この変更を反映するには端末の再起動が必要っぽい。