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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.87630 の関連記事表示

<< 0 >>
■87630  イベントログの検出処理で取得したイベントIDがおかしい
□投稿者/ Crow -(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によって結果が違うのも困っています。

    なにかアドバイスを頂けないでしょうか?
親記事 /過去ログ150より / 関連記事表示
削除チェック/

■87631  Re[1]: イベントログの検出処理で取得したイベントIDがおかしい
□投稿者/ とっちゃん -(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 プロパティを見ればいいと思います。

記事No.87630 のレス /過去ログ150より / 関連記事表示
削除チェック/

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

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


記事No.87630 のレス / END /過去ログ150より / 関連記事表示
削除チェック/

■87635  Re[3]: イベントログの検出処理で取得したイベントIDがおかしい
□投稿者/ とっちゃん -(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
記事No.87630 のレス / END /過去ログ150より / 関連記事表示
削除チェック/

■87636  Re[4]: イベントログの検出処理で取得したイベントIDがおかしい
□投稿者/ Crow -(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
    >
記事No.87630 のレス /過去ログ150より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -