/*++ Copyright (c) 1997 Microsoft Corporation Module Name: stitrace.h Abstract: This file defines functions and types required to support file logging for all STI components Author: Vlad Sadovsky (vlads) 02-Sep-1997 Environment: User Mode - Win32 Revision History: 02-Sep-1997 VladS created --*/ # ifndef _STITRACE_H_ # define _STITRACE_H_ # include /*********************************************************** * Named constants definitions ************************************************************/ #define STI_MAX_LOG_SIZE 1000000 // in bytes #define STI_TRACE_INFORMATION 0x00000001 #define STI_TRACE_WARNING 0x00000002 #define STI_TRACE_ERROR 0x00000004 #define STI_TRACE_ADD_TIME 0x00010000 #define STI_TRACE_ADD_MODULE 0x00020000 #define STI_TRACE_ADD_THREAD 0x00040000 #define STI_TRACE_ADD_PROCESS 0x00080000 #define STI_TRACE_LOG_TOUI 0x00100000 #define STI_TRACE_MESSAGE_TYPE_MASK 0x0000ffff #define STI_TRACE_MESSAGE_FLAGS_MASK 0xffff0000 #ifndef STIMON_MSG_LOG_MESSAGE // BUGBUG #define STIMON_MSG_LOG_MESSAGE WM_USER+205 #endif #ifdef __cplusplus // // Class definitions used only in C++ code // #include #include #include #ifndef DLLEXP //#define DLLEXP __declspec( dllexport ) #define DLLEXP #endif /*********************************************************** * Type Definitions ************************************************************/ #define SIGNATURE_FILE_LOG (DWORD)'SFLa' #define SIGNATURE_FILE_LOG_FREE (DWORD)'SFLf' #define STIFILELOG_CHECK_TRUNCATE_ON_BOOT 0x00000001 class STI_FILE_LOG : public BASE { private: DWORD m_dwSignature; LPCTSTR m_lpszSource; // Name of the file , containing log DWORD m_dwReportMode; // Bit mask , describing which messages types get reported DWORD m_dwMaxSize; // Maximum size ( in bytes ) HANDLE m_hLogFile; CRIT_SECT m_CritSect; HANDLE m_hMutex; HMODULE m_hDefaultMessageModule; LONG m_lWrittenHeader; TCHAR m_szLogFilePath[MAX_PATH]; TCHAR m_szTracerName[16]; TCHAR m_szProcessName[13]; HWND m_hLogWindow ; VOID WriteStringToLog( LPCTSTR pszTextBuffer, BOOL fFlush=FALSE ); public: DLLEXP STI_FILE_LOG( IN LPCTSTR lpszTracerName, IN LPCTSTR lpszLogName, IN DWORD dwFlags = 0, IN HMODULE hMessageModule = NULL ); DLLEXP ~STI_FILE_LOG( VOID); // *** IUnknown methods *** STDMETHODIMP QueryInterface( REFIID riid, LPVOID * ppvObj); STDMETHODIMP_(ULONG) AddRef( void); STDMETHODIMP_(ULONG) Release( void); BOOL inline IsValid(VOID) { return (( QueryError() == NO_ERROR) && (m_dwSignature == SIGNATURE_FILE_LOG)); } DWORD inline SetReportMode( DWORD dwNewMode ) { DWORD dwOldMode = m_dwReportMode; m_dwReportMode = dwNewMode; return dwOldMode; } DWORD inline QueryReportMode( VOID ) { return m_dwReportMode; } VOID inline SetLogWindowHandle( HWND hwnd ) { m_hLogWindow = hwnd; } VOID WriteLogSessionHeader( VOID ); DLLEXP void ReportMessage( DWORD dwType, LPCTSTR psz, ... ); DLLEXP void STI_FILE_LOG:: ReportMessage( DWORD dwType, DWORD idMessage, ... ); DLLEXP void vReportMessage( DWORD dwType, LPCTSTR psz, va_list arglist ); }; typedef STI_FILE_LOG * LPSTI_FILE_LOG; #endif // C++ // // C calls to allow non-C++ code access file logging objects // #ifdef __cplusplus extern "C" { #endif HANDLE WINAPI CreateStiFileLog( IN LPCTSTR lpszTracerName, IN LPCTSTR lpszLogName, IN DWORD dwReportMode ); DWORD WINAPI CloseStiFileLog( IN HANDLE hFileLog ); DWORD WINAPI ReportStiLogMessage( IN HANDLE hFileLog, IN DWORD dwType, IN LPCTSTR psz, ... ); #ifdef __cplusplus } #endif #endif // _STITRACE_H_ /************************ End of File ***********************/