Windows NT 4.0 source code leak
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.
 
 
 
 
 
 

246 lines
4.6 KiB

/*++
Copyright (c) 1994 Microsoft Corporation
Module Name:
Log.c
Abstract:
This module manages event logging for the RNR Sample Service.
Author:
Charles K. Moore (keithmo) 24-July-1994
Revision History:
--*/
#include "rnrsvcp.h"
#pragma hdrstop
//
// Stolen from NTDEF.H.
//
#define NT_INFORMATION(s) (((ULONG)(s) >> 30) == 1)
#define NT_WARNING(s) (((ULONG)(s) >> 30) == 1)
#define NT_ERROR(s) (((ULONG)(s) >> 30) == 1)
//
// Private globals.
//
HANDLE RnrpEventSource;
//
// Public functions.
//
APIERR
RnrLogInitialize(
VOID
)
/*++
Routine Description:
Performs any necessary event log initialization.
Return Value:
APIERR - NO_ERROR if successful, Win32 error code if not.
--*/
{
#if !defined(BUILD_STANDALONE_EXE)
//
// Register as an event source.
//
RnrpEventSource = RegisterEventSource( NULL,
RNR_SERVICE_NAME );
if( RnrpEventSource == NULL ) {
return GetLastError();
}
#endif // !BUILD_STANDALONE_EXE
//
// Success!
//
return NO_ERROR;
} // RnrLogInitialize
VOID
RnrLogTerminate(
VOID
)
/*++
Routine Description:
Performs any necessary event log cleanup.
--*/
{
#if !defined(BUILD_STANDALONE_EXE)
//
// Deregister as an event source.
//
if( RnrpEventSource != NULL ) {
if( !DeregisterEventSource( RnrpEventSource ) ) {
//
// Not much we can do here...
//
}
RnrpEventSource = NULL;
}
#endif // !BUILD_STANDALONE_EXE
} // RnrLogTerminate
VOID
RnrLogEvent(
DWORD MessageId,
WORD SubStringCount,
LPTSTR SubStrings[],
APIERR Status
)
/*++
Routine Description:
Report an event to the event logger.
Arguments:
MessageId - Identifies the event message.
SubStringCount - The number of sub-strings to include in the
message. May be zero.
SubStrings - The actual sub-strings to include in the message.
May be NULL if SubStringCount is zero.
Status - A completion status (either a Win32 or WinSock error
code). If this is non-zero, then it is considered the
"raw" data to include in the messsage.
--*/
{
#if defined(BUILD_STANDALONE_EXE)
LPTSTR MessageText = NULL;
FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER
| FORMAT_MESSAGE_MAX_WIDTH_MASK
| FORMAT_MESSAGE_FROM_HMODULE,
(LPVOID)GetModuleHandle( NULL ),
MessageId,
0,
(LPTSTR)&MessageText,
0,
SubStrings );
if( MessageText ) {
fprintf( stderr,
"%s\nStatus = %lu\n",
MessageText,
Status );
LocalFree( (HLOCAL)MessageText );
} else {
fprintf( stderr,
"Logging message %08lX, Status = %lu\n",
MessageId,
Status );
}
#else // !BUILD_STANDALONE_EXE
WORD EventType;
LPVOID RawData = NULL;
DWORD RawDataSize = 0;
//
// Determine the type of event to log based on the
// severity field of the message id.
//
if( NT_INFORMATION(MessageId) ) {
EventType = EVENTLOG_INFORMATION_TYPE;
} else if( NT_WARNING(MessageId) ) {
EventType = EVENTLOG_WARNING_TYPE;
} else if( NT_ERROR(MessageId) ) {
EventType = EVENTLOG_ERROR_TYPE;
} else {
//
// This should never happen...
//
EventType = EVENTLOG_ERROR_TYPE;
}
//
// Cannot write to the event log if we failed to register.
//
if( RnrpEventSource == NULL ) {
return;
}
//
// Use the status code as raw data if non-zero.
//
if( Status != 0 ) {
RawData = &Status;
RawDataSize = sizeof(Status);
}
if( !ReportEvent( RnrpEventSource, // hEventSource
EventType, // fwEventType
0, // fwCategory
MessageId, // IDEvent
NULL, // pUserSid,
SubStringCount, // cStrings
RawDataSize, // cbData
(LPCTSTR *)SubStrings, // plpszStrings
RawData ) ) { // lpvData
//
// Not much we can do here...
//
}
#endif // BUILD_STANDALONE_EXE
} // RnrLogEvent
//
// Private functions.
//