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.
 
 
 
 
 
 

131 lines
2.6 KiB

#ifndef _W3_TRACE_LOG_
#define _W3_TRACE_LOG_
class W3_TRACE_LOG;
class IRTL_DLLEXP W3_TRACE_LOG_FACTORY
{
public:
static HRESULT CreateTraceLogFactory(W3_TRACE_LOG_FACTORY ** ppLogFactory, HANDLE hFile);
VOID DestroyTraceLogFactory();
HRESULT CreateTraceLog(W3_TRACE_LOG ** ppLog);
HRESULT AppendData(LPVOID pvData, ULONG cbSize);
private:
W3_TRACE_LOG_FACTORY() { }
~W3_TRACE_LOG_FACTORY() { }
//
// periodic callback method
//
static VOID CALLBACK TimerCallback(PVOID lpParameter, BOOLEAN TimerOrWaitFired);
//
// Write the internal buffer out to file
//
HRESULT CommitToFile();
//
// Handle to file to write to
//
HANDLE m_hFile;
//
// Handle to timer for time based scavenging
//
HANDLE m_hTimer;
//
// Size of buffer in bytes
//
ULONG m_ulBufferSizeInBytes;
//
// Data storage and allocation slop management
//
BUFFER m_Buffer;
//
// synchronization method for writing to factory
//
CRITICAL_SECTION m_cs;
//
// flag that m_cs was initialized
//
BOOL m_fInitCs;
};
class IRTL_DLLEXP W3_TRACE_LOG
{
public:
W3_TRACE_LOG(W3_TRACE_LOG_FACTORY * pLogFactory);
VOID DestroyTraceLog();
VOID SetBlocking(BOOL fBlock);
VOID SetBuffering(BOOL fBuffer);
VOID ClearBuffer();
VOID Indent() { InterlockedIncrement(&m_lIndentLevel); }
VOID Undent() { InterlockedDecrement(&m_lIndentLevel); }
HRESULT Trace(LPCWSTR pszFormat, ...);
private:
W3_TRACE_LOG();
~W3_TRACE_LOG();
//
// back pointer to logfactory
//
W3_TRACE_LOG_FACTORY * m_pLogFactory;
//
// Whether or not writes to the local log should be synchronized
//
BOOL m_fBlock;
//
// synchronization method for local log writes (if needed)
//
CRITICAL_SECTION m_cs;
//
// if criticalsection has been initialized
//
BOOL m_fCritSecInitialized;
//
// Flag whether or not to buffer writes to this W3_TRACE_LOG
// TRUE (default) means buffer
// FALSE means write to W3_TRACE_LOG_FACTORY immediately
//
BOOL m_fBuffer;
//
// Size of the buffer in bytes
//
ULONG m_ulBufferSizeInBytes;
//
// Number of indents to place in front of traces
//
LONG m_lIndentLevel;
//
// BUFFER for storage of data, and sizing slop management
//
BUFFER m_Buffer;
};
#endif // _W3_TRACE_LOG_