105 lines
3.1 KiB
C++
105 lines
3.1 KiB
C++
//#pragma title( "TEvent.cpp - Log events" )
|
|
/*
|
|
Copyright (c) 1995-1998, Mission Critical Software, Inc. All rights reserved.
|
|
===============================================================================
|
|
Module - TAudit.cpp
|
|
System - EnterpriseAdministrator
|
|
Author - Rich Denham
|
|
Created - 1995-11-10
|
|
Description - TErrorEventLog class
|
|
Updates -
|
|
===============================================================================
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <windows.h>
|
|
|
|
#include "Common.hpp"
|
|
#include "Err.hpp"
|
|
#include "UString.hpp"
|
|
|
|
#include "TEvent.hpp"
|
|
|
|
BOOL
|
|
TErrorEventLog::LogOpen(
|
|
WCHAR const * svcName ,// in -service name
|
|
int mode ,// in -0=overwrite, 1=append
|
|
int level // in -minimum level to log
|
|
)
|
|
{
|
|
hEventSource = RegisterEventSourceW( NULL, svcName );
|
|
if ( hEventSource == NULL )
|
|
lastError = GetLastError();
|
|
|
|
return hEventSource != NULL;
|
|
}
|
|
|
|
void
|
|
TErrorEventLog::LogWrite(
|
|
WCHAR const * msg
|
|
)
|
|
{
|
|
BOOL rcBool;
|
|
DWORD rcErr;
|
|
static const WORD levelTranslate[] = {EVENTLOG_INFORMATION_TYPE,
|
|
EVENTLOG_WARNING_TYPE,
|
|
EVENTLOG_ERROR_TYPE,
|
|
EVENTLOG_ERROR_TYPE,
|
|
EVENTLOG_ERROR_TYPE,
|
|
EVENTLOG_ERROR_TYPE,
|
|
EVENTLOG_ERROR_TYPE,
|
|
EVENTLOG_ERROR_TYPE};
|
|
|
|
SID * pSid = NULL;
|
|
HANDLE hToken = NULL;
|
|
TOKEN_USER tUser[10];
|
|
ULONG len;
|
|
|
|
if ( OpenProcessToken(GetCurrentProcess(),TOKEN_READ,&hToken) )
|
|
{
|
|
if ( GetTokenInformation(hToken,TokenUser,tUser,10*(sizeof TOKEN_USER),&len) )
|
|
{
|
|
pSid = (SID*)tUser[0].User.Sid;
|
|
}
|
|
else
|
|
{
|
|
rcErr = GetLastError();
|
|
}
|
|
CloseHandle(hToken);
|
|
}
|
|
else
|
|
{
|
|
rcErr = GetLastError();
|
|
}
|
|
|
|
// TODO: setup event category
|
|
// TODO: log events in Unicode
|
|
|
|
rcBool = ReportEventW( hEventSource, // handle of event source
|
|
levelTranslate[level], // event type
|
|
0, // event category
|
|
// CAT_AGENT, // event category
|
|
DCT_MSG_GENERIC_S, // event ID
|
|
pSid, // current user's SID
|
|
1, // strings in lpszStrings
|
|
0, // no bytes of raw data
|
|
&msg, // array of error strings
|
|
NULL ); // no raw data
|
|
if ( !rcBool )
|
|
{
|
|
rcErr = GetLastError();
|
|
}
|
|
}
|
|
|
|
void
|
|
TErrorEventLog::LogClose()
|
|
{
|
|
if ( hEventSource != NULL )
|
|
{
|
|
DeregisterEventSource( hEventSource );
|
|
hEventSource = NULL;
|
|
}
|
|
};
|
|
|
|
// TEvent.cpp - end of file
|