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.
 
 
 
 
 
 

104 lines
2.8 KiB

#ifndef __WBEM_LOGFILE_CONSUMER__H_
#define __WBEM_LOGFILE_CONSUMER__H_
#include <unk.h>
#include <wbemidl.h>
#include <ErrorObj.h>
#include "txttempl.h"
#include <stdio.h>
class CLogFileConsumer : public CUnk
{
protected:
class XProvider : public CImpl<IWbemEventConsumerProvider, CLogFileConsumer>
{
public:
XProvider(CLogFileConsumer* pObj)
: CImpl<IWbemEventConsumerProvider, CLogFileConsumer>(pObj){}
HRESULT STDMETHODCALLTYPE FindConsumer(
IWbemClassObject* pLogicalConsumer,
IWbemUnboundObjectSink** ppConsumer);
} m_XProvider;
friend XProvider;
class XInit : public CImpl<IWbemProviderInit, CLogFileConsumer>
{
public:
XInit(CLogFileConsumer* pObj)
: CImpl<IWbemProviderInit, CLogFileConsumer>(pObj){}
HRESULT STDMETHODCALLTYPE Initialize(
LPWSTR, LONG, LPWSTR, LPWSTR, IWbemServices*, IWbemContext*,
IWbemProviderInitSink*);
} m_XInit;
friend XInit;
public:
CLogFileConsumer(CLifeControl* pControl = NULL, IUnknown* pOuter = NULL)
: CUnk(pControl, pOuter), m_XProvider(this), m_XInit(this)
{}
~CLogFileConsumer(){}
void* GetInterface(REFIID riid);
};
class CLogFileSink : public CUnk
{
protected:
class XSink : public CImpl<IWbemUnboundObjectSink, CLogFileSink>
{
public:
XSink(CLogFileSink* pObj) :
CImpl<IWbemUnboundObjectSink, CLogFileSink>(pObj){}
HRESULT STDMETHODCALLTYPE IndicateToConsumer(
IWbemClassObject* pLogicalConsumer, long lNumObjects,
IWbemClassObject** apObjects);
} m_XSink;
friend XSink;
protected:
CTextTemplate m_Template;
WString m_wsFile;
// determines whether file is too large, archives old if needed
// probably returns INVALID_HANDLE_VALUE on error
HRESULT GetFileHandle(HANDLE& handle);
// don't access this directly. use GetFileHandle
HANDLE m_hFile;
ErrorObj* m_pErrorObj;
bool m_bUnicode; // do the file be unicode?
UINT64 m_maxFileSize;
bool IsFileTooBig(UINT64 maxFileSize, HANDLE hFile);
bool IsFileTooBig(UINT64 maxFileSize, WString& fileName);
HRESULT ArchiveFile(WString& fileName);
bool GetNumericExtension(WCHAR* pName, int& foundNumber);
void OpenThisFile(WString fname, bool openExisting, bool allowDelete);
void CloseCurrentFile();
public:
CLogFileSink(CLifeControl* pControl = NULL)
: CUnk(pControl), m_XSink(this),m_pErrorObj(NULL),
m_hFile(INVALID_HANDLE_VALUE),
m_maxFileSize(0), m_bUnicode(false)
{}
HRESULT Initialize(IWbemClassObject* pLogicalConsumer);
~CLogFileSink();
void* GetInterface(REFIID riid);
};
#endif