windows-nt/Source/XPSP1/NT/net/config/inc/kklog.h
2020-09-26 16:20:57 +08:00

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, ...);
// ----------------------------------------------------------------------