/////////////////////////////////////////////////////////////////////////////// // // File Name // EventLogger.CPP // // Description // // Revision: 2.01 // // Copyright (c) 1996-1999 Acotec, Inc. // All rights reserved. // // // Portions Copyright (c) 1999 Microsoft Corporation. All rights reserved. // #include "EventLogger.h" /////////////////////////////////////////////////////////////////////////////// // CEventLogger::CEventLogger() // // Parameters // // Purpose // // Return Value // CEventLogger::CEventLogger() { InitializeCriticalSection (&m_csObj); m_hEventLog = NULL; m_wServiceCategory = 0; m_LoggingLevel = LOGGING_LEVEL_1; m_hLogMutex = NULL; m_fLogEvent = TRUE; m_hMsgSource = NULL; ZeroMemory (m_szCat, sizeof(m_szCat)); } /////////////////////////////////////////////////////////////////////////////// // CEventLogger::CEventLogger() // // Parameters // // Purpose // // Return Value // CEventLogger::CEventLogger(LPTSTR szEventSource, WORD wEventsCategory) { CEventLogger(); InitEventLog (szEventSource, wEventsCategory); } /////////////////////////////////////////////////////////////////////////////// // CEventLogger::~CEventLogger() // // Parameters // // Purpose // // Return Value // CEventLogger::~CEventLogger() { if (m_hLogMutex) { CloseHandle (m_hLogMutex); } if (m_hEventLog) { DeregisterEventSource (m_hEventLog); } DeleteCriticalSection (&m_csObj); } /////////////////////////////////////////////////////////////////////////////// // CEventLogger::InitEventLog() // // Parameters // // Purpose // // Return Value // DWORD WINAPI CEventLogger::InitEventLog (LPTSTR szEventSource, WORD wEventsCategory, LPTSTR szRegKey) { EnterCriticalSection (&m_csObj); if (m_hEventLog) { DeregisterEventSource (m_hEventLog); m_hEventLog = NULL; } m_wServiceCategory = wEventsCategory; m_LoggingLevel = LOGGING_LEVEL_1; HKEY hKey; DWORD dwValue=LOGGING_LEVEL_1, dwError = 0, dwSize = sizeof(DWORD); m_hEventLog = RegisterEventSource (NULL, szEventSource); if (!m_hEventLog) { dwError = GetLastError(); m_LoggingLevel = LOGGING_LEVEL_0; } else if (szRegKey && ERROR_SUCCESS == (dwError=RegOpenKeyEx (HKEY_LOCAL_MACHINE, szRegKey, 0, KEY_READ, &hKey))) { dwError=RegQueryValueEx (hKey, REGVAL_LOGGING_LEVEL, NULL, NULL, (LPBYTE)&dwValue, &dwSize); if(ERROR_SUCCESS == dwError ) { if (dwValue > (DWORD)LOGGING_LEVEL_3) { dwValue = (DWORD)LOGGING_LEVEL_3; } m_LoggingLevel = (LOGLEVEL)dwValue; } RegCloseKey (hKey); } LeaveCriticalSection (&m_csObj); return dwError; } /////////////////////////////////////////////////////////////////////////////// // CEventLogger::SetLoggingLevel() // // Parameters // // Purpose // // Return Value // void WINAPI CEventLogger::SetLoggingLevel (LOGLEVEL NewLoggingLevel) { EnterCriticalSection (&m_csObj); m_LoggingLevel = NewLoggingLevel; LeaveCriticalSection (&m_csObj); } /////////////////////////////////////////////////////////////////////////////// // CEventLogger::LogEvent() // // Parameters // // Purpose // // Return Value // void WINAPI CEventLogger::LogEvent (LOGTYPE Type, DWORD dwEventID, DWORD dwData, LPCTSTR rgszMsgs[], WORD wCount, DWORD cbData, LPVOID pvData) { if (LOGGING_LEVEL_0 == m_LoggingLevel && LOGTYPE_FORCE_ERROR != Type && LOGTYPE_FORCE_WARNING != Type && LOGTYPE_FORCE_INFORMATION != Type) { return; } if (!m_fLogEvent) return; TCHAR szBuffer[64]; LPCTSTR rgszError[] = { szBuffer }; LPTSTR pszType; WORD wEventType; switch (Type) { case LOGTYPE_ERR_CRITICAL : case LOGTYPE_FORCE_ERROR : pszType = _T("ERROR"); wEventType = EVENTLOG_ERROR_TYPE; if (NULL == rgszMsgs) { _stprintf (szBuffer, _T("%d"), dwData); rgszMsgs = rgszError; wCount = 1; } break; case LOGTYPE_ERR_WARNING : if (m_LoggingLevel < LOGGING_LEVEL_2) { return; } case LOGTYPE_FORCE_WARNING : pszType = _T("WARNING"); wEventType = EVENTLOG_WARNING_TYPE; if (dwData && NULL == rgszMsgs) { _stprintf (szBuffer, _T("%d"), dwData); rgszMsgs = rgszError; wCount = 1; } break; case LOGTYPE_AUDIT_SECURITY_ACCESS : case LOGTYPE_AUDIT_SECURITY_DENIED : pszType = _T("SECURITY"); case LOGTYPE_INFORMATION : if (m_LoggingLevel < LOGGING_LEVEL_3) { return; } case LOGTYPE_FORCE_INFORMATION : switch (Type) { case LOGTYPE_AUDIT_SECURITY_ACCESS : wEventType = EVENTLOG_AUDIT_SUCCESS; break; case LOGTYPE_AUDIT_SECURITY_DENIED : wEventType = EVENTLOG_AUDIT_FAILURE; break; case LOGTYPE_FORCE_INFORMATION : case LOGTYPE_INFORMATION : wEventType = EVENTLOG_INFORMATION_TYPE; pszType = _T("INFORMATION"); break; } break; case LOGTYPE_VERBOSE : case LOGTYPE_VERBOSE_ERROR : case LOGTYPE_VERBOSE_WARNING : if (m_LoggingLevel < LOGGING_LEVEL_3) { return; } if ((LOGTYPE_VERBOSE_ERROR == Type || LOGTYPE_VERBOSE_WARNING == Type) && dwData && NULL == rgszMsgs) { _stprintf (szBuffer, _T("%d"), dwData); rgszMsgs = rgszError; wCount = 1; } switch (Type) { case LOGTYPE_VERBOSE : wEventType = EVENTLOG_INFORMATION_TYPE; pszType = _T("V_INFORMATION"); break; case LOGTYPE_VERBOSE_ERROR : wEventType = EVENTLOG_ERROR_TYPE; pszType = _T("V_ERROR"); break; case LOGTYPE_VERBOSE_WARNING : wEventType = EVENTLOG_WARNING_TYPE; pszType = _T("V_WARNING"); break; } break; default : return; } if (m_hEventLog) { ReportEvent (m_hEventLog, wEventType, m_wServiceCategory, dwEventID, NULL, wCount, cbData, rgszMsgs, pvData); } }