windows-nt/Source/XPSP1/NT/admin/admt/common/commonlib/tevent.cpp
2020-09-26 16:20:57 +08:00

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