Windows イベント ログを読み取るコードがあります。OpenEventLog、ReadEventLog を使用して、イベント ソースとイベント ID を取得します。次に、以下のソースを検索します。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application
キーを使用して、リストされている内容に従って適切な DLL をロードしEventMessageFile
、最後に を使用FormatMessage
してイベント文字列をメッセージ DLL コンテンツとマージし、最終的なイベント メッセージ テキストを取得します。これは推奨される方法であり、少し面倒ですが、うまく機能します。
まで...ソースを調べてみると、EventMessageFile
ではなく、ProvideGuid
エントリがあることがわかりました。これは新しい方法のようです (Vista と Windows 2008 で表示されます)。うーん -- メッセージ テキストを検索し、データ文字列をマージするために FormatMessage に渡すものは何もありません
:(
レジストリで GUID を検索すると、他のファイル (HTTP ソースの場合は http.sys) への参照につながりますが、完全なメッセージ テキストを取得することはできません。EvtOpenSession
これらのAPIを使用する必要がありますか? EVENTLOGRECORD*
への呼び出しからReadEventLog
、およびサポートされていない Windows 2003 でソフトウェアを実行する必要があるという事実EvtOpenSession
(Vista および Windows 2008 でのみ使用可能) があるので、そうしないことを望んでいます。注: Vista の一部のソースには ProviderGUID があり、その他のソースには EventMessageFile があるため、古い方法も引き続き実行できます。
したがって、私が求めているのは、ProviderGuid を見て、完全なイベント ログ メッセージ テキストを表示するために FormatMessage に渡す必要がある DLL を取得する方法です。
ご意見ありがとうございます