2011. 7. 20. 17:15

Window Event Log(윈도우 이벤트 로그) 읽기

필요에 따라서는 윈도우의 Event Log를 확인해야 할 경우가 있습니다.
보통, 내컴퓨터->등록정보->관리에서 이벤트로그쪽이 해당된다고 볼 수 있습니다.
여러가지 인터넷에서 공유되는 Source등을 통합하여 하나의 쉬운 Class로 개발이 가능토록 하였습니다.

EventLogHelper.cpp

EventLogHelper.h

사용법은 아래와 같습니다.

 #include "EventLogHelper.h"
...
{
 CEventLogHelper::CArrayEventLog cArrayLog;
 CEventLogHelper::GetList(TEXT("Application"), cArrayLog");
 ...
 // CArray 형태인 cArrayLog를 사용한다.
 ...
 for (i=0; i<cArrayLog.GetCount(); i++)
 {
  cArrayLog[i].lpszSourceName;
  cArrayLog[i].lpszContents;
  ...
 }
 CEventLogHelper::RemoveAll(cArrayLog);
 ...
}

즉, 위에서와 같이 GetList와 RemoveAll 두개의 API만 사용하면 됩니다.

VOID
CEventLogHelper::GetList
IN LPCTSTR lpszSourceName
OUT CArrayEventLog& cArrayEventLog

Event Log를 가져옵니다.
가져올 Event Log Source Name 만을 받아들입니다.


즉, "응용 프로그램"인 경우 "Application"을 전달하면 됩니다.

그러면, CArrayEventLog 값을 채워줍니다. 물론, 시간이 오래 걸릴 수 있습니다.
해당 Array는 CArray 형태이며, CEventLogHelper::ST_EVENTLOG_NODE가 Node입니다.
해당 구조체에는, 시간, SourceName(정확히는 Publisher Name), Type, Category, EventId, User, Computer, 그리고 Contents를 가집니다.
해당 구조체의 값들은 위 그림에 있는 윈도우 이벤트 뷰어의 UI와 일맥 상통하니 직접 확인해 보시기 바랍니다.

VOID
CEventLogHelper::RemoveAll
IN OUT CArrayEventLog& cArray

GetList로 얻어진 Array를 Clear 시켜주는 함수입니다.

(ps)
GetList 함수 자체가 시간이 걸릴 수 있습니다.
함수를 따라가 보면 내부에 for (;;) Loop가 있는데, 조금 수정을 하면 Progress 정보등을 전달해 줄 수 있으리라 봅니다.