Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

179 lines
4.0 KiB

/*
* Class:
*
* WmiDebugLog
*
* Description:
*
*
*
* Version:
*
* Initial
*
* Last Changed:
*
* See Source Depot for change history
*
*/
#ifndef __WMILOG_H
#define __WMILOG_H
#include <locks.h>
#if 0
#ifdef LOGGINGDEBUG_INIT
class __declspec ( dllexport ) WmiDebugLog
#else
class __declspec ( dllimport ) WmiDebugLog
#endif
#else
class WmiDebugLog
#endif
{
public:
enum WmiDebugContext
{
FILE = 0 ,
DEBUG = 1
} ;
private:
CriticalSection m_CriticalSection ;
static long s_ReferenceCount ;
WmiAllocator &m_Allocator ;
enum WmiDebugContext m_DebugContext ;
BOOL m_Logging ;
BOOL m_Verbose ;
DWORD m_DebugLevel ;
DWORD m_DebugFileSize;
wchar_t *m_DebugComponent ;
wchar_t *m_DebugFile ;
HANDLE m_DebugFileHandle ;
static BOOL s_Initialised ;
static void SetEventNotification () ;
void LoadRegistry_Logging () ;
void LoadRegistry_Level () ;
void LoadRegistry_File () ;
void LoadRegistry_FileSize () ;
void LoadRegistry_Type () ;
void SetRegistry_Logging () ;
void SetRegistry_Level () ;
void SetRegistry_File () ;
void SetRegistry_FileSize () ;
void SetRegistry_Type () ;
void SetDefaultFile () ;
void OpenFileForOutput () ;
void OpenOutput () ;
void CloseOutput () ;
void FlushOutput () ;
void SwapFileOver () ;
void WriteOutput ( const WCHAR *a_DebugOutput ) ;
protected:
public:
WmiDebugLog ( WmiAllocator &a_Allocator ) ;
virtual ~WmiDebugLog () ;
WmiStatusCode Initialize ( const wchar_t *a_DebugComponent ) ;
/*************************************************************************
* There are 3 functions to write to a log file, which may be used in accordance with the following rules:
*
* 1. The user always knows whether he is writing to an ANSI file or a Unicode file, and he
* has to make sure this holds good in the rules 2, 3 and 4 below. This will be changed later to
* make it more flowxible to the user.
* 2. Write() takes wchar_t arguments and the function will write and ANSI or Unicode string
* to the log file depending on what wchar_t maps to, in the compilation.
* 3. WriteW() takes WCHAR arguments only, and expects that the file being written to is a Unicode file.
* 4. WriteA() takes char arguments only, and expects that the file being written to is an ANSI file.
*
****************************************************************/
void Write ( const wchar_t *a_DebugFormatString , ... ) ;
void Write ( const wchar_t *a_File , const ULONG a_Line , const wchar_t *a_DebugFormatString , ... ) ;
void Flush () ;
void LoadRegistry () ;
void SetRegistry () ;
void SetLevel ( const DWORD &a_DebugLevel ) ;
DWORD GetLevel () ;
void SetContext ( const enum WmiDebugContext &a_DebugContext ) ;
enum WmiDebugContext GetContext () ;
void SetFile ( const wchar_t *a_File ) ;
wchar_t *GetFile () ;
void SetLogging ( BOOL a_Logging = TRUE ) ;
BOOL GetLogging () ;
void SetVerbose ( BOOL a_Verbose = TRUE ) ;
BOOL GetVerbose () ;
void CommitContext () ;
static WmiDebugLog *s_WmiDebugLog ;
static WmiStatusCode Initialize ( WmiAllocator &a_Allocator ) ;
static WmiStatusCode UnInitialize ( WmiAllocator &a_Allocator ) ;
public:
} ;
inline DWORD WmiDebugLog :: GetLevel ()
{
DWORD t_Level = m_DebugLevel ;
return t_Level ;
}
inline wchar_t *WmiDebugLog :: GetFile ()
{
wchar_t *t_File = m_DebugFile ;
return t_File ;
}
inline BOOL WmiDebugLog :: GetLogging ()
{
return m_Logging ;
}
inline void WmiDebugLog :: SetVerbose ( BOOL a_Verbose )
{
m_Verbose = a_Verbose ;
}
inline BOOL WmiDebugLog :: GetVerbose ()
{
return m_Verbose ;
}
#ifdef DBG
#define DebugMacro3(a) { \
\
if ( WmiDebugLog :: s_WmiDebugLog && WmiDebugLog :: s_WmiDebugLog->GetLogging () && ( WmiDebugLog :: s_WmiDebugLog->GetVerbose () || ( WmiDebugLog :: s_WmiDebugLog->GetLevel () & 8 ) ) ) \
{ \
{a ; } \
} \
}
#else
#define DebugMacro3(a)
#endif
#endif __WMILOG_H