2017-12-17 14 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

: 여기 InstanceId에 대한 코드의

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; } } 

:이 EventID 속성에 대한 코드? – Heinzi

+0

@ Christian.K 나는 질문을 편집했다. 1074 일 때 (Uint16)의 캐스트로 EventID가 InstanceId와 동일하다는 것을 어떻게 증명할 수 있습니까? – TDeoodfig

답변

1

당신이 찾고있는 결과를 보장하기 위해, 당신이 필요합니다 :

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

이를 찾기 위해 .NET Framework Source를 검색 할 수 있습니다. 특히 here's의 소스 코드는 EventLogEntry입니다. 정확히 질문이 무엇인지, 그래서

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'에 대한 getter와 동일한 코드이기 때문에 지금은 사용되지 않는'EventID'가 사용 된 결과를 제공한다는 것을 증명하려고한다면, 멈출 수 있습니다. 간단히 말해서, 나는 여기에 증명할 것이 아무것도 없다고 생각합니다. 내가 너의 요점을 놓친다면 알려줘. –

+0

"eventArguments.Entry.EventID == 1074"에 대한 대체 코드를 찾으려고합니다. 그래서 "(eventArguments.Entry.InstanceId & 0x3fffffff) == 1074"하는 것이 효과가 있다고 생각합니다. 옳은? – TDeoodfig