|
|
//*************************************************************
//
// Copyright (c) Microsoft Corporation 1998
// All rights reserved
//
// events.cxx
//
//*************************************************************
#include "common.hxx"
CEvents * gpEvents = 0;
CEventsBase::CEventsBase() { _hUserToken = 0; }
void CEventsBase::Report( DWORD EventID, BOOL bDowngradeErrors, WORD Strings, ... ) { va_list VAList; WCHAR * ppwszStrings[10]; WORD Type; DWORD DbgMsgLevel;
if ( Strings > 10 ) return;
switch ( EventID / 100 ) { case 1: Type = EVENTLOG_ERROR_TYPE; DbgMsgLevel = DM_WARNING; break; case 2: Type = EVENTLOG_WARNING_TYPE; DbgMsgLevel = DM_WARNING; break; case 3: Type = EVENTLOG_INFORMATION_TYPE; DbgMsgLevel = DM_VERBOSE; break; case 4: Type = EVENTLOG_INFORMATION_TYPE; DbgMsgLevel = DM_VERBOSE; break; default: return; }
if ( bDowngradeErrors && ( EVENTLOG_ERROR_TYPE == Type ) ) { Type = EVENTLOG_WARNING_TYPE; DbgMsgLevel = DM_WARNING; }
if ( Strings > 0 ) { va_start( VAList, Strings ); for ( DWORD n = 0; n < Strings; n++ ) ppwszStrings[n] = va_arg( VAList, WCHAR * ); va_end( VAList ); }
if ( (EventID < 400) || (gDebugLevel & (DL_VERBOSE | DL_EVENTLOG)) ) { HANDLE hEventLog; PSID pSid;
hEventLog = OpenEventLog( NULL, APPMGMT_EVENT_SOURCE );
if ( ! hEventLog ) return;
pSid = AppmgmtGetUserSid( _hUserToken );
(void) ReportEvent( hEventLog, Type, 0, EventID, pSid, Strings, 0, (LPCWCH *) ppwszStrings, NULL );
LocalFree( pSid ); CloseEventLog( hEventLog ); }
//
// Also make sure the event messages get sent to the debugger and log file.
// Kind of hacky method, but makes it so every caller to ::Report doesn't
// have to call _DebugMsg as well.
// However, don't do this for the verbose messages otherwise it will be
// dumped to the debugger twice.
//
if ( EVENT_APPMGMT_VERBOSE == EventID ) return;
switch ( Strings ) { case 0 : _DebugMsg( DbgMsgLevel | DM_NO_EVENTLOG, EventID ); break; case 1 : _DebugMsg( DbgMsgLevel | DM_NO_EVENTLOG, EventID, ppwszStrings[0] ); break; case 2 : _DebugMsg( DbgMsgLevel | DM_NO_EVENTLOG, EventID, ppwszStrings[0], ppwszStrings[1] ); break; case 3 : _DebugMsg( DbgMsgLevel | DM_NO_EVENTLOG, EventID, ppwszStrings[0], ppwszStrings[1], ppwszStrings[2] ); break; case 4 : _DebugMsg( DbgMsgLevel | DM_NO_EVENTLOG, EventID, ppwszStrings[0], ppwszStrings[1], ppwszStrings[2], ppwszStrings[3] ); break; case 5 : _DebugMsg( DbgMsgLevel | DM_NO_EVENTLOG, EventID, ppwszStrings[0], ppwszStrings[1], ppwszStrings[2], ppwszStrings[3], ppwszStrings[4] ); break; default : VerboseDebugDump( L"CEvents::Report called with more params then expected!\n" ); break; } }
void CEventsBase::Install( DWORD ErrorStatus, WCHAR * pwszDeploymentName, WCHAR * pwszGPOName ) { WCHAR wszStatus[12];
if ( ErrorStatus != ERROR_SUCCESS ) { DwordToString( ErrorStatus, wszStatus );
Report( EVENT_APPMGMT_INSTALL_FAILED, ERROR_SYNC_FOREGROUND_REFRESH_REQUIRED == ErrorStatus, 3, pwszDeploymentName, pwszGPOName, wszStatus ); } else { Report( EVENT_APPMGMT_INSTALL, FALSE, 2, pwszDeploymentName, pwszGPOName ); } }
void CEventsBase::Uninstall( DWORD ErrorStatus, WCHAR * pwszDeploymentName, WCHAR * pwszGPOName ) { WCHAR wszStatus[12];
if ( ErrorStatus != ERROR_SUCCESS ) { DwordToString( ErrorStatus, wszStatus );
Report( EVENT_APPMGMT_UNINSTALL_FAILED, ERROR_SYNC_FOREGROUND_REFRESH_REQUIRED == ErrorStatus, 3, pwszDeploymentName, pwszGPOName, wszStatus ); } else { Report( EVENT_APPMGMT_UNINSTALL, FALSE, 2, pwszDeploymentName, pwszGPOName ); } }
|