You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
275 lines
7.6 KiB
275 lines
7.6 KiB
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// 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);
|
|
}
|
|
}
|
|
|