windows-nt/Source/XPSP1/NT/inetsrv/query/sdk/smpfilt/smpfilt.hxx
2020-09-26 16:20:57 +08:00

183 lines
4.6 KiB
C++

//+-------------------------------------------------------------------------
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// Copyright (c) 1998-1999 Microsoft Corporation. All Rights Reserved.
//
// File: smpfilt.hxx
//
// Contents: Sample filter declarations
//
// Platform: Windows 2000
//
//--------------------------------------------------------------------------
#pragma once
//+-------------------------------------------------------------------------
//
// Global definitions
//
//--------------------------------------------------------------------------
const ULONG TEXT_FILTER_CHUNK_SIZE = 10000L; // size of character buffers
long g_lInstances = 0; // Global count of CSmpFilt and CSmpFiltCF instances
GUID const guidStorage = PSGUID_STORAGE; // GUID for storage property set
//C-------------------------------------------------------------------------
//
// Class: CSmpFilter
//
// Purpose: Implements interfaces of sample filter
//
//--------------------------------------------------------------------------
// SmpFilter Class ID
// {8B0E5E70-3C30-11d1-8C0D-00AA00C26CD4}
GUID const CLSID_CSmpFilter =
{
0x8b0e5e70,
0x3c30,
0x11d1,
{ 0x8c, 0xd, 0x0, 0xaa, 0x0, 0xc2, 0x6c, 0xd4 }
};
class CSmpFilter : public IFilter, public IPersistFile
{
public:
//
// From IUnknown
//
virtual SCODE STDMETHODCALLTYPE QueryInterface(
REFIID riid,
void ** ppvObject
);
virtual ULONG STDMETHODCALLTYPE AddRef();
virtual ULONG STDMETHODCALLTYPE Release();
//
// From IFilter
//
virtual SCODE STDMETHODCALLTYPE Init(
ULONG grfFlags,
ULONG cAttributes,
FULLPROPSPEC const * aAttributes,
ULONG * pFlags
);
virtual SCODE STDMETHODCALLTYPE GetChunk(
STAT_CHUNK * pStat
);
virtual SCODE STDMETHODCALLTYPE GetText(
ULONG * pcwcBuffer,
WCHAR * awcBuffer
);
virtual SCODE STDMETHODCALLTYPE GetValue(
PROPVARIANT ** ppPropValue
);
virtual SCODE STDMETHODCALLTYPE BindRegion(
FILTERREGION origPos,
REFIID riid,
void ** ppunk
);
//
// From IPersistFile
//
virtual SCODE STDMETHODCALLTYPE GetClassID(
CLSID * pClassID
);
virtual SCODE STDMETHODCALLTYPE IsDirty();
virtual SCODE STDMETHODCALLTYPE Load(
LPCWSTR pszFileName,
DWORD dwMode
);
virtual SCODE STDMETHODCALLTYPE Save(
LPCWSTR pszFileName,
BOOL fRemember
);
virtual SCODE STDMETHODCALLTYPE SaveCompleted(
LPCWSTR pszFileName
);
virtual SCODE STDMETHODCALLTYPE GetCurFile(
LPWSTR * ppszFileName
);
private:
friend class CSmpFilterCF;
CSmpFilter();
~CSmpFilter();
HANDLE m_hFile; // Handle to the input file
long m_lRefs; // Reference count
WCHAR * m_pwszFileName; // Name of input file to filter
ULONG m_ulBufferLen; // Characters read from file to buffer
ULONG m_ulCharsRead; // Characters read from chunk buffer
ULONG m_ulChunkID; // Current chunk id
ULONG m_ulCodePage; // Current default codepage
BOOL m_fContents; // TRUE if contents requested
BOOL m_fEof; // TRUE if end of file reached
WCHAR m_wcsBuffer[TEXT_FILTER_CHUNK_SIZE]; // Buffer for UNICODE
};
//C-------------------------------------------------------------------------
//
// Class: CSmpFilterCF
//
// Purpose: Implements class factory for sample filter
//
//--------------------------------------------------------------------------
class CSmpFilterCF : public IClassFactory
{
public:
//
// From IUnknown
//
virtual SCODE STDMETHODCALLTYPE QueryInterface(
REFIID riid,
void ** ppvObject
);
virtual ULONG STDMETHODCALLTYPE AddRef();
virtual ULONG STDMETHODCALLTYPE Release();
//
// From IClassFactory
//
virtual SCODE STDMETHODCALLTYPE CreateInstance(
IUnknown * pUnkOuter,
REFIID riid, void ** ppvObject
);
virtual SCODE STDMETHODCALLTYPE LockServer(
BOOL fLock
);
private:
friend SCODE STDMETHODCALLTYPE DllGetClassObject(
REFCLSID cid,
REFIID iid,
void ** ppvObj
);
CSmpFilterCF();
~CSmpFilterCF();
long m_lRefs; // Reference count
};