ページ 11

イベントログ読み込み

Posted: 2010年7月17日(土) 11:08
by mufg
お世話になります。
イベントログの読み込み、表示アプリをつくっていて、2003server、XPなどでは動いていたのですが、
先日2008serverにポーティングしようとおもったら、


RegOpenKeyEx 関数で
"SYSTEM\\CurrentControlSet\\Services\\EventLog\\Security" 
のレジストリキーをオープンするところで、エラーが帰ってきてしまいました。

2008serverの場合、レジストリの場所がまったく異なるのでしょうか。

ご存知の方おられましたら、ご教示願います。

Re:イベントログ読み込み

Posted: 2010年7月17日(土) 11:27
by へろりくしょん
Windows server 2008 については全く分かりませんが。

"SYSTEM\\CurrentControlSet\\Services\\EventLog\\Security"のキーが存在しないのは確かな事なのですか?

一度GetLastError() にお伺いを立てて見ることをお勧めします。

Re:イベントログ読み込み

Posted: 2010年7月17日(土) 15:51
by YuO
なぜ,イベントログの読み込みにレジストリが関係するのか解りませんが……。

まずは,
MSDN: Windows Events (Windows)
http://msdn.microsoft.com/en-us/library/aa964766.aspx
の,
MSDN: Event Logging (Windows)
http://msdn.microsoft.com/en-us/library/aa363652.aspx

MSDN: Windows Event Log (Windows)
http://msdn.microsoft.com/en-us/library/aa385780.aspx
にあるAPIを使うという正規の方法で,読み込めないかどうかを確認してはどうでしょうか。

Re:イベントログ読み込み

Posted: 2010年7月17日(土) 18:55
by mila
RegOpenKeyEx関数でエラーが発生したときの詳細な情報はGetLastError関数では得られません。
RegOpenKeyEx関数の戻り値を確認してみてください。

Re:イベントログ読み込み

Posted: 2010年7月18日(日) 06:53
by へろりくしょん
>RegOpenKeyEx関数でエラーが発生したときの詳細な情報はGetLastError関数では得られません。

MSDNを読み返しました。 失礼いたしました。

Re:イベントログ読み込み

Posted: 2010年7月19日(月) 02:08
by ikara
勘違いでしたら申し訳ないのですが、
もしや下記サンプルを参考に作成していますか?

http://nienie.com/~masapico/api_sample_ ... g02_c.html

Win2008ではアプリケーションログ、システムログの取得は可能なのですが、
セキュリティのもののみ、メッセージフォーマットが保存されているdllのパスが
入っているキーがみつからないようですね。

本来ならEventMessageFileというキーに登録されているはずなのですが…。

※XPや2003では下記キーのパスが使用可能のようです。 
SYSTEM\\CurrentControlSet\\Services\\EventLog\\Security\\Security\\EventMessageFile

何か分かりましたら改めてコメントします。

APIの仕様より、win2008のレジストリキーの仕様を調べたほうがいいかもしれません。

Re:イベントログ読み込み

Posted: 2010年7月27日(火) 13:13
by ikara
解決しましたので、詳細です。

まず、イベントログのメッセージフォーマットDLLの場所ですが、
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\WINEVT\\Publishers\\"

上記レジストリに存在する{で始まるキーを全てをリストアップします。
各キーの既定キーがEVENTLOGRECORD構造体内のソース名と一致しますので、
それを元に欲しいキーを確定します。

既定キー以外にMessageFileNameというキーがあるのですが、
これの値にメッセージフォーマットDLLへのパスが入っています。

あとはWinXPなどと同様の機構でイベントログのメッセージフォーマットの取得が出来ます。

ただし、vistaやwin2008serverではマイクロソフト特有のバグがあり、
sp1ではセキュリティログのメッセージフォーマット問い合わせが動作しません。

sp2を当てると取得できるようになります。

Re:イベントログ読み込み

Posted: 2010年7月30日(金) 23:07
by ikara
解決済みにしておきます。