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

167 lines
4.9 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1997.
//
// File: datasrc.hxx
//
// Contents: exposes the required DSO interfaces
//
// History: 3-30-97 MohamedN Created
//
//----------------------------------------------------------------------------
#pragma once
#include <impiunk.hxx>
#include "proputl.hxx" // CMDSProps
#include <parsver.hxx> // CImpIParserVerify
//
// externals
//
extern "C" const GUID CLSID_CiFwDSO;
//+---------------------------------------------------------------------------
//
// Class: CDataSrc
//
// Purpose: exposes the required DSO interfaces.
//
// History: 03-27-97 mohamedn created
// 09-05-97 danleg added IDBInfo & ISupportErrorInfo
//
//----------------------------------------------------------------------------
class CDataSrc : public IDBInitialize,
public IDBProperties,
public IDBCreateSession,
public IPersist,
public IDBInfo
{
public:
CDataSrc( IUnknown * pUnkOuter,
IUnknown ** ppUnkInner);
~CDataSrc();
//
// IUnknown methods.
//
STDMETHOD(QueryInterface) ( THIS_ REFIID riid, LPVOID *ppiuk )
{
// Delegate to outer unk if aggregated
return _pUnkOuter->QueryInterface( riid, ppiuk );
}
STDMETHOD(RealQueryInterface) ( THIS_ REFIID riid, LPVOID *ppiuk );
STDMETHOD_(ULONG, AddRef) (THIS) { return _pUnkOuter->AddRef(); }
STDMETHOD_(ULONG, Release) (THIS) { return _pUnkOuter->Release(); }
//
// IDBInitialize methods
//
STDMETHOD (Initialize) ( THIS_ );
STDMETHOD (Uninitialize) ( THIS_ );
//
// IDBProperties methods
//
STDMETHOD (GetProperties) ( THIS_
ULONG cPropertySets,
const DBPROPIDSET rgPropertySets[],
ULONG* pcProperties,
DBPROPSET** prgProperties);
STDMETHOD (SetProperties) ( THIS_
ULONG cProperties,
DBPROPSET rgProperties[]);
STDMETHOD (GetPropertyInfo) ( THIS_
ULONG cPropertyIDSets,
const DBPROPIDSET rgPropertyIDSets[],
ULONG * pcPropertyInfoSets,
DBPROPINFOSET ** prgPropertyInfoSets,
OLECHAR ** ppDescBuffer);
//
// IDBCreateSession methods.
//
STDMETHOD (CreateSession) ( THIS_
IUnknown * pUnkOuter,
REFIID riid,
IUnknown ** ppDBSession );
//
// IPersist methods
//
STDMETHODIMP GetClassID ( CLSID *pClassID );
//
// IDBInfo methods
//
STDMETHOD (GetKeywords) ( THIS_
LPOLESTR * ppwszKeywords );
STDMETHOD (GetLiteralInfo) ( THIS_
ULONG cLiterals,
const DBLITERAL rgLiterals[],
ULONG * pcLiteralInfo,
DBLITERALINFO ** prgLiteralInfo,
OLECHAR ** ppCharBuffer );
//
// non-interface methods
//
void IncSessionCount() { InterlockedIncrement( &_cSessionCount ); }
void DecSessionCount() { InterlockedDecrement( &_cSessionCount ); }
void CreateGlobalViews( IParserSession * pIPSession );
//
// Access methods
//
CMDSProps* GetDSPropsPtr() { return &_UtlProps; }
IUnknown * GetOuterUnk() { return _pUnkOuter; }
static void DupImpersonationToken( HANDLE & hToken );
private:
LONG _cSessionCount;
BOOL _fDSOInitialized;
BOOL _fGlobalViewsCreated;
LPUNKNOWN _pUnkOuter;
CImpIUnknown<CDataSrc> _impIUnknown;
CMutexSem _mtxDSO;
//
// SQL Text Parser
//
XInterface<IParser> _xIParser;
XInterface<CImpIParserVerify> _xIPVerify;
//
// Property handlers
//
CMDSPropInfo _UtlPropInfo;
CMDSProps _UtlProps;
//
// ISupportErrorInfo
//
CCIOleDBError _ErrorInfo;
};