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.
|
|
///////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) Microsoft Corp. All rights reserved.
//
// FILE
//
// logfile.h
//
// SYNOPSIS
//
// Declares the class LogFile.
//
///////////////////////////////////////////////////////////////////////////////
#ifndef LOGFILE_H
#define LOGFILE_H
#pragma once
#include "guard.h"
#include "iaspolcy.h"
#include "sdoias.h"
// Assumes ownership of a string pointer allocated with operator new[] and
// frees the string in its destructor.
class StringSentry { public: explicit StringSentry(wchar_t* p = 0) throw (); ~StringSentry() throw ();
const wchar_t* Get() const throw (); bool IsNull() const throw ();
operator const wchar_t*() const throw (); operator wchar_t*() throw ();
void Swap(StringSentry& other) throw ();
StringSentry& operator=(wchar_t* p) throw ();
private: wchar_t* sz;
// Not implemented.
StringSentry(const StringSentry&); StringSentry& operator=(const StringSentry&); };
// Maintains a generic logfile that is periodically rolled over either when a
// specified interval has elapsed or the logfile reaches a certain size.
class LogFile : private Guardable { public: LogFile() throw (); ~LogFile() throw ();
// Various properties supported by the logfile.
void SetDeleteIfFull(bool newVal) throw (); DWORD SetDirectory(const wchar_t* newVal) throw (); void SetMaxSize(const ULONGLONG& newVal) throw (); DWORD SetPeriod(NEW_LOG_FILE_FREQUENCY newVal) throw ();
// Write a record to the logfile.
bool Write( IASPROTOCOL protocol, const SYSTEMTIME& st, const BYTE* buf, DWORD buflen, bool allowRetry = true ) throw ();
// Close the logfile.
void Close() throw ();
private: // Checks the state of the current file handle and opens a new file if
// necessary.
void CheckFileHandle( IASPROTOCOL protocol, const SYSTEMTIME& st, DWORD buflen ) throw ();
// Create a new file including the directory if necessary. The caller is
// responsible for closing the returned handle.
HANDLE CreateDirectoryAndFile() throw ();
// Delete the oldest file in the logfile directory. Returns true if
// successful.
bool DeleteOldestFile(IASPROTOCOL protocol, const SYSTEMTIME& st) throw ();
// Extends the file number to include the century if necessary.
unsigned int ExtendFileNumber( const SYSTEMTIME& st, unsigned int narrow ) const throw ();
// Finds the lowest or highest log file number.
DWORD FindFileNumber( const SYSTEMTIME& st, bool findLowest, unsigned int& result ) const throw ();
// Returns the formatted logfile name. The caller is responsible for
// deleting the returned string.
wchar_t* FormatFileName(unsigned int number) const throw ();
// Returns the filter used to search for the file name.
const wchar_t* GetFileNameFilter() const throw ();
// Returns the format string used to create the file name.
const wchar_t* GetFileNameFormat() const throw ();
// Returns the numeric portion of the file name.
unsigned int GetFileNumber(const SYSTEMTIME& st) const throw ();
// Returns the 1-based week within the month for the given SYSTEMTIME.
DWORD GetWeekOfMonth(const SYSTEMTIME& st) const throw ();
// Tests the validity of a file number. len is the length in characters of
// the file name containing the number -- useful for width tests.
bool IsValidFileNumber(size_t len, unsigned int num) const throw ();
// Releases the current file (if any) and opens a new one.
void OpenFile(IASPROTOCOL protocol, const SYSTEMTIME& st) throw ();
// Scans the logfile directory to determine the next sequence number.
DWORD UpdateSequence() throw ();
// Functions that report the result of deleting an old log file to free up
// disk space.
void ReportOldFileDeleteError( IASPROTOCOL protocol, const wchar_t* oldfile, DWORD error ) const throw (); void ReportOldFileDeleted( IASPROTOCOL protocol, const wchar_t* oldfile ) const throw (); void ReportOldFileNotFound( IASPROTOCOL protocol ) const throw ();
// The logfile directory; does not have a trailing backslash.
StringSentry directory; // true if old logfiles should be deleted if the disk is full.
bool deleteIfFull; // The max size in bytes that the logfile will be allowed to reach.
ULARGE_INTEGER maxSize; // The period at which new log files are opened.
NEW_LOG_FILE_FREQUENCY period; // The current sequence number used for sized log files.
unsigned int seqNum; // Handle to the log file; may be invalid.
HANDLE file; // Current log file name; may be null.
StringSentry filename; // Time at which we last opened or tried to open the logfile.
SYSTEMTIME whenOpened; // Week at which we last opened or tried to open the logfile.
DWORD weekOpened; // Current size of the log file in bytes. Zero if no file is open.
ULARGE_INTEGER currentSize; // First day of the week for our locale.
DWORD firstDayOfWeek; // Handle used for reporting IAS events.
HANDLE iasEventSource; // Handle used for reporting RemoteAccess events.
HANDLE rasEventSource;
// Not implemented.
LogFile(const LogFile&); LogFile& operator=(const LogFile&); };
#endif // LOGFILE_H
|