150 lines
4.8 KiB
C++
150 lines
4.8 KiB
C++
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1997.
|
|
//
|
|
// File: K K L O G . H
|
|
//
|
|
// Contents: Error logging for NetCfg components
|
|
//
|
|
// Notes:
|
|
//
|
|
// Author: kumarp 14 April 97 (09:22:00 pm)
|
|
//
|
|
// Notes:
|
|
//----------------------------------------------------------------------------
|
|
|
|
|
|
enum ENetCfgComponentType;
|
|
|
|
// ----------------------------------------------------------------------
|
|
// Class CLog
|
|
//
|
|
// Inheritance:
|
|
// none
|
|
//
|
|
// Purpose:
|
|
// Provides a way to log errors/warnings to
|
|
// - NT EventLog
|
|
// - NT SetupLog (setuperr.log / setupact.log)
|
|
//
|
|
// This class hides much of complexity of the EventLog API. In addition
|
|
// the user of this class does not have to first check whether a EventSource
|
|
// has been created in the registry. This class will create one if not found.
|
|
// Also, it is not necessary to call (De)RegisterEventSource for each report.
|
|
//
|
|
// Messages are logged to SetupLog only during system install/upgrade
|
|
// Message are always logged to the EventLog
|
|
//
|
|
// This class provides function interface that is closer to EventLog API
|
|
// than to the SetupLog API. The EventLog parameter values are mapped to
|
|
// corresponding SetupLog parameters using some helper functions.
|
|
// See nclog.cpp for details.
|
|
//
|
|
// The members of this class do not return an error, because this itself is the
|
|
// error reporting mechanism. However, the class has several Trace* functions.
|
|
//
|
|
// Hungarian: cl
|
|
// ----------------------------------------------------------------------
|
|
|
|
class CLog
|
|
{
|
|
public:
|
|
CLog(ENetCfgComponentType nccType);
|
|
~CLog();
|
|
|
|
void Initialize(IN ENetCfgComponentType nccType);
|
|
void SetCategory(IN ENetCfgComponentType nccType) { m_nccType = nccType; }
|
|
|
|
//Event Reporting functions
|
|
void ReportEvent(IN WORD wType, IN DWORD dwEventID,
|
|
IN WORD wNumStrings=0, IN PCWSTR* ppszStrings=NULL,
|
|
IN DWORD dwBinaryDataNumBytes=0,
|
|
IN PVOID pvBinaryData=NULL) const;
|
|
|
|
void ReportEvent(IN WORD wType, IN DWORD dwEventID,
|
|
IN WORD wNumStrings, ...) const;
|
|
|
|
void ReportEvent(IN WORD wType, IN DWORD dwEventID,
|
|
IN WORD wNumStrings, va_list arglist) const;
|
|
|
|
void ReportError(DWORD dwEventID);
|
|
void ReportWarning(DWORD dwEventID);
|
|
|
|
private:
|
|
static BOOL m_fNetSetupMode; // TRUE only during NT install/upgrade
|
|
// this must be set by some external logic
|
|
static PCWSTR m_pszEventSource;// EventLog source name
|
|
BOOL m_fInitialized; // TRUE only if correctly initialized
|
|
ENetCfgComponentType m_nccType; // Component category
|
|
};
|
|
|
|
inline void CLog::ReportError(DWORD dwEventID)
|
|
{
|
|
ReportEvent(EVENTLOG_ERROR_TYPE, dwEventID);
|
|
}
|
|
|
|
inline void CLog::ReportWarning(DWORD dwEventID)
|
|
{
|
|
ReportEvent(EVENTLOG_WARNING_TYPE, dwEventID);
|
|
}
|
|
|
|
// ----------------------------------------------------------------------
|
|
// The wType parameter of ReportEvent can take any on of the following values
|
|
//
|
|
// - EVENTLOG_SUCCESS
|
|
// - EVENTLOG_ERROR_TYPE
|
|
// - EVENTLOG_WARNING_TYPE
|
|
// - EVENTLOG_INFORMATION_TYPE
|
|
// - EVENTLOG_AUDIT_SUCCESS
|
|
// - EVENTLOG_AUDIT_FAILURE
|
|
|
|
// ----------------------------------------------------------------------
|
|
// Components categories. This decides which event-message-file to use
|
|
// ----------------------------------------------------------------------
|
|
enum ENetCfgComponentType
|
|
{
|
|
nccUnknown = 0,
|
|
nccError,
|
|
nccNetcfgBase,
|
|
nccNWClientCfg,
|
|
nccRasCli,
|
|
nccRasSrv,
|
|
nccRasRtr,
|
|
nccRasNdisWan,
|
|
nccRasPptp,
|
|
nccNCPA,
|
|
nccCompInst,
|
|
nccMSCliCfg,
|
|
nccSrvrCfg,
|
|
nccNetUpgrade,
|
|
nccNetSetup,
|
|
nccDAFile,
|
|
nccTcpip,
|
|
nccAtmArps,
|
|
nccAtmUni,
|
|
nccLast
|
|
};
|
|
|
|
|
|
// ----------------------------------------------------------------------
|
|
// These functions should normally be used by components that require
|
|
// event reporting for different sub-components using different categories.
|
|
//
|
|
// For those components that report events only for a single component,
|
|
// should probably create a global instance of CLog only once
|
|
// and report thru that instance.
|
|
// ----------------------------------------------------------------------
|
|
|
|
void NcReportEvent(IN ENetCfgComponentType nccType,
|
|
IN WORD wType, IN DWORD dwEventID,
|
|
IN WORD wNumStrings, IN PCWSTR* ppszStrings,
|
|
IN DWORD dwBinaryDataNumBytes,
|
|
IN PVOID pvBinaryData);
|
|
|
|
void NcReportEvent(IN ENetCfgComponentType nccType,
|
|
IN WORD wType, IN DWORD dwEventID,
|
|
IN WORD wNumStrings, ...);
|
|
|
|
// ----------------------------------------------------------------------
|