mirror of https://github.com/lianthony/NT4.0
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.
125 lines
2.7 KiB
125 lines
2.7 KiB
/*++
|
|
|
|
Copyright (c) 1995-1996 Microsoft Corporation
|
|
|
|
Module Name :
|
|
|
|
ilogfile.hxx
|
|
|
|
Abstract:
|
|
|
|
This module defines the classes and functions for file buffering
|
|
used by File logger.
|
|
|
|
Author:
|
|
|
|
Murali R. Krishnan ( MuraliK ) 21-Feb-1996
|
|
|
|
Environment:
|
|
|
|
User Mode - Win32
|
|
|
|
Project:
|
|
|
|
Internet Server DLL
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
# ifndef _ILOGFILE_HXX_
|
|
# define _ILOGFILE_HXX_
|
|
|
|
/************************************************************
|
|
* Include Headers
|
|
************************************************************/
|
|
|
|
|
|
/************************************************************
|
|
* Type Definitions
|
|
************************************************************/
|
|
|
|
|
|
class ILOG_FILE {
|
|
|
|
public:
|
|
|
|
ILOG_FILE(VOID);
|
|
~ILOG_FILE(VOID);
|
|
|
|
LPCWSTR QueryFileName(VOID) const { return (m_rgchFileName); }
|
|
VOID Lock(VOID) { EnterCriticalSection( &m_csLock); }
|
|
VOID Unlock(VOID) { LeaveCriticalSection( &m_csLock); }
|
|
|
|
BOOL Write( IN PVOID pvData, IN DWORD cbData);
|
|
|
|
LONG Reference(VOID)
|
|
{ return ( InterlockedIncrement( &m_cReferences)); }
|
|
LONG Dereference(VOID)
|
|
{ return ( InterlockedDecrement( &m_cReferences)); }
|
|
|
|
# if DBG
|
|
VOID Print(VOID) const;
|
|
# endif // DBG
|
|
|
|
|
|
protected:
|
|
BOOL Open( IN LPCWSTR pszFileName);
|
|
BOOL Flush(VOID);
|
|
BOOL Close(VOID);
|
|
|
|
|
|
public:
|
|
|
|
LIST_ENTRY m_listEntry;
|
|
|
|
private:
|
|
|
|
LONG m_cReferences;
|
|
HANDLE m_hFile; // handle for current log file.
|
|
|
|
// buffering information
|
|
LPBYTE m_pvBuffer; // buffer for batched up records
|
|
DWORD m_cbBufferSize;
|
|
DWORD m_cbBufferUsed;
|
|
|
|
CRITICAL_SECTION m_csLock;
|
|
|
|
WCHAR m_rgchFileName[ MAX_PATH]; // current log file name.
|
|
|
|
|
|
/******************************
|
|
* Static members
|
|
******************************/
|
|
|
|
public:
|
|
|
|
static DWORD Initialize( VOID);
|
|
static DWORD Cleanup( VOID);
|
|
|
|
static BOOL FlushHandler(VOID);
|
|
static DWORD CloseFile(IN ILOG_FILE ** ppLogFile);
|
|
static ILOG_FILE * OpenFileForAppend( IN LPCWSTR pszFileName);
|
|
|
|
private:
|
|
|
|
static DWORD sm_nFiles;
|
|
static DWORD sm_dwFlushSchedulerCookie;
|
|
|
|
static LIST_ENTRY sm_listFiles;
|
|
static CRITICAL_SECTION sm_csFiles;
|
|
|
|
|
|
static BOOL ScheduleFlush(VOID);
|
|
|
|
static VOID LockFilesList(VOID) { EnterCriticalSection( &sm_csFiles); }
|
|
static VOID UnlockFilesList(VOID) { LeaveCriticalSection( &sm_csFiles); }
|
|
|
|
}; // class ILOG_FILE
|
|
|
|
|
|
typedef ILOG_FILE * PILOG_FILE;
|
|
|
|
# endif // _ILOGFILE_HXX_
|
|
|
|
/************************ End of File ***********************/
|