110 lines
3.1 KiB
C
110 lines
3.1 KiB
C
|
/* Copyright 1999 American Power Conversion, All Rights Reserved
|
||
|
*
|
||
|
* Description:
|
||
|
* The file implements EventLogger. The EventLogger is reponsible
|
||
|
* for logging information to the NT machine's System Event Log.
|
||
|
*
|
||
|
*
|
||
|
* Revision History:
|
||
|
* sberard 29Mar1999 initial revision.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#include "eventlog.h"
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
static HANDLE _theUpsEventLogger = NULL;
|
||
|
|
||
|
|
||
|
/**
|
||
|
* LogEvent
|
||
|
*
|
||
|
* Description:
|
||
|
* This function is responsible for logging information to the NT machine's
|
||
|
* System Event log. The Event to log is specified by the parameter
|
||
|
* anEventId, which is defined in the file lmerrlog.h. The anInfoStr
|
||
|
* parameter is used to specify additional information to be merged with
|
||
|
* the Event message.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* anEventId - the id of the Event to log
|
||
|
* anInfoStr - additional information to merge with the message
|
||
|
* or NULL if there is no additional information.
|
||
|
* anErrVal - the error code as reported by GetLastError().
|
||
|
*
|
||
|
* Returns:
|
||
|
* TRUE - if the Event was logged successfully
|
||
|
* FALSE - if there was an error logging the Event
|
||
|
*
|
||
|
*/
|
||
|
BOOL LogEvent(DWORD anEventId, LPTSTR anInfoStr, DWORD anErrVal) {
|
||
|
BOOL ret_val = FALSE;
|
||
|
WORD event_type; // type of event
|
||
|
LPTSTR info_strings[1]; // array of strings to merge with the message
|
||
|
WORD num_strings; // count of insertion strings
|
||
|
LPTSTR *ptr_strings; // pointer to array of insertion strings
|
||
|
DWORD data_size; // count of data (in bytes)
|
||
|
LPVOID ptr_data; // pointer to data
|
||
|
|
||
|
if (_theUpsEventLogger == NULL) {
|
||
|
_theUpsEventLogger = RegisterEventSource(NULL, SZSERVICENAME);
|
||
|
}
|
||
|
|
||
|
|
||
|
if (anEventId > ERRLOG_BASE) {
|
||
|
event_type = EVENTLOG_WARNING_TYPE;
|
||
|
}
|
||
|
else {
|
||
|
event_type = EVENTLOG_ERROR_TYPE;
|
||
|
}
|
||
|
|
||
|
// If the error value is anything other than ERROR_SUCCESS, add it
|
||
|
// to the Event
|
||
|
if (anErrVal == ERROR_SUCCESS) {
|
||
|
ptr_data = NULL;
|
||
|
data_size = 0;
|
||
|
} else {
|
||
|
ptr_data = &anErrVal;
|
||
|
data_size = sizeof(anErrVal);
|
||
|
}
|
||
|
|
||
|
// Append any additional strings to the Event message.
|
||
|
if (anInfoStr == NULL) {
|
||
|
ptr_strings = NULL;
|
||
|
num_strings = 0;
|
||
|
} else {
|
||
|
info_strings[0] = anInfoStr;
|
||
|
ptr_strings = info_strings;
|
||
|
num_strings = 1;
|
||
|
}
|
||
|
|
||
|
// Log the Event to the System Event log
|
||
|
if (ReportEvent(
|
||
|
_theUpsEventLogger, // handle
|
||
|
event_type, // event type
|
||
|
0, // event category,
|
||
|
anEventId, // message id
|
||
|
NULL, // user id
|
||
|
num_strings, // number of strings
|
||
|
data_size, // number of data bytes
|
||
|
ptr_strings, // array of strings
|
||
|
ptr_data // data buffer
|
||
|
)) {
|
||
|
ret_val = TRUE;
|
||
|
}
|
||
|
else {
|
||
|
// an error occured, return FALSE
|
||
|
ret_val = FALSE;
|
||
|
}
|
||
|
|
||
|
return ret_val;
|
||
|
}
|
||
|
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|