Hatena::ブログ(Diary)

サーバー管理者日誌 このページをアンテナに追加 RSSフィード

2004.3.1 (Mon) 何してるんだか・・・

Event Log のバイナリ解析とか。

Header
30 00 00 00 4c 66 4c 65 01 00 00 00 01 00 00 00
30 00 00 00 %1 %1 %1 %1 %2 %2 %2 %2 01 00 00 00
%3 %3 %3 %3 00 00 00 00 FF FF FF FF 30 00 00 00

Footer
28 00 00 00 11 11 11 11 22 22 22 22 33 33 33 33
44 44 44 44 30 00 00 00 %1 %1 %1 %1 %2 %2 %2 %2
%4 %4 %4 %4 28 00 00 00

%1 全体のデータ容量-フッターのデータ容量
%2 データ件数+1
%3 データ容量
%4 (イベント ログの記録あり/なし?)
 なし…0x 00 00 00 00
 あり…0x 00 00 00 01

Data
%0 %0 %0 %0 4c 66 4c 65 01 00 00 00 %1 %1 %1 %1
%2 %2 %2 %2 %3 %3 %7 %7 %8 %8 %9 %9 %6 %6 00 00
00 00 00 00 %b %b %b %b %d %d %d %d %c %c %c %c
00 00 00 00 %e %e %e %e [%4]  __ __ [%5]  __ __
[%a]  __ __ [%f]  __ __ 00 00 00 00 %0 %0 %0 %0

%0 Data 項目のバイト数
%1 記録開始時間?
%2 記録終了時間?
%3 イベント ID
%7 あやしいデータ (もうすこし解析する)
%8 種類
 0x0002: 警告
 0x0004: 情報
%9 引数の個数
%6 分類
%b Data 項目先頭バイトから数えてユーザー SID の終了位置まで
%d ユーザー SID サイズ (4 byte 刻み?)
%c Data 項目先頭バイトから数えてコンピュータの終了位置まで
%e Data 項目先頭バイトから数えて引数の終了位置まで
%4 ソース       xx 00 xx 00 xx 00 ... (00 00)
%5 コンピュータ xx 00 xx 00 xx 00 ... (00 00)
%a ユーザー SID
 NT AUTHORITY\SYSTEM: 01 01 00 00 00 00 00 05 12 00 00 00
  (実際の SID: S-1-1-18)
 N/A: データなし
%f 引数

イベント ログの記録の仕組み

RegisterEventSource (Microsoft) の関数を呼び出して、イベント ソースから登録済みハンドルを呼び出します。

次に、ReportEvent (Microsoft) という関数を使って、登録済みハンドルに該当するイベント ログを書き込みます。

最後に、DeregisterEventSource (Microsoft) を使って登録済みハンドルの開放を行ないます。

サンプル プログラムはこんな感じになります。

イベント ログ ファイルには、ReportEvent 関数の引数で使用した情報しか記録されません。具体的なメッセージは、NTイベントログに、任意のソースで任意のイベントIDのメッセージを出力する (monyo.com) にあるようなレジストリに指定されている DLL ファイルが保持しています。

また、イベント ID が一致すれば表示されるメッセージと、そうでないものがあるようです。

というわけで、嵌ってるのはまさにここなんですけどね。どうも Category が一致しないと表示できないとのことなので、Category も指定できるように、わざわざもにょ先生に logwrite.exe 修正してもらったのに、未だ解決しないのです。情けない。(泣

他に何を指定すればいいんだろうか???

monyomonyo 2004/03/03 01:29 すみません。その後わたしのところでも、どうやってもイベントログにきれいに出力されない事象がでてしまって、解析しないとと思ってるんですが……。手が遅くてすみませんですm(_:”_)m

yamanyonyamanyon 2004/03/03 12:21 いえいえ。きっと何かもっと必要な情報があるのでしょうね。こちらもバイナリで相違点など追いかけてみますので、よろしくです。

Connection: close