C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

イベントログの検出処理で取得したイベントIDがおかしい

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■87630 / inTopicNo.1)  イベントログの検出処理で取得したイベントIDがおかしい
  
□投稿者/ Crow (1回)-(2018/06/14(Thu) 19:05:56)

分類:[C#] 

2018/06/14(Thu) 19:07:02 編集(投稿者)
2018/06/14(Thu) 19:06:59 編集(投稿者)

はじめまして
dobon.netさんのサンプルソースを使用していくつかのイベントログを取得する予定で以下のように
ttps://dobon.net/vb/dotnet/system/eventlogentrywritten.html

VS2015 C# .net4.5.2 any CPUで設計しました。


private void Form1_Load(object sender, EventArgs e)
{
//EventLogオブジェクトの作成
System.Diagnostics.EventLog elog = new System.Diagnostics.EventLog();

//コンピュータ名を指定する
//指定しないとローカルコンピュータとなる
elog.MachineName = ".";
//ログの名前を指定する
//指定しないと"Application"となる
elog.Log = "Application";

//EntryWrittenイベントを受信するようにする
FC_elog.EnableRaisingEvents = true;
//イベントハンドラがフォームを作成したスレッドで実行されるようにする
FC_elog.SynchronizingObject = this;
//EntryWrittenイベントハンドラを追加する
FC_elog.EntryWritten +=
new System.Diagnostics.EntryWrittenEventHandler(elog_EntryWritten);

}



private void elog_EntryWritten(
object sender, System.Diagnostics.EntryWrittenEventArgs e)
{
long id = e.Entry.InstanceId;//イベントIDを保存

if ((id == 2014) || (id == 1015) || (id == 1007))
{
//任意の処理
}
else
{
//それ以外の処理(デバッグ用)
}
}

として作ってみました。
このプログラムを作っているVS2015が入っているノートパソコン (Windows10 Pro )では
予定しているイベントも含め問題なくイベントIDを発生の都度、取得できました。
しかし、他のPCに当該PGをコピーして実行してみるとイベント発生時に上記ソースの「その他の処理(デバッグ用)」が行われました。
じゃあ何のIDによるイベント発生なんだろう?と調査してみると、
たとえば
ID=2014を予定していたイベントは
2147485662という値が入っていました。 HEXにすると800007DEです。 下位の「7DE」は10進数にすると2014です。

ID=1015を予定していたイベントは
1073742839という値が入っていました。 HEXにすると400003F7です。 下位の「3F7」は10進数にすると1015です。
なぜか+80000000や+40000000の値が入っていることが判明しました。
他のイベントも皆同じでした。
まったくでたらめな値ではなく符号等?オーバーフロー?が関係しそうな意味ありげな数値になる理由がわからず困っています。
また、PCによって結果が違うのも困っています。

なにかアドバイスを頂けないでしょうか?
引用返信 編集キー/
■87631 / inTopicNo.2)  Re[1]: イベントログの検出処理で取得したイベントIDがおかしい
□投稿者/ とっちゃん (496回)-(2018/06/14(Thu) 19:24:15)
No87630 (Crow さん) に返信
> しかし、他のPCに当該PGをコピーして実行してみるとイベント発生時に上記ソースの「その他の処理(デバッグ用)」が行われました。
> じゃあ何のIDによるイベント発生なんだろう?と調査してみると、
> たとえば
> ID=2014を予定していたイベントは
> 2147485662という値が入っていました。 HEXにすると800007DEです。 下位の「7DE」は10進数にすると2014です。
>
> ID=1015を予定していたイベントは
> 1073742839という値が入っていました。 HEXにすると400003F7です。 下位の「3F7」は10進数にすると1015です。
> なぜか+80000000や+40000000の値が入っていることが判明しました。
> 他のイベントも皆同じでした。
> まったくでたらめな値ではなく符号等?オーバーフロー?が関係しそうな意味ありげな数値になる理由がわからず困っています。
> また、PCによって結果が違うのも困っています。
>
> なにかアドバイスを頂けないでしょうか?

https://msdn.microsoft.com/ja-jp/library/system.diagnostics.eventlogentry.instanceid(v=vs.110).aspx

の備考欄に書かれていますが、最上位2ビット(0x80000000 と 0x40000000)は別の意味を持つフラグビットになっています。
なので、IDを取得する場合は最上位2ビットをマスクして取得する必要があります。

単純にIDの一致を確認するなら、EventID プロパティを見ればいいと思います。


引用返信 編集キー/
■87633 / inTopicNo.3)  Re[2]: イベントログの検出処理で取得したイベントIDがおかしい
□投稿者/ Crow (2回)-(2018/06/15(Fri) 09:55:51)
回答ありがとうございます。
「最上位2ビットをマスクして取得する」
こんな感じで問題なく取得できました。
var id = e.Entry.InstanceId & 0x3FFFFFFF;
解決しました。お礼申し上げます。

今回、PCによって違いがあった上位2bitは何の値なのでしょうかね〜・・・



解決済み
引用返信 編集キー/
■87635 / inTopicNo.4)  Re[3]: イベントログの検出処理で取得したイベントIDがおかしい
□投稿者/ とっちゃん (498回)-(2018/06/15(Fri) 10:33:11)
No87633 (Crow さん) に返信
> 今回、PCによって違いがあった上位2bitは何の値なのでしょうかね〜・・・
>
リファレンスを見ると出てくると思いますが、
メッセージコンパイラのフラグ値のはずです。

winerror.h くらいしか今はないのかなぁ?という感じですが

最上位2ビットで
// 00 - Success
// 01 - Informational
// 10 - Warning
// 11 - Error
の4つの状態を表現しているはず(で、あってたはず...)。

詳しくは、Windows Events のリファレンスをきちんと読むという方向でお願いしたいと思います。
ちょこっと説明レベルはあからさまに超えてるんで

ということでリファレンスのトップを張っておきます。

・Windows Events
https://msdn.microsoft.com/en-us/library/windows/desktop/aa964766(v=vs.85).aspx

解決済み
引用返信 編集キー/
■87636 / inTopicNo.5)  Re[4]: イベントログの検出処理で取得したイベントIDがおかしい
□投稿者/ Crow (3回)-(2018/06/15(Fri) 11:13:09)
引き続きの回答ありがとうございます。
勉強してみますね。


No87635 (とっちゃん さん) に返信
> ■No87633 (Crow さん) に返信
>>今回、PCによって違いがあった上位2bitは何の値なのでしょうかね〜・・・
>>
> リファレンスを見ると出てくると思いますが、
> メッセージコンパイラのフラグ値のはずです。
>
> winerror.h くらいしか今はないのかなぁ?という感じですが
>
> 最上位2ビットで
> // 00 - Success
> // 01 - Informational
> // 10 - Warning
> // 11 - Error
> の4つの状態を表現しているはず(で、あってたはず...)。
>
> 詳しくは、Windows Events のリファレンスをきちんと読むという方向でお願いしたいと思います。
> ちょこっと説明レベルはあからさまに超えてるんで
>
> ということでリファレンスのトップを張っておきます。
>
> ・Windows Events
> https://msdn.microsoft.com/en-us/library/windows/desktop/aa964766(v=vs.85).aspx
>
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ