Source code of Windows XP (NT5)
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.
|
|
/* 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
|