/*++ Copyright (c) 1996 Microsoft Corporation Module Name: eventlog.c Abstract: This file contains all functions that access the application event log. Author: Wesley Witt (wesw) 19-Mar-1996 Environment: User Mode --*/ #include #include #include #include #include #include "winfax.h" #include "faxutil.h" #include "faxreg.h" #include "faxsvcrg.h" #include "faxdev.h" #include "faxevent.h" #include "messages.h" #define MAX_STRINGS 64 #define FAX_SVC_EVENT TEXT("Fax Service") HINSTANCE MyhInstance; HANDLE hEventSrc; DWORD FaxCategoryCount; CRITICAL_SECTION CsEvent; #ifdef OLD_WAY FAX_LOG_CATEGORY FaxCategory[16]; #else // OLD_WAY PFAX_LOG_CATEGORY FaxCategory; #endif // OLD_WAY DWORD FaxEventDllInit( HINSTANCE hInstance, DWORD Reason, LPVOID Context ) { if (Reason == DLL_PROCESS_ATTACH) { MyhInstance = hInstance; DisableThreadLibraryCalls( hInstance ); } return TRUE; } BOOL InitializeEventLog( IN HANDLE HeapHandle, IN PREG_FAX_SERVICE FaxReg, PFAX_LOG_CATEGORY DefaultCategories, int DefaultCategoryCount ) /*++ Routine Description: Initializes the event log for the FAX service to record event entries. Arguments: HeapHandle - FaxReg - DefaultCategories - points to the array of FAX_LOG_CATEGORY structures DefaultCategoryCount - the number of elements in DefaultCategories Return Value: TRUE for success, FALSE for failure --*/ { DWORD i; HeapInitialize(HeapHandle,NULL,NULL,0); InitializeCriticalSection( &CsEvent ); // // create the event source, if it does not already exist // if ( CreateFaxEventSource( FaxReg, DefaultCategories, DefaultCategoryCount ) == (BOOL) FALSE ) { return FALSE; } Assert( FaxReg->Logging ); // // allocate memory for the logging category info // EnterCriticalSection( &CsEvent ); FaxCategory = (PFAX_LOG_CATEGORY) MemAlloc( sizeof(FAX_LOG_CATEGORY) * FaxReg->LoggingCount ); if (!FaxCategory) { LeaveCriticalSection( &CsEvent ); return FALSE; } // // capture the event categories from the registry // for (i=0; iLoggingCount; i++) { FaxCategory[i].Name = StringDup( FaxReg->Logging[i].CategoryName ); FaxCategory[i].Category = FaxReg->Logging[i].Number; FaxCategory[i].Level = FaxReg->Logging[i].Level; } FaxCategoryCount = FaxReg->LoggingCount; LeaveCriticalSection( &CsEvent ); // // get a handle to the event log // hEventSrc = RegisterEventSource( NULL, FAX_SVC_EVENT ); if (!hEventSrc) { return FALSE; } return TRUE; } VOID RefreshEventLog( PREG_FAX_LOGGING FaxReg ) /*++ Routine Description: Refreshes the event log for the FAX service to record event entries. Arguments: None. Return Value: None. --*/ { DWORD i; EnterCriticalSection( &CsEvent ); // // capture the event categories from the registry // for (i=0; iLoggingCount; i++) { if (FaxCategory[i].Name) { MemFree( (LPVOID)FaxCategory[i].Name ); } FaxCategory[i].Name = StringDup( FaxReg->Logging[i].CategoryName ); FaxCategory[i].Category = FaxReg->Logging[i].Number; FaxCategory[i].Level = FaxReg->Logging[i].Level; } FaxCategoryCount = FaxReg->LoggingCount; LeaveCriticalSection( &CsEvent ); } BOOL FaxLog( DWORD Category, DWORD Level, DWORD StringCount, DWORD FormatId, ... ) /*++ Routine Description: Writes a log file entry to the event log. Arguments: Level - Severity of the log record StringCount - Number of strings included in the varargs FormatId - Message file id Return Value: TRUE for success, FALSE for failure --*/ { LPTSTR Strings[MAX_STRINGS]; DWORD i; va_list args; WORD Type; // // look for the category // EnterCriticalSection( &CsEvent ); for (i=0; i FaxCategory[i].Level) { LeaveCriticalSection( &CsEvent ); return FALSE; } } } LeaveCriticalSection( &CsEvent ); va_start( args, FormatId ); // // capture the strings // for (i=0; i> 30) { case STATUS_SEVERITY_WARNING: Type = EVENTLOG_WARNING_TYPE; break; case STATUS_SEVERITY_ERROR: Type = EVENTLOG_ERROR_TYPE; break; case STATUS_SEVERITY_INFORMATIONAL: case STATUS_SEVERITY_SUCCESS: Type = EVENTLOG_INFORMATION_TYPE; } // // record the event // ReportEvent( hEventSrc, // event log handle Type, // type (WORD) Category, // category FormatId, // event id NULL, // security id (WORD) StringCount, // string count 0, // data buffer size Strings, // strings NULL // data buffer ); return TRUE; }