|
|
//---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1996
//
// File: csession.hxx
//
// Contents: Microsoft OleDB/OleDS Session Object for ADSI
//
//
// History: 08-01-96 shanksh Created.
//
//----------------------------------------------------------------------------
#ifndef _CSESSION_HXX
#define _CSESSION_HXX
class CessionObject;
class CSessionObject : INHERIT_TRACKING, public IGetDataSource, public IOpenRowset, public ISessionProperties, #if (!defined(BUILD_FOR_NT40))
public IDBCreateCommand, public IBindResource #else
public IDBCreateCommand #endif
{ private:
LPUNKNOWN _pUnkOuter; //
// No. of active commands
//
DWORD _cCommandsOpen; //
// Utility object to manage properties
//
PCUTILPROP _pUtilProp; //
// parent data source object
//
PCDSOObject _pDSO;
IDirectorySearch * _pDSSearch; //
// Credentials from the Data Source
//
CCredentials _Credentials;
IMalloc * _pIMalloc;
STDMETHODIMP GetDefaultColumnInfo( ULONG * pcColumns, DBCOLUMNINFO ** prgInfo, OLECHAR ** ppStringBuffer );
STDMETHODIMP SetSearchPrefs( void );
public:
STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID FAR* ppvObj) ;
DECLARE_STD_REFCOUNTING
DECLARE_IGetDataSource_METHODS
DECLARE_IOpenRowset_METHODS
DECLARE_ISessionProperties_METHODS
DECLARE_IDBCreateCommand_METHODS
#if (!defined(BUILD_FOR_NT40))
//IBindResource methods
STDMETHODIMP Bind ( IUnknown * punkOuter, LPCOLESTR pwszURL, DBBINDURLFLAG dwBindFlags, REFGUID rguid, REFIID riid, IAuthenticate * pAuthenticate, DBIMPLICITSESSION * pImplSession, DWORD * pdwBindStatus, IUnknown ** ppUnk ); #endif
inline void DecrementOpenCommands() { InterlockedDecrement( (LONG*) &_cCommandsOpen ); }
inline void IncrementOpenCommands() { InterlockedIncrement( (LONG*) &_cCommandsOpen ); }
inline BOOL IsCommandOpen() { return (_cCommandsOpen > 0) ? TRUE : FALSE;};
inline HANDLE GetThreadToken() { return _pDSO->GetThreadToken(); }
inline BOOL IsIntegratedSecurity() { return _pDSO->IsIntegratedSecurity(); }
inline HRESULT SetUserName(LPWSTR lpszUserName) { return _Credentials.SetUserName(lpszUserName); }
inline HRESULT SetPassword(LPWSTR lpszPassword) { return _Credentials.SetPassword(lpszPassword); }
inline void SetAuthFlag(DWORD dwAuthFlag) { _Credentials.SetAuthFlags(dwAuthFlag); }
CSessionObject::CSessionObject(LPUNKNOWN pUnkOuter);
CSessionObject::~CSessionObject();
BOOL FInit(CDSOObject *pDSO, CCredentials& Credentials );
//Wrapper around IOpenRowset::OpenRowset for binding with
//IAuthenticate information using IBindResource::Bind.
HRESULT OpenRowsetWithCredentials ( IUnknown * pUnkOuter, DBID * pTableID, DBID * pIndexID, REFIID riid, ULONG cPropertySets, DBPROPSET rgPropertySets[], CCredentials* pCredentials, IUnknown ** ppRowset );
#if (!defined(BUILD_FOR_NT40))
//Helper function for validating arguments of IBindResource::Bind
HRESULT ValidateBindArgs( IUnknown * punkOuter, LPCOLESTR pwszURL, DBBINDURLFLAG dwBindFlags, REFGUID rguid, REFIID riid, IAuthenticate * pAuthenticate, DBIMPLICITSESSION * pImplSession, DWORD * pdwBindStatus, IUnknown ** ppUnk );
//Helper Function for direct binding to a row
HRESULT BindToRow(IUnknown *, LPCOLESTR, IAuthenticate *, DWORD, REFIID, IUnknown**);
//Helper Function for direct binding to a rowset
HRESULT BindToRowset(IUnknown*, LPCOLESTR, IAuthenticate *, DWORD, REFIID, IUnknown**);
//Helper function to get Bind flags from init properties
DWORD BindFlagsFromDbProps();
//Helper function for direct binding to DataSource
HRESULT BindToDataSource(IUnknown*, LPCOLESTR, IAuthenticate*, DWORD, REFIID, IUnknown**);
//Helper function for building Absolute URL from Relative URL
HRESULT BuildAbsoluteURL(CComBSTR, CComBSTR&);
//Helper function to find out if a URL is absolute.
//This just checks if the URL starts with one of the
//allowed prefixes: LDAP,WINNT,NDS or NWCOMPAT
bool bIsAbsoluteURL(LPCOLESTR); #endif
};
#endif
|