2017-12-17 15 views
0

旧コード:if (eventArguments.Entry.EventID == 1074)EventIDでのキャスト(Uint16)(廃止予定)が有効かどうかをテストしますか?

EventIDは推奨されていません。 thisによると、私はこれにそれを変更することができます

(UInt16)eventArguments.Entry.InstanceId == 1074 

に私はこれをテストするコンソールアプリケーションを作成しようとしています。誰か助けてくれ、助けてくれますか?

編集 - ここまで私がこれまで持っていたことは十分だと思いますか?

  Dictionary<string, EventLog> logList = new Dictionary<string, EventLog>(); 
     foreach (EventLog log in EventLog.GetEventLogs()) 
      logList.Add(log.LogDisplayName, log); 

     foreach (EventLogEntry entry in logList["Application"].Entries) 
     { 
      long instanceID = entry.InstanceId; 
      long eventID = entry.EventID; 
      long calculatedEventID = entry.InstanceId & 0x3fffffff; 
      //long calculatedEventID = (UInt16)entry.InstanceId; 
      if (eventID != calculatedEventID) 
       Console.WriteLine("{0}, {1}, {2}", eventID, instanceID, calculatedEventID); 
      else 
      { 
       Console.WriteLine("calculatedEventID is {0} ", calculatedEventID); 
      } 
     } 
+1

、あなたの質問は正確には何ですか? – Heinzi

+0

@ Christian.K私は質問を編集しました。 1074のときの(Uint16)のキャストで、EventIDがInstanceIdと同じであることをどのように証明できますか? – TDeoodfig

答えて

1

あなたが探している結果を保証するために、あなたはこれを必要があります

if (eventArguments.Entry.InstanceId & 0x3FFFFFFF == 1074) 

あなたはこれを見つけるために.NET Framework Sourceを閲覧することができます。具体的には、here'sEventLogEntryのソースコードです。これはEventIDプロパティのコードです:

public int EventID { 
    get { 
     // Apparently the top 2 bits of this number are not 
     // always 0. Strip them so the number looks nice to the user. 
     // The problem is, if the user were to want to call FormatMessage(), 
     // they'd need these two bits. 
     return IntFrom(dataBuf, bufOffset + FieldOffsets.EVENTID) & 0x3FFFFFFF; 
    } 
} 

ここInstanceIdためのコードです:

だから、
public Int64 InstanceId { 
    get { 
     return (UInt32)IntFrom(dataBuf, bufOffset + FieldOffsets.EVENTID); 
    } 
} 
+0

私は自分の質問を編集し、私がこれまでに持っていたコードを入れました。 IntFrom()から整数を作成する必要がありますか? EventIDとInstanceIdが同じかどうかを調べるためにeventArgumentsを設定する方法がわかりません。 – TDeoodfig

+0

あなたの質問は本当に明確ではありません。あなたが 'InstanceId'を' UInt16'にキャストすると 'EventID'が得られることを証明しようとしているなら、それはできないので停止することができます。それがあなたに与えるのは、 'InstanceId'の最低16ビットです。 'InstanceId&0x3fffffff'を使って、' EventID'のゲッターと同じコードであるため、以前は廃止された 'EventID'が使用されたという結果が得られたことを証明しようとしていれば、停止することができます。要するに、私はここに何か証明するものはないと思う。あなたの意見を忘れてしまったら教えてください。 –

+0

"eventArguments.Entry.EventID == 1074"の代わりのコードを検索しようとしています。だから、私は "(eventArguments.Entry.InstanceId&0x3fffffff)== 1074"が動作すると思います。正しい? – TDeoodfig

関連する問題