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