whitefox HOME | イベントログ概要 | ログ監視 | ログ保存 | ログ管理 | ログ分析 | ファイル監査


Windows イベントログが表示される仕組み レジストリとメッセージDLL

イベントログ概要 : 2009.09.11 Friday


イベントIDに関する説明が見つかりませんでした

イベントログを 名前をつけて保存して 別のコンピュータで見ると イベントログの説明に「イベントIDに関する説明が見つかりませんでした。」とか「The description for Event ID 'xxxx' in Source 'YYYY' cannot be found. 」なんていう長ったらしい文章が表示されてしまいます。また 独自のアプリケーションプログラムで イベントログを登録していると 同様なメッセージが表示されることもあります。

なぜ このような現象がおきるのか?・・・ここでは イベントログの説明が表示される仕組みについて解説します。

イベントログの説明が表示される仕組み

イベントログの説明は
イベントビューア(イベントログを表示するプログラム)」が
イベントログ データ」を元に
OSの一部」を呼び出して
レジストリ」を参照して
メッセージDLL」を呼び出して
表示用の文字列」を取得して
表示しています。

イベントビューアは Windowsが標準で提供する イベントログを表示、検索するためのプログラムで [スタート]→[管理ツール]→[イベントビューア]で表示できます。

イベントログ データは イベントビューアで [アプリケーション]を右クリックして [プロパティ]をクリックすると 「ログの名前」表示されるEVT形式ファイルとも呼ばれる バイナリ形式のファイル「C:¥WINDOWS¥system32¥config¥AppEvent.Evt」です。 バイナリファイルなので イベントビューアで「ログを開く」でアタッチすると表示はできますが 他のアプリケーションでは見ることはできません。

OSの一部は・・・なんでしょう(笑)・・・services.exeでしょうか、.NET Frameworkのクラスライブラリでしょうか。

レジストリ
HKEY_LOCAL_MACHINE¥SYSTEM¥CurrentControlSet¥Services¥EventLog¥
Application、System、Securityの下に イベントソースと同一のキーがあります。
例えば Systemの下の AlerterというWindowsサービスプログラムのキーを見ると
REG_EXPAND_SZ(展開可能な文字列値)の「EventMessageFile」というキーがあります。

EventMessageFileには 「%SystemRoot%¥System32¥netmsg.dll」という値が設定されています。
これが「メッセージDLL」と呼ばれるものです。
つまり イベントソースごとにメッセージDLLというものがあり、イベントIDごとにメッセージが変換されるという仕組みです。

プログラムで、この文字列を取得して WIN32APIのExpandEnvironmentStrings関数を使用して 通常の文字列に変換します。
具体的には 「%SystemRoot%¥System32¥netmsg.dll」が「C:¥WINDOWS¥system32¥netmsg.dll」に変換されます。
変換したものが物理的なメッセージDLLのフルパスなので、そのメッセージDLLを WIN32APIのLoadLibraryEx関数を使用して、メモリ上にロードして、FormatMessage関数を使って イベントIDに対応したメッセージ(イベントログの説明=表示用の文字列)を取得します。


それで そもそもの疑問に立ち戻ると...
イベントログが発生したコンピュータには メッセージDLLが登録されているけど
別コンピュータには メッセージDLLがないので
きちんとイベントログの説明が表示できない
というのが答えです。

サーバーなどの物理的な構成やサーバーアプリケーションがまるっきり同じ構成であれば
他のサーバーで起きたイベントログは きちんと表示できます。

サーバー構成が異なっていてもイベントビューアで 「別のコンピュータへ接続」すれば
イベントログが発生しているサーバーには メッセージDLLがあるのできちんと表示できます。




お役立ちリンク
あなたのサーバー動いていますか? |  ログを採るだけで満足? |  イベントログ ツールズ |  Windows Vista/7/2008イベントログ |  SQL Server Express管理 | 
SharePoint 2010 Tips |  Windows Server サポート終了日

ライセンス購入・保守契約
製品購入 |  保守契約 |  FAQ |  お問合せ |  サイトマップ