イベントログが表示される仕組み
イベントログを 名前をつけて保存して 別のコンピュータで見ると イベントログの説明に「イベント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があるので きちんと表示できます。
イベントログ詳細の調べ方
イベントログ
概要
監査
書込み
表示の仕組み
調べ方

まだ増え続けるPCをExcelで管理しますか?

あなたのサーバーは本当に動いていますか?
都合と時給にこだわる アルバイト厳選サイト 【anセレクト】
弁護士選びの決定版!!弁護士ドットコム



