196 lines
5.4 KiB
C++
196 lines
5.4 KiB
C++
|
//---------------------------------------------------------------------------
|
||
|
//
|
||
|
// 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
|