167 lines
4.9 KiB
C++
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;
|
|
};
|
|
|
|
|
|
|