//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1991 - 2000. // // File: WrapStor.cxx // // Contents: Persistent property store (external to docfile) // // Classes: CPropertyStoreWrapper // // History: 17-Mar-97 KrishnaN Created // //---------------------------------------------------------------------------- #include #pragma hdrstop #include "wrapstor.hxx" //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::CPropertyStoreWrapper, public // // Arguments: [pAdviseStatus] - lets the object advise caller of status. // // Returns: Nothing // // History: 17-Mar-97 KrishnaN Created. // 01-Nov-98 KLam Added cbDiskSpaceToLeave to constructor // Pass cbDiskSpaceToLeave to CPropStoreManager // //---------------------------------------------------------------------------- CPropertyStoreWrapper::CPropertyStoreWrapper ( ICiCAdviseStatus *pAdviseStatus, ULONG ulMaxPropStoreMappedCachePrimary, ULONG ulMaxPropStoreMappedCacheSecondary, ULONG cbDiskSpaceToLeave ) : _lRefCount ( 1 ), _pStorage(0), { pAdviseStatus->AddRef(); // Hold on to it and release it at destruct time _xAdviseStatus.Set(pAdviseStatus); _pPropStoreMgr = new CPropStoreManager ( cbDiskSpaceToLeave ); _pPropStoreMgr->SetMappedCacheSize(ulMaxPropStoreMappedCachePrimary, PRIMARY_STORE); _pPropStoreMgr->SetMappedCacheSize(ulMaxPropStoreMappedCacheSecondary, SECONDARY_STORE); } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::~CPropertyStoreWrapper, private // // Arguments: None // // Returns: Nothing // // History: 17-Mar-97 KrishnaN Created. // //---------------------------------------------------------------------------- CPropertyStoreWrapper::~CPropertyStoreWrapper () { delete _pPropStoreMgr; delete _pStorage; } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::IsDirty, public // // Arguments: [pid] -- Propid to check. // // Returns: TRUE if [pid] can exist in property store (e.g. has been // registered). // // History: 17-Mar-97 KrishnaN Created. // //---------------------------------------------------------------------------- inline SCODE CPropertyStoreWrapper::IsDirty(BOOL &fIsDirty) const { fIsDirty = _pPropStoreMgr->IsDirty(); return S_OK; } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::CanStore, public // // Arguments: [pid] -- Propid to check. // // Returns: TRUE if [pid] can exist in property store (e.g. has been // registered). // // History: 17-Mar-97 KrishnaN Created. // //---------------------------------------------------------------------------- inline SCODE CPropertyStoreWrapper::CanStore( PROPID pid, BOOL &fCanStore ) { fCanStore = _pPropStoreMgr->CanStore( pid ); return S_OK; } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::Size, public // // Arguments: [pid] -- Propid whose size is queried. // [pusSize] -- Returns size, or 0 if it isn't in store. // // Returns: S_OK to indicate call succeeded. // // History: 17-Mar-97 KrishnaN Created. // //---------------------------------------------------------------------------- inline SCODE CPropertyStoreWrapper::Size( PROPID pid, unsigned * pusSize ) { *pusSize = _pPropStoreMgr->Size( pid ); return S_OK; } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::Type, public // // Arguments: [pid] -- Propid to check. // [pulType] -- Type of property, or VT_EMPTY if it isn't in store // // Returns: S_OK to indicate call succeeded. // // History: 17-Mar-97 KrishnaN Created. // //---------------------------------------------------------------------------- inline SCODE CPropertyStoreWrapper::Type( PROPID pid, PULONG pulType ) { *pulType = _pPropStoreMgr->Type( pid ); return S_OK; } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::WritePropertyInNewRecord, public // // Synopsis: Like WriteProperty, but also allocates record. // // Arguments: [pid] -- Propid to write. // [var] -- Property value // [pwid] - Workid of new record // // Returns: Success or Failure SCODE. // // History: 17-Mar-97 KrishnaN Created. // //---------------------------------------------------------------------------- inline SCODE CPropertyStoreWrapper::WritePropertyInNewRecord( PROPID pid, CStorageVariant const & var, WORKID *pwid) { SCODE sc = S_OK; TRY { *pwid = _pPropStoreMgr->WritePropertyInNewRecord( pid, var ); } CATCH ( CException, e ) { sc = e.GetErrorCode(); ciDebugOut((DEB_ERROR, "CPropertyStoreWrapper::WritePropertyInNewRecord caught exception 0x%X\n", sc)); } END_CATCH return sc; } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::CountRecordsInUse, public // // Returns: Count of 'top level' records (correspond to user wids) // // History: 17-Mar-97 KrishnaN Created. // //---------------------------------------------------------------------------- inline SCODE CPropertyStoreWrapper::CountRecordsInUse(ULONG &ulRecInUse) const { ulRecInUse = _pPropStoreMgr->CountRecordsInUse(); return S_OK; } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::MaxWorkId, public // // Returns: Maximum workid which has been allocated. // // History: 17-Mar-97 KrishnaN Created. // //---------------------------------------------------------------------------- inline SCODE CPropertyStoreWrapper::MaxWorkId(WORKID &wid) { wid = _pPropStoreMgr->MaxWorkId(); return S_OK; } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::FastInit, public // // Arguments: [pwszDirectory] -- Location of the property store // // Returns: Success or Failure SCODE. // // History: 17-Mar-97 KrishnaN Created. // //---------------------------------------------------------------------------- SCODE CPropertyStoreWrapper::FastInit( WCHAR const * pwszDirectory ) { SCODE sc = S_OK; TRY { Win4Assert (0 == _pStorage); XPtr xStorage(new CiStorage( pwszDirectory, _xAdviseStatus.GetReference(), FSCI_VERSION_STAMP)); _pPropStoreMgr->FastInit( xStorage.GetPointer() ); _pStorage = xStorage.Acquire(); } CATCH( CException, e ) { sc = e.GetErrorCode(); ciDebugOut((DEB_ERROR, "CPropertyStoreWrapper::FastInit caught exception 0x%X\n", sc)); } END_CATCH return sc; } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::LongInit, public // // Arguments: [fWasDirty] -- Is set to TRUE/FALSE to indiciate file corrpution // [cInconsistencies] -- Set to number of corruptions detected // // Returns: Succcess of Failure SCODE. // // History: 17-Mar-97 KrishnaN Created. // //---------------------------------------------------------------------------- SCODE CPropertyStoreWrapper::LongInit( BOOL & fWasDirty, ULONG & cInconsistencies, T_UpdateDoc pfnUpdateCallback, void const *pUserData) { SCODE sc = S_OK; TRY { _pPropStoreMgr->LongInit( fWasDirty, cInconsistencies, pfnUpdateCallback, pUserData ); } CATCH( CException, e ) { sc = e.GetErrorCode(); ciDebugOut((DEB_ERROR, "CPropertyStoreWrapper::LongInit caught exception 0x%X\n", sc)); } END_CATCH return sc; } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::Empty, public // // Returns: Success or Failure SCODE. // // History: 17-Mar-97 KrishnaN Created. // //---------------------------------------------------------------------------- SCODE CPropertyStoreWrapper::Empty() { SCODE sc = S_OK; TRY { _pPropStoreMgr->Empty(); } CATCH( CException, e ) { sc = e.GetErrorCode(); ciDebugOut((DEB_ERROR, "CPropertyStoreWrapper::Empty caught exception 0x%X\n", sc)); } END_CATCH return sc; } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::BeginTransaction, public // // Arguments: [pulReturn] -- Returns the transaction code. // // Returns: Success or Failure SCODE. // // History: 17-Mar-97 KrishnaN Created. // //---------------------------------------------------------------------------- SCODE CPropertyStoreWrapper::BeginTransaction( PULONG_PTR pulReturn) { SCODE sc = S_OK; TRY { *pulReturn = _pPropStoreMgr->BeginTransaction(); } CATCH( CException, e ) { sc = e.GetErrorCode(); ciDebugOut((DEB_ERROR, "CPropertyStoreWrapper::BeginTransaction caught exception 0x%X\n", sc)); } END_CATCH return sc; } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::Setup, public // // Arguments: [pid] -- Propid // [vt] -- Datatype of property. VT_VARIANT if unknown. // [cbMaxLen] -- Soft-maximum length for variable length // properties. This much space is pre-allocated // in original record. // [ulToken] -- Token of transaction // // Returns: Success or failure code. // // History: 17-Mar-97 KrishnaN Created. // //---------------------------------------------------------------------------- SCODE CPropertyStoreWrapper::Setup( PROPID pid, ULONG vt, DWORD cbMaxLen, ULONG_PTR ulToken, BOOL fCanBeModified, ULONG dwStoreLevel ) { SCODE sc = S_OK; TRY { _pPropStoreMgr->Setup ( pid, vt, cbMaxLen, ulToken ); } CATCH( CException, e ) { sc = e.GetErrorCode(); ciDebugOut((DEB_ERROR, "CPropertyStoreWrapper::Setup caught exception 0x%X\n", sc)); } END_CATCH return sc; } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::EndTransaction, public // // Arguments: [ulToken] -- Token of transaction // [fCommit] -- TRUE --> Commit transaction // [pidFixedPrimary] -- Every workid with this pid will move to the // same workid in the new property cache. // [pidFixedSecondary] -- Every workid with this pid will move to the // same workid in the new property cache. // // Returns: Success or failure code. // // History: 17-Mar-97 KrishnaN Created. // //---------------------------------------------------------------------------- SCODE CPropertyStoreWrapper::EndTransaction(ULONG_PTR ulToken, BOOL fCommit, PROPID pidFixedPrimary, PROPID pidFixedSecondary ) { SCODE sc = S_OK; TRY { _pPropStoreMgr->EndTransaction ( ulToken, fCommit, pidFixedPrimary, pidFixedSecondary ); } CATCH( CException, e ) { sc = e.GetErrorCode(); ciDebugOut((DEB_ERROR, "CPropertyStoreWrapper::EndTransaction caught exception 0x%X\n", sc)); } END_CATCH return sc; } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::WriteProperty, public // // Arguments: [wid] -- Workid // [pid] -- Propid // [var] -- Value // // Returns: Success or failure. // // History: 17-Mar-97 KrishnaN Created. // //---------------------------------------------------------------------------- SCODE CPropertyStoreWrapper::WriteProperty(WORKID wid, PROPID pid, CStorageVariant const & var, BOOL &fExists) { SCODE sc = _pPropStoreMgr->WriteProperty ( wid, pid, var ); fExists = (S_OK == sc); return sc; } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::ReadProperty, public // // Arguments: [wid] -- Workid // [pid] -- Propid // [pbData] -- Place to return the value // [pcb] -- On input, the maximum number of bytes to // write at pbData. On output, the number of // bytes written if the call was successful, // else the number of bytes required. // // Returns: Success or failure. // // History: 17-Mar-97 KrishnaN Created. // //---------------------------------------------------------------------------- SCODE CPropertyStoreWrapper::ReadProperty( WORKID wid, PROPID pid, PROPVARIANT * pbData, unsigned * pcb, BOOL &fExists) { SCODE sc = S_OK; TRY { fExists = _pPropStoreMgr->ReadProperty ( wid, pid, pbData, pcb ); } CATCH( CException, e ) { sc = e.GetErrorCode(); ciDebugOut((DEB_ERROR, "CPropertyStoreWrapper::ReadProperty caught exception 0x%X\n", sc)); fExists = FALSE; } END_CATCH return sc; } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::ReadProperty, public // // Arguments: [wid] -- Workid // [pid] -- Propid // [var] -- Property to read into // [pbExtra] -- Place to store additional pointer(s). // [pcbExtra] -- On input, the maximum number of bytes to // write at pbExtra. On output, the number of // bytes written if the call was successful, // else the number of bytes required. // [fExists] -- Indicates if the property exists or not. // // Returns: Success code // // History: 17-Mar-97 KrishnaN Created. // //---------------------------------------------------------------------------- SCODE CPropertyStoreWrapper::ReadProperty( WORKID wid, PROPID pid, PROPVARIANT & var, BYTE * pbExtra, unsigned * pcbExtra, BOOL &fExists ) { SCODE sc = S_OK; TRY { fExists = _pPropStoreMgr->ReadProperty ( wid, pid, var, pbExtra, pcbExtra ); } CATCH( CException, e ) { sc = e.GetErrorCode(); ciDebugOut((DEB_ERROR, "CPropertyStoreWrapper::ReadProperty caught exception 0x%X\n", sc)); fExists = FALSE; } END_CATCH return sc; } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::ReadProperty, public // // Arguments: [wid] -- Workid // [pid] -- Propid // [var] -- Variant written here // [pbExtra] -- Place to store additional pointer(s). // [pcbExtra] -- On input, the maximum number of bytes to // write at pbExtra. On output, the number of // bytes written if the call was successful, // else the number of bytes required. // // Returns: // // History: 17-Mar-97 KrishnaN Created. // //---------------------------------------------------------------------------- SCODE CPropertyStoreWrapper::ReadProperty( HPropRecord hPropRecord, PROPID pid, PROPVARIANT & var, BYTE * pbExtra, unsigned * pcbExtra, BOOL &fExists ) { SCODE sc = S_OK; TRY { fExists = _pPropStoreMgr->ReadProperty ( *((CCompositePropRecord *)hPropRecord), pid, var, pbExtra, pcbExtra ); } CATCH( CException, e ) { sc = e.GetErrorCode(); ciDebugOut((DEB_ERROR, "CPropertyStoreWrapper::ReadProperty caught exception 0x%X\n", sc)); fExists = FALSE; } END_CATCH return sc; } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::ReadProperty, public // // Arguments: [PropRec] -- Pre-opened property record // [pid] -- Propid // [pbData] -- Place to return the value // [pcb] -- On input, the maximum number of bytes to // write at pbData. On output, the number of // bytes written if the call was successful, // else the number of bytes required. // Returns: Success or failure. // // History: 17-Mar-97 KrishnaN Created. // //---------------------------------------------------------------------------- SCODE CPropertyStoreWrapper::ReadProperty( HPropRecord hPropRecord, PROPID pid, PROPVARIANT * pbData, unsigned * pcb, BOOL &fExists) { SCODE sc = S_OK; TRY { fExists = _pPropStoreMgr->ReadProperty ( *((CCompositePropRecord *)hPropRecord), pid, pbData, pcb ); } CATCH( CException, e ) { sc = e.GetErrorCode(); ciDebugOut((DEB_ERROR, "CPropertyStoreWrapper::ReadProperty caught exception 0x%X\n", sc)); fExists = FALSE; } END_CATCH return sc; } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::ReadProperty, public // // Arguments: [wid] -- Workid // [pid] -- Propid // [var] -- Place to return the value // // Returns: Success or failure. // // History: 17-Mar-97 KrishnaN Created. // //---------------------------------------------------------------------------- SCODE CPropertyStoreWrapper::ReadProperty( WORKID wid, PROPID pid, PROPVARIANT & var, BOOL &fExists) { SCODE sc = S_OK; TRY { fExists = _pPropStoreMgr->ReadProperty ( wid, pid, var ); } CATCH( CException, e ) { sc = e.GetErrorCode(); ciDebugOut((DEB_ERROR, "CPropertyStoreWrapper::ReadPropertyInNewRecord caught exception 0x%X\n", sc)); fExists = FALSE; } END_CATCH return sc; } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::OpenRecord, public // // Arguments: [wid] -- record to open // [pb] -- Storage for record // // Returns: Property record // // History: 17-Mar-97 KrishnaN Created. // //---------------------------------------------------------------------------- SCODE CPropertyStoreWrapper::OpenRecord( WORKID wid, BYTE * pb, HPropRecord &hRec) { SCODE sc = S_OK; TRY { hRec = (HPropRecord) _pPropStoreMgr->OpenRecord ( wid, pb ); } CATCH( CException, e ) { sc = e.GetErrorCode(); ciDebugOut((DEB_ERROR, "CPropertyStoreWrapper::OpenRecord caught exception 0x%X\n", sc)); hRec = 0; } END_CATCH return sc; } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::CloseRecord, public // // Arguments: [hRec] -- Property record handle // // Returns: // // History: 17-Mar-97 KrishnaN Created. // //---------------------------------------------------------------------------- SCODE CPropertyStoreWrapper::CloseRecord( HPropRecord hRec ) { SCODE sc = S_OK; TRY { _pPropStoreMgr->CloseRecord ( (CCompositePropRecord *)hRec ); } CATCH( CException, e ) { sc = e.GetErrorCode(); ciDebugOut((DEB_ERROR, "CPropertyStoreWrapper::CloseRecord caught exception 0x%X\n", sc)); } END_CATCH return sc; } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::DeleteRecord, public // // Arguments: [wid] -- Workid // // Returns: // // History: 17-Mar-97 KrishnaN Created. // //---------------------------------------------------------------------------- SCODE CPropertyStoreWrapper::DeleteRecord( WORKID wid ) { SCODE sc = S_OK; TRY { _pPropStoreMgr->DeleteRecord ( wid ); } CATCH( CException, e ) { sc = e.GetErrorCode(); ciDebugOut((DEB_ERROR, "CPropertyStoreWrapper::DeleteRecord caught exception 0x%X\n", sc)); } END_CATCH return sc; } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::Shutdown, public // // Returns: Success or failure SCODE. // // History: 17-Mar-97 KrishnaN Created. // //---------------------------------------------------------------------------- SCODE CPropertyStoreWrapper::Shutdown() { SCODE sc = S_OK; TRY { _pPropStoreMgr->Shutdown ( ); } CATCH( CException, e ) { sc = e.GetErrorCode(); ciDebugOut((DEB_ERROR, "CPropertyStoreWrapper::Shutdown caught exception 0x%X\n", sc)); } END_CATCH return sc; } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::Flush, public // // Returns: Success or failure SCODE. // // History: 17-Mar-97 KrishnaN Created. // //---------------------------------------------------------------------------- SCODE CPropertyStoreWrapper::Flush() { SCODE sc = S_OK; TRY { _pPropStoreMgr->Flush ( ); } CATCH( CException, e ) { sc = e.GetErrorCode(); ciDebugOut((DEB_ERROR, "CPropertyStoreWrapper::Flush caught exception 0x%X\n", sc)); } END_CATCH return sc; } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::Save, public // // Arguments: [pwszDirectory] - Dir to save to. // [pProgressNotify]- Progress indication // [dstStorage] - Destination storage to use // [pEnumWorkids] - List of workids to copy. If null, all the // workids are copied. // [pfAbort] - Caller initiated abort flag // [ppFileList] - List of propstore files copied. // // Returns: Success or failure SCODE. // // History: 17-Mar-97 KrishnaN Created. // //---------------------------------------------------------------------------- SCODE CPropertyStoreWrapper::Save( WCHAR const * pwszDirectory, IProgressNotify * pProgressNotify, ICiEnumWorkids * pEnumWorkids, BOOL * pfAbort, IEnumString ** ppFileList ) { SCODE sc = S_OK; TRY { Win4Assert( pfAbort ); XPtr xStorage(new CiStorage( pwszDirectory, _xAdviseStatus.GetReference(), FSCI_VERSION_STAMP)); _pPropStoreMgr->MakeBackupCopy ( pProgressNotify, *pfAbort, xStorage.GetReference(), pEnumWorkids, ppFileList); } CATCH( CException, e ) { sc = e.GetErrorCode(); ciDebugOut((DEB_ERROR, "CPropertyStoreWrapper::Save caught exception 0x%X\n", sc)); } END_CATCH return sc; } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::Load, public // // Synopsis: Copies/moves the list of files to the destination directory. // // Arguments: [pwszDestDir] -- Dir to move/copy files to // [pFileList] -- List of files to move/copy // [pProgressNotify] -- Progress notification // [fCallerOwnsFiles]-- Move if False, Copy if True // [pfAbort] -- Use to cause abort // // Returns: Success or failure SCODE. // // History: 17-Mar-97 KrishnaN Created. // //---------------------------------------------------------------------------- SCODE CPropertyStoreWrapper::Load( WCHAR const * pwszDestDir, IEnumString * pFileList, IProgressNotify * pProgressNotify, BOOL fCallerOwnsFiles, BOOL * pfAbort ) { SCODE sc = S_OK; TRY { _pPropStoreMgr->Load( pwszDestDir, _xAdviseStatus.GetPointer(), pFileList, pProgressNotify, fCallerOwnsFiles, pfAbort ); } CATCH( CException, e ) { sc = e.GetErrorCode(); ciDebugOut((DEB_ERROR, "CPropertyStoreWrapper::Load caught exception 0x%X\n", sc)); } END_CATCH return sc; } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::SetParameter, public // // Returns: // // History: 23-Sep-97 KrishnaN Created. // //---------------------------------------------------------------------------- HRESULT CPropertyStoreWrapper::SetParameter(VARIANT var, DWORD eParamType) { switch (eParamType) { case PSPARAM_PRIMARY_MAPPEDCACHESIZE: _pPropStoreMgr->SetMappedCacheSize(var.ulVal, PRIMARY_STORE); return S_OK; case PSPARAM_PRIMARY_BACKUPSIZE: _pPropStoreMgr->SetBackupSize(var.ulVal, PRIMARY_STORE); return S_OK; case PSPARAM_SECONDARY_MAPPEDCACHESIZE: _pPropStoreMgr->SetMappedCacheSize(var.ulVal, SECONDARY_STORE); return S_OK; case PSPARAM_SECONDARY_BACKUPSIZE: _pPropStoreMgr->SetBackupSize(var.ulVal, SECONDARY_STORE); return S_OK; default: Win4Assert(!"How did we get here?"); return E_INVALIDARG; } } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::GetParameter, public // // Returns: // // History: 23-Sep-97 KrishnaN Created. // //---------------------------------------------------------------------------- HRESULT CPropertyStoreWrapper::GetParameter(VARIANT &var, DWORD eParamType) { switch (eParamType) { case PSPARAM_PRIMARY_MAPPEDCACHESIZE: var.ulVal = _pPropStoreMgr->GetMappedCacheSize(PRIMARY_STORE); return S_OK; case PSPARAM_PRIMARY_BACKUPSIZE: var.ulVal = _pPropStoreMgr->GetBackupSize(PRIMARY_STORE); return S_OK; case PSPARAM_SECONDARY_MAPPEDCACHESIZE: var.ulVal = _pPropStoreMgr->GetMappedCacheSize(SECONDARY_STORE); return S_OK; case PSPARAM_SECONDARY_BACKUPSIZE: var.ulVal = _pPropStoreMgr->GetBackupSize(SECONDARY_STORE); return S_OK; default: Win4Assert(!"How did we get here?"); return E_INVALIDARG; } } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::AddRef, public // // Returns: // // History: 17-Mar-97 KrishnaN Created. // //---------------------------------------------------------------------------- ULONG CPropertyStoreWrapper::AddRef() { return InterlockedIncrement(&_lRefCount); } //+--------------------------------------------------------------------------- // // Member: CPropertyStoreWrapper::Release, public // // Returns: // // History: 17-Mar-97 KrishnaN Created. // //---------------------------------------------------------------------------- ULONG CPropertyStoreWrapper::Release() { LONG lRef; lRef = InterlockedDecrement(&_lRefCount); if ( lRef <= 0 ) delete this; return lRef; } SCODE CPropertyStoreWrapper::GetTotalSizeInKB(ULONG * pSize) { if (0 == pSize) return E_INVALIDARG; *pSize = _pPropStoreMgr->GetTotalSizeInKB(); return S_OK; } //+--------------------------------------------------------------------------- // // Member: CreateWrapStor, public // // Arguments: [pAdviseStatus] -- so the caller can be kept posted // [ppPropertyStore] -- to take back the created prop store // // Returns: PPropertyStore object // // History: 17-Mar-97 KrishnaN Created. // //---------------------------------------------------------------------------- SCODE CreatePropertyStore( ICiCAdviseStatus *pAdviseStatus, ULONG ulMaxPropStoreMappedCachePrimary, ULONG ulMaxPropStoreMappedCacheSecondary, PPropertyStore **ppPropertyStore ) { if (0 == pAdviseStatus || 0 == ppPropertyStore) return E_INVALIDARG; *ppPropertyStore = 0; SCODE sc = S_OK; TRY { *ppPropertyStore = new CPropertyStoreWrapper (pAdviseStatus, ulMaxPropStoreMappedCachePrimary, ulMaxPropStoreMappedCacheSecondary); } CATCH( CException, e) { sc = e.GetErrorCode(); ciDebugOut((DEB_ERROR, "CreatePropertyStore caught exception 0x%X\n", sc)); } END_CATCH return sc; }