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.
113 lines
3.3 KiB
113 lines
3.3 KiB
/* 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 (_theUpsEventLogger == NULL) {
|
|
return(FALSE);
|
|
}
|
|
|
|
|
|
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
|