195 lines
5.7 KiB
C++
195 lines
5.7 KiB
C++
|
|
/*******************************************************************************
|
|
*
|
|
* (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
|