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.
 
 
 
 
 
 

194 lines
5.9 KiB

/*******************************************************************************
*
* (C) COPYRIGHT MICROSOFT CORP., 1997
*
* TITLE: WiaLog.h
*
* VERSION: 1.0
*
* AUTHOR: CoopP
*
* DATE: 20 Aug, 1999
*
* DESCRIPTION:
* Declarations and definitions for the WIA logging object.
*
*******************************************************************************/
#ifndef WIALOG_H
#define WIALOG_H
#include <wia.h>
// Flush state
#ifdef WINNT
#define FLUSH_STATE FALSE
#else
// Must be TRUE for Win9x
#define FLUSH_STATE TRUE
#endif
#define MAX_TEXT_BUFFER 1024
#define MAX_NAME_BUFFER 64
#define NUM_BYTES_TO_LOCK_LOW 4096
#define NUM_BYTES_TO_LOCK_HIGH 0
#define WIA_MAX_LOG_SIZE 1000000
#define MAX_SIG_LEN 64
// Type of logging
#define WIALOG_TRACE 0x00000001
#define WIALOG_WARNING 0x00000002
#define WIALOG_ERROR 0x00000004
// level of detail for TRACE logging
#define WIALOG_LEVEL1 1 // Entry and Exit point of each function/method
#define WIALOG_LEVEL2 2 // LEVEL 1, + traces within the function/method
#define WIALOG_LEVEL3 3 // LEVEL 1, LEVEL 2, and any extra debugging information
#define WIALOG_LEVEL4 4 // USER DEFINED data + all LEVELS of tracing
#define WIALOG_NO_RESOURCE_ID 0
#define WIALOG_NO_LEVEL 0
// format details for logging
#define WIALOG_ADD_TIME 0x00010000
#define WIALOG_ADD_MODULE 0x00020000
#define WIALOG_ADD_THREAD 0x00040000
#define WIALOG_ADD_THREADTIME 0x00080000
#define WIALOG_LOG_TOUI 0x00100000
#define WIALOG_MESSAGE_TYPE_MASK 0x0000ffff
#define WIALOG_MESSAGE_FLAGS_MASK 0xffff0000
#define WIALOG_CHECK_TRUNCATE_ON_BOOT 0x00000001
#define WIALOG_DEBUGGER 0x00000008
#define WIALOG_UI 0x00000016
#define MAX_TRUNCATE_SIZE 350000
//
// NB!!! Move this to the IDL as soon as IWiaLogEx is in
//
// This struct is used to match a MethodId / MethodName pair
//
typedef struct _MapTableEntry {
LONG lSize;
LONG lMethodId;
BSTR bstrMethodName;
} MapTableEntry;
typedef struct _MappingTable {
LONG lSize;
LONG lNumEntries;
MapTableEntry *pEntries;
} MappingTable;
class CFactory;
class CWiaLog : public IWiaLog,
public IWiaLogEx
{
public:
//
// IWiaLog public methods
//
static HRESULT CreateInstance(const IID& iid, void** ppv);
private:
//
// IUnknown methods
//
HRESULT _stdcall QueryInterface(const IID& iid, void** ppv);
ULONG _stdcall AddRef();
ULONG _stdcall Release();
friend CFactory;
//
// Construction / Destruction
//
CWiaLog();
~CWiaLog();
//
// IWiaLog private methods (exposed to the client)
//
HRESULT _stdcall InitializeLog (LONG hInstance);
HRESULT _stdcall Log (LONG lFlags, LONG lResID, LONG lDetail, BSTR bstrText);
HRESULT _stdcall hResult(HRESULT hr);
//
// IWiaLogEx private methods (exposed to the client)
//
HRESULT _stdcall InitializeLogEx (BYTE* hInstance);
HRESULT _stdcall LogEx (LONG lMethodId, LONG lFlags, LONG lResID, LONG lDetail, BSTR bstrText);
HRESULT _stdcall hResultEx (LONG lMethodId, HRESULT hr);
HRESULT _stdcall UpdateSettingsEx (LONG lCount, LONG *plMethodIds);
HRESULT _stdcall ExportMappingTableEx(MappingTable **ppTable);
//
// IWiaLog private methods (not exposed to the client)
//
HRESULT Initialize();
HRESULT Trace (BSTR bstrText, LONG lDetail = 0, LONG lMethodId = 0);
HRESULT Warning(BSTR bstrText, LONG lMethodId = 0);
HRESULT Error (BSTR bstrText, LONG lMethodId = 0);
//
// IWiaLog private helpers (not exposed to the client)
//
BOOL OpenLogFile();
VOID WriteStringToLog(LPTSTR pszTextBuffer,BOOL fFlush = FALSE);
VOID WriteLogSessionHeader();
BOOL QueryLoggingSettings();
VOID ConstructText();
BOOL FormatDLLName(HINSTANCE hInstance,TCHAR *pchBuffer,INT cbBuffer);
BOOL FormatStdTime(const SYSTEMTIME *pstNow,TCHAR *pchBuffer);
BOOL NeedsToBeFreed(BSTR* pBSTR);
VOID ProcessTruncation();
//
// member variables
//
ULONG m_cRef; // Reference count for this object.
ITypeInfo* m_pITypeInfo; // Pointer to type information.
DWORD m_dwReportMode; // bit mask, describing which messages types get reported
DWORD m_dwMaxSize; // maximum size ( in bytes ) of LOG file
HANDLE m_hLogFile; // handle to active log file
HINSTANCE m_hInstance; // handle to caller's instance
TCHAR m_szFmtDLLName[MAX_NAME_BUFFER]; // calling DLL's name
LONG m_lDetail; // level of detailing for TRACE
TCHAR m_szLogFilePath[MAX_PATH]; // log file path
BOOL m_bLogToDebugger; // log to the debugger
BOOL m_bLogToUI; // log to a UI, (window?)
TCHAR m_szKeyName[MAX_NAME_BUFFER]; // KEY name (registry)
BOOL m_bLoggerInitialized; // Logger has valid data to function correctly
TCHAR m_szModeText[MAX_PATH * 2]; // Formatted logging text
TCHAR m_szTextBuffer[MAX_PATH]; // shared temporary text buffer
TCHAR m_szColumnHeader[MAX_PATH]; // column header information
BOOL m_bTruncate; // Truncate file on BOOT
BOOL m_bClear; // Clear Log file on BOOT
};
//
// TEMPROARY ONLY!!!!
// Define CWiaLogProc to be CWiaLogProcEx. This is only until drivers are moved over to the new system!
//
#define CWiaLogProc CWiaLogProcEx
#endif