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