//+------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1994. // // File: eventlog.cxx // // Contents: CEventLog class // // History: 07-Jun-94 DwightKr Created // //-------------------------------------------------------------------------- #include #pragma hdrstop #include #include #include #include #include //+------------------------------------------------------------------------- // // Member: CEventItem::CEventItem // // Synopsis: consturcts a CEventItem object. // // Arguments: [fType ] - Type of event // [fCategory] - Event Category // [eventId] - Message file event identifier // [cArgs] - Number of substitution arguments to be added // [cbData ] - number of bytes in supplemental raw data. // [data ] - pointer to block of supplemental data. // // History: 12-30-96 mohamedn raw data //-------------------------------------------------------------------------- CEventItem::CEventItem( WORD fType, WORD fCategory, DWORD eventId, WORD cArgs, DWORD dataSize, const void * data ) : _fType(fType), _fCategory(fCategory), _eventId(eventId), _cArgsTotal(cArgs), _pwcsData(0), _cArgsUsed(0), _dataSize(dataSize), _data(data) { _pwcsData = new WCHAR *[_cArgsTotal]; memset( _pwcsData, 0, sizeof(WCHAR *) * _cArgsTotal ); END_CONSTRUCTION(CEventItem); } //+------------------------------------------------------------------------- // //-------------------------------------------------------------------------- CEventItem::~CEventItem() { for (WORD i=0; i<_cArgsTotal; i++) delete [] _pwcsData[i]; delete [] _pwcsData; } //+------------------------------------------------------------------------- // //-------------------------------------------------------------------------- void CEventItem::AddArg( const WCHAR * wcsString ) { Win4Assert( _cArgsUsed < _cArgsTotal ); Win4Assert( 0 != wcsString ); _pwcsData[_cArgsUsed] = new WCHAR[wcslen(wcsString) + 1]; wcscpy( _pwcsData[_cArgsUsed], wcsString ); _cArgsUsed++; } //+------------------------------------------------------------------------- // //-------------------------------------------------------------------------- void CEventItem::AddArg( const ULONG ulValue ) { WCHAR wcsBuffer[20]; _ultow( ulValue, wcsBuffer, 10 ); AddArg(wcsBuffer); } //+--------------------------------------------------------------------------- // // Member: CEventItem::AddError // // Synopsis: Adds the given error either as a HEX value or a decimal // value depending upon whether it is an NT error or WIN32 error. // // Arguments: [ulValue] - The error code to add. // // History: 5-27-96 srikants Created // // Notes: // //---------------------------------------------------------------------------- void CEventItem::AddError( ULONG ulValue ) { if ( !NT_SUCCESS(ulValue) ) { WCHAR wszTemp[20]; swprintf( wszTemp, L"0x%X", ulValue ); AddArg( wszTemp ); } else { AddArg( ulValue ); } } //+------------------------------------------------------------------------- // // Method: CEventLog::CEventLog, public // // Purpose: Constructor // // History: 07-Jun-94 DwightKr Created // //-------------------------------------------------------------------------- CEventLog::CEventLog( const WCHAR * wcsUNCServer, const WCHAR * wcsSource) : _hEventLog(0) { _hEventLog = RegisterEventSource( wcsUNCServer, wcsSource ); if ( _hEventLog == NULL ) { ciDebugOut( (DEB_ITRACE, "CEventLog: Could not register event source, rc=0x%x\n", GetLastError() )); THROW( CException() ); } END_CONSTRUCTION( CEventLog ); } //+------------------------------------------------------------------------- // // Method: CEventLog::~CEventLog, public // // Purpose: Destructor // // History: 07-Jun-94 DwightKr Created // //-------------------------------------------------------------------------- CEventLog::~CEventLog() { DeregisterEventSource( _hEventLog ); } //+------------------------------------------------------------------------- // // Method: CEventLog::ReportEvent // // Purpose: Allows writing records to event log // // History: 07-Jun-94 DwightKr Created // 31-Dec-96 mohamedn Added support for raw data in ReportEvent // //-------------------------------------------------------------------------- void CEventLog::ReportEvent( CEventItem & event ) { Win4Assert( event._cArgsTotal == event._cArgsUsed ); // // No need to throw if ReportEvent returns an error because logging // is a low priority operation // if ( !::ReportEvent( _hEventLog, event._fType, event._fCategory, event._eventId, NULL, // Sid event._cArgsUsed, event._dataSize, // Sizeof RAW data (const WCHAR **) event._pwcsData, (void *)event._data )) // RAW data { ciDebugOut(( DEB_ERROR, "Error 0x%X while writing to eventlog\n", GetLastError() )); } }