windows-nt/Source/XPSP1/NT/ds/adsi/router/crsembed.hxx
2020-09-26 16:20:57 +08:00

158 lines
4 KiB
C++

//-----------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1995.
//
// File: CRSEmbed.hxx
//
// Contents: IUnknown embedder for temptable.
//
// Functions:
//
// Notes:
//
//
// History: 08/30/96 | RenatoB | Created
//----------------------------------------------------------------------------
#ifndef _CREMBED_H_
#define _CREMBED_H_
//-----------------------------------------------------------------------------
// @class CRowsetInfo | ADSI embedding of Rowset,
// to give our IrowsetInfo interface
//
//
//-----------------------------------------------------------------------------
class CRowProvider;
class CRowsetInfo;
class CCommandObject;
class CSessionObject;
class CRowsetInfo : INHERIT_TRACKING,
public IRowsetInfo
{
friend HRESULT CreateTempTable(
IRowProvider*,
IUnknown*, IUnknown* ,
CSessionObject* ,
CCommandObject* ,
ULONG,DBPROPSET[],
ULONG,
HACCESSOR[],
REFIID,
IUnknown**
);
public:
DECLARE_STD_REFCOUNTING
DECLARE_IRowsetInfo_METHODS
STDMETHODIMP QueryInterface(REFIID, LPVOID *);
CRowsetInfo(
IUnknown *pUnkOuter,
IUnknown *pParentObject,
CSessionObject *pCSession,
CCommandObject *pCCommand
);
~CRowsetInfo();
STDMETHODIMP FInit(
IUnknown *pRowset //@parm IN| TmpTable interface
);
private:
STDMETHODIMP InitProperties(void);
// Frees the memory of an array of PropertySets
STDMETHODIMP_(void)
FreePropertySets(
ULONG cPropertySets, // Count of property sets
DBPROPSET *rgPropertySets // Array of property sets to be freed
);
STDMETHODIMP_(LONG )SearchGuid(
GUID riid // GUID of the DBPROPSET
);
STDMETHODIMP_(LONG )SearchPropid(
ULONG ibPropertySet,
DWORD dwPropertyID
);
IUnknown *_pUnkOuter;
IUnknown *_pRowset;
IUnknown *_pParentObject;
CSessionObject *_pCSession;
CCommandObject *_pCCommand;
CRITICAL_SECTION _csRowsetInfo;
IMalloc* _pMalloc;
ULONG _cPropertySets;
DBPROPSET *_pPropertySets;
// Status word.
enum Status {
STAT_UNINIT = 0x0000, //GetProperties Not initialized
STAT_DIDINIT = 0x0001, //Get Properties initialized successfully
STAT_INITERROR = 0x0002, //Get Properties Failed initialization
};
DWORD _dwStatus;
};
class CAutoBlock {
friend class CRowsetInfo;
friend class CRowsetInfo;
friend class CImpIAccessor;
private:
CAutoBlock( CRITICAL_SECTION *pCrit );
~CAutoBlock();
void UnBlock();
CRITICAL_SECTION *_pCrit;
};
inline CAutoBlock::CAutoBlock(
CRITICAL_SECTION *pCrit ) //@parm IN | The critical section.
{
// It is OK to pass a NULL ptr to this routine. It is a NOOP.
// Note that passing NULL to EnterCriticalSection blows up.
if (pCrit)
::EnterCriticalSection( pCrit );
_pCrit = pCrit;
};
inline CAutoBlock::~CAutoBlock()
{
if (_pCrit)
::LeaveCriticalSection( _pCrit );
}
//-----------------------------------------------------------------------------
// @mfunc
// Ends blocking explicitly. Thereafter, the destructor does nothing.
//-----------------------------------------------------------------------------------
inline void CAutoBlock::UnBlock()
{
// Clear the critical-section member,
// so that the destructor doesn't do anything.
if (_pCrit)
::LeaveCriticalSection( _pCrit );
_pCrit = NULL;
}
#endif //_CRSEMBED_H_