/******************************************************************************* * * (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 // 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