148 lines
3.9 KiB
C++
148 lines
3.9 KiB
C++
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
// Copyright (C) Microsoft Corporation, 1992 - 1997.
|
||
|
//
|
||
|
// File: cisavtst.cxx
|
||
|
//
|
||
|
// History: 3-18-97 srikants Created
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
#include <pch.cxx>
|
||
|
#pragma hdrstop
|
||
|
|
||
|
#if CIDBG==1
|
||
|
|
||
|
#include <cisavtst.hxx>
|
||
|
#include <cicat.hxx>
|
||
|
|
||
|
CCiSaveTest::CCiSaveTest( WCHAR const * pwszSaveDir,
|
||
|
ICiPersistIncrFile * pICiPersistFile,
|
||
|
CiCat & cicat )
|
||
|
: _cicat(cicat),
|
||
|
_pICiPersistFile(pICiPersistFile),
|
||
|
#pragma warning( disable : 4355 ) // this used in base initialization
|
||
|
_thrSave( SaveThread, this, TRUE ) // create suspended
|
||
|
#pragma warning( default : 4355 )
|
||
|
{
|
||
|
|
||
|
|
||
|
unsigned cwc = wcslen( pwszSaveDir ) + 1;
|
||
|
_xwszSaveDir.Init( cwc );
|
||
|
RtlCopyMemory( _xwszSaveDir.GetPointer(), pwszSaveDir, cwc * sizeof WCHAR );
|
||
|
|
||
|
_pICiPersistFile->AddRef();
|
||
|
|
||
|
_fAbort = FALSE;
|
||
|
_evt.Reset();
|
||
|
_thrSave.Resume();
|
||
|
|
||
|
END_CONSTRUCTION( CCiSaveTest );
|
||
|
}
|
||
|
|
||
|
DWORD WINAPI CCiSaveTest::SaveThread( void * self )
|
||
|
{
|
||
|
ciDebugOut(( DEB_ERROR, "Starting Save Thread\n" ));
|
||
|
|
||
|
((CCiSaveTest *) self)->DoIt();
|
||
|
|
||
|
ciDebugOut(( DEB_ERROR, "Leaving Save Thread\n" ));
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
void CCiSaveTest::DoIt()
|
||
|
{
|
||
|
TRY
|
||
|
{
|
||
|
DWORD dwWaitTime = 1 * 60 * 1000; // 1 minute
|
||
|
|
||
|
_evt.Wait( dwWaitTime ); // 1 minute
|
||
|
_evt.Reset();
|
||
|
|
||
|
dwWaitTime = 30 * 60 * 1000; // 30 minutes in milli seconds
|
||
|
ULONG iCount = 1;
|
||
|
|
||
|
while ( !_fAbort )
|
||
|
{
|
||
|
BOOL fFull = (iCount % 10) == 9;
|
||
|
iCount++;
|
||
|
|
||
|
|
||
|
ICiEnumWorkids * pICiEnumWorkids = 0;
|
||
|
IEnumString * pIEnumString = 0;
|
||
|
BOOL fCallerOwnsFiles;
|
||
|
|
||
|
#if 1
|
||
|
SCODE sc = _pICiPersistFile->Save(
|
||
|
_xwszSaveDir.GetPointer(),
|
||
|
fFull,
|
||
|
0, // No progress notify
|
||
|
&_fAbort,
|
||
|
&pICiEnumWorkids,
|
||
|
&pIEnumString,
|
||
|
&fFull,
|
||
|
&fCallerOwnsFiles );
|
||
|
#else
|
||
|
SCODE sc = S_OK;
|
||
|
#endif // 0
|
||
|
|
||
|
XInterface<ICiEnumWorkids> xEnumWorkids;
|
||
|
XInterface<IEnumString> xEnumString;
|
||
|
|
||
|
if ( SUCCEEDED(sc) )
|
||
|
{
|
||
|
|
||
|
xEnumWorkids.Set( pICiEnumWorkids );
|
||
|
xEnumString.Set( pIEnumString );
|
||
|
|
||
|
_cicat.MakeBackupOfPropStore( _xwszSaveDir.GetPointer(),
|
||
|
0, // IProgressNotify
|
||
|
_fAbort,
|
||
|
fFull ? 0 : pICiEnumWorkids );
|
||
|
|
||
|
ciDebugOut(( DEB_ERROR, "%s Backup of CiData succeeded\n",
|
||
|
fFull ? "Full" : "Incremental" ));
|
||
|
|
||
|
WCHAR * pwszFileName;
|
||
|
ULONG cElements;
|
||
|
|
||
|
xEnumString->Reset();
|
||
|
while ( S_OK == xEnumString->Next( 1, &pwszFileName, &cElements ) )
|
||
|
{
|
||
|
ciDebugOut(( DEB_ERROR, "File: (%ws) \n", pwszFileName ));
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
ciDebugOut(( DEB_ERROR, "%s Backup of CiData failed. Error 0x%X \n",
|
||
|
fFull ? "Full" : "Incremental", sc ));
|
||
|
}
|
||
|
|
||
|
if ( !_fAbort )
|
||
|
{
|
||
|
_evt.Wait( dwWaitTime );
|
||
|
_evt.Reset();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
CATCH( CException , e )
|
||
|
{
|
||
|
ciDebugOut(( DEB_ERROR,
|
||
|
"Error in Save Thread. 0x%X\n",
|
||
|
e.GetErrorCode() ));
|
||
|
}
|
||
|
END_CATCH
|
||
|
|
||
|
_pICiPersistFile->Release();
|
||
|
ciDebugOut(( DEB_ERROR, "End of Save Thread\n" ));
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
#endif // CIDBG==1
|
||
|
|