//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1994. // // File: statmon.cxx // // Contents: // // Classes: // // Functions: // // History: 3-20-96 srikants Created // //---------------------------------------------------------------------------- #include #pragma hdrstop #include #include #include #include #include //+--------------------------------------------------------------------------- // // Member: CCiStatusMonitor::ReportInitFailure // // Synopsis: // // Arguments: [status] - // // Returns: // // Modifies: // // History: 3-20-96 srikants Created // // Notes: // //---------------------------------------------------------------------------- void CCiStatusMonitor::ReportInitFailure() { Win4Assert( STATUS_SUCCESS != _status ); if ( CI_CORRUPT_DATABASE == _status || CI_CORRUPT_CATALOG == _status ) { LogEvent( eCorrupt, _status ); } else { LogEvent( eInitFailed, _status ); } _fDontLog = TRUE; } //+--------------------------------------------------------------------------- // // Member: CCiStatusMonitor::ReportFailure // // Synopsis: // // Arguments: [status] - // // Returns: // // Modifies: // // History: 3-20-96 srikants Created // // Notes: // //---------------------------------------------------------------------------- void CCiStatusMonitor::ReportFailure( NTSTATUS status ) { if ( !_fDontLog ) { if ( CI_CORRUPT_DATABASE == status || CI_CORRUPT_CATALOG == status ) { LogEvent( eCorrupt, status ); } else { LogEvent( eCiError, status ); } _fDontLog = TRUE; } } //+--------------------------------------------------------------------------- // // Member: CCiStatusMonitor::LogEvent // // Synopsis: // // Arguments: [type] - // [status] - // // Returns: // // Modifies: // // History: 3-20-96 srikants Created // // Notes: // //---------------------------------------------------------------------------- void CCiStatusMonitor::LogEvent( EMessageType type, DWORD status, ULONG val ) { TRY { USHORT nParams = 1; DWORD msgId; USHORT usLevel = EVENTLOG_WARNING_TYPE; switch ( type ) { case eCorrupt: usLevel = EVENTLOG_ERROR_TYPE; msgId = MSG_CI_CORRUPT_INDEX_DOWNLEVEL; break; case eCIStarted: usLevel = EVENTLOG_INFORMATION_TYPE; msgId = MSG_CI_STARTED; break; case eInitFailed: usLevel = EVENTLOG_ERROR_TYPE; msgId = MSG_CI_INIT_INDEX_DOWNLEVEL_FAILED; nParams = 2; break; case eCiRemoved: usLevel = EVENTLOG_ERROR_TYPE; msgId = MSG_CI_CORRUPT_INDEX_DOWNLEVEL_REMOVED; break; case eCiError: usLevel = EVENTLOG_ERROR_TYPE; msgId = MSG_CI_INDEX_DOWNLEVEL_ERROR; nParams = 2; break; case ePropStoreRecoveryStart: usLevel = EVENTLOG_INFORMATION_TYPE; msgId = MSG_CI_PROPSTORE_RECOVERY_START; break; case ePropStoreRecoveryEnd: usLevel = EVENTLOG_INFORMATION_TYPE; msgId = MSG_CI_PROPSTORE_RECOVERY_COMPLETED; break; case ePropStoreError: usLevel = EVENTLOG_ERROR_TYPE; msgId = MSG_CI_PROPSTORE_INCONSISTENT; break; case ePropStoreRecoveryError: msgId = MSG_CI_PROPSTORE_RECOVERY_INCONSISTENT; nParams = 2; break; default: ciDebugOut(( DEB_IERROR, "Unknown message type. %d\n", type )); return; } CEventLog eventLog( NULL, wcsCiEventSource ); CEventItem item( usLevel, CI_SERVICE_CATEGORY, msgId, nParams ); switch (msgId) { case MSG_CI_CORRUPT_INDEX_DOWNLEVEL: case MSG_CI_CORRUPT_INDEX_DOWNLEVEL_REMOVED: case MSG_CI_PROPSTORE_INCONSISTENT: case MSG_CI_PROPSTORE_RECOVERY_START: case MSG_CI_PROPSTORE_RECOVERY_COMPLETED: case MSG_CI_STARTED: item.AddArg( _wcsCatDir ); break; case MSG_CI_INIT_INDEX_DOWNLEVEL_FAILED: item.AddArg( _wcsCatDir ); item.AddArg( status ); break; case MSG_CI_INDEX_DOWNLEVEL_ERROR: item.AddArg( status ); item.AddArg( _wcsCatDir ); break; case MSG_CI_PROPSTORE_RECOVERY_INCONSISTENT: item.AddArg( val ); item.AddArg( _wcsCatDir ); break; default: Win4Assert( !"Impossible case stmt" ); break; } eventLog.ReportEvent( item ); } CATCH( CException,e ) { ciDebugOut(( DEB_ERROR, "Exception 0x%X while writing to event log\n", e.GetErrorCode() )); } END_CATCH } void CCiStatusMonitor::ReportPathTooLong( WCHAR const * pwszPath ) { TRY { CEventLog eventLog( NULL, wcsCiEventSource ); CEventItem item( EVENTLOG_ERROR_TYPE, CI_SERVICE_CATEGORY, MSG_CI_PATH_TOO_LONG, 1 ); item.AddArg( pwszPath ); eventLog.ReportEvent( item ); } CATCH( CException,e ) { ciDebugOut(( DEB_ERROR, "Exception 0x%X while writing to event log\n", e.GetErrorCode() )); } END_CATCH }