windows-nt/Source/XPSP1/NT/ds/netapi/svcdlls/upssvc/upsexe/eventlog.c
2020-09-26 16:20:57 +08:00

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