2012年12月6日木曜日

EventLog の InstanceId とかイベントIDとか

Windows の EventLog でイベントIDをエラーコードのようにして
メッセージは別ファイルで管理とかしてみたく調べたら、まぁいろいろ
Web に情報はあり、mc.exe と rc.exe を使えば人間が書いた定義を 
コンパイルしてくれることはわかった。

しかしながら、.Net の EventLog.WriteEvent() の引数である
EventInstance クラスに指定する instanceId 所謂イベントID
mc ファイルに書く MessageId は全部イコールかと思ったら違っ
てた。おそらくイベントID と MessageId は同じ。

じゃ instanceId はなんだろうと思うと、mc.exe でできたヘッダ
ファイルに親切なコメントがあった。 以下の通り
結局 instanceId の下位 16bit がイベントIDということ。

以下の「R」は予約されていてよくわからんが常に 0 の模様。
「C」は customer bit というものらしいがようわからん。
MS が作ったもの以外はビット立てろということ?まぁ、mc.exe の -c 
でこのビットを立てれられるらしいが…よくわからん。


//  Values are 32 bit values laid out as follows:
//
//   3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
//   1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
//  +---+-+-+-----------------------+-------------------------------+
//  |Sev|C|R|     Facility          |               Code            |
//  +---+-+-+-----------------------+-------------------------------+
//
//  where
//
//      Sev - is the severity code
//
//          00 - Success
//          01 - Informational
//          10 - Warning
//          11 - Error
//
//      C - is the Customer code flag
//
//      R - is a reserved bit
//
//      Facility - is the facility code
//
//      Code - is the facility's status code

0 件のコメント:

コメントを投稿