windows-nt/Source/XPSP1/NT/base/fs/hsm/engine/hsmeng/hsmserv.h

307 lines
12 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1998 Seagate Software, Inc. All rights reserved.
Module Name:
HsmServ.h
Abstract:
This header file defines the CHsmServer object, which acts as the 'entry point'
for the HSM Engine.
Author:
Cat Brant [cbrant] 24-Jan-1997
Revision History:
Chris Timmes [chris.timmes] 11-Sep-1997 - Renamed FindStoragePoolById()
to FindHsmStoragePoolByMediaSetId()
and added FindHsmStoragePoolById()
Chris Timmes [chris.timmes] 22-Sep-1997 - Added FindMediaIdByDisplayName()
and RecreateMaster() methods to
IHsmServer
Chris Timmes [chris.timmes] 21-Oct-1997 - Added MarkMediaForRecreation()
method to IHsmServer
Chris Timmes [chris.timmes] 18-Nov-1997 - Added CreateTask() method to IHsmServer
--*/
#ifndef _HSMSERV_H
#define _HSMSERV_H
#include <rswriter.h>
#define ENG_DB_DIRECTORY OLESTR("EngDb")
class CHsmServer :
public CWsbPersistable,
public IHsmServer,
public IWsbServer,
public IWsbCreateLocalObject,
public CComCoClass<CHsmServer,&CLSID_HsmServer>
{
public:
CHsmServer( ) {}
BEGIN_COM_MAP( CHsmServer )
COM_INTERFACE_ENTRY( IHsmServer )
COM_INTERFACE_ENTRY2(IPersist, IPersistStream)
COM_INTERFACE_ENTRY(IPersistStream)
COM_INTERFACE_ENTRY(IPersistFile)
COM_INTERFACE_ENTRY(IWsbPersistable)
COM_INTERFACE_ENTRY( IWsbCreateLocalObject )
COM_INTERFACE_ENTRY( IWsbServer )
END_COM_MAP( )
DECLARE_NOT_AGGREGATABLE( CHsmServer)
DECLARE_REGISTRY_RESOURCEID( IDR_HsmServer )
DECLARE_PROTECT_FINAL_CONSTRUCT()
// CComObjectRoot
STDMETHOD(FinalConstruct)(void);
void FinalRelease( void );
// IPersist
public:
STDMETHOD(GetClassID)(LPCLSID pClsid);
// IPersistStream
public:
STDMETHOD(GetSizeMax)(ULARGE_INTEGER* pSize);
STDMETHOD(Load)(IStream* pStream);
STDMETHOD(Save)(IStream* pStream, BOOL clearDirty);
// IWsbServer
public:
STDMETHOD( GetId )( GUID* pId );
STDMETHOD( GetRegistryName )( OLECHAR **pRegistryName, ULONG bufferSize );
STDMETHOD( SetId )( GUID id );
STDMETHOD( GetBuildVersion )( ULONG *pBuildVersion );
STDMETHOD( GetNtProductVersion )( OLECHAR **pNtProductVersion, ULONG bufferSize );
STDMETHOD( GetNtProductBuild )( ULONG *pNtProductBuild );
STDMETHOD( GetDatabaseVersion )( ULONG *pDatabaseVersion );
STDMETHOD( SaveAll )( void );
STDMETHOD( Unload )( void );
STDMETHOD( CheckAccess )( WSB_ACCESS_TYPE AccessType );
STDMETHOD( GetTrace )( OUT IWsbTrace ** ppTrace );
STDMETHOD( SetTrace )( IN IWsbTrace *pTrace );
STDMETHOD( DestroyObject )( void );
// IHsmServer
public:
STDMETHOD( Init )( void );
STDMETHOD( GetID )( GUID *phid );
STDMETHOD( GetDbPath )( OLECHAR** pPath, ULONG bufferSize );
STDMETHOD( GetIDbPath )( OLECHAR** pPath, ULONG bufferSize );
STDMETHOD( GetDbPathAndName )( OLECHAR** pPath, ULONG bufferSize );
STDMETHOD( GetName )( OLECHAR **ppName );
STDMETHOD( GetHsmExtVerHi )( SHORT *pExtVerHi );
STDMETHOD( GetHsmExtVerLo )( SHORT *pExtVerLo );
STDMETHOD( GetHsmExtRev )( SHORT *pExtRev );
STDMETHOD( GetAutosave )( ULONG* pMilliseconds );
STDMETHOD( SetAutosave )( ULONG milliseconds );
STDMETHOD( GetCopyFilesLimit )( ULONG* pLimit );
STDMETHOD( GetCopyFilesUserLimit )( ULONG* pLimit );
STDMETHOD( SetCopyFilesUserLimit )( ULONG limit );
STDMETHOD( GetManagedResources )( IWsbIndexedCollection **ppCollection);
STDMETHOD( FindHsmStoragePoolById )( GUID StoragePoolId,
IHsmStoragePool** ppStoragePool );
STDMETHOD( FindHsmStoragePoolByMediaSetId )( GUID RmsMediaSetId,
IHsmStoragePool** ppStoragePool );
STDMETHOD( FindMediaIdByDescription )( IN OLECHAR* description,
OUT GUID* pMediaId );
STDMETHOD( FindStoragePoolByName )(OLECHAR* name, IHsmStoragePool** ppStoragePool );
STDMETHOD( GetStoragePools )( IWsbIndexedCollection **ppCollection);
STDMETHOD( GetOnlineInformation )( IWsbIndexedCollection **ppCollection);
STDMETHOD( GetMessages )( IWsbIndexedCollection **ppCollection);
STDMETHOD( GetUsrToNotify )( IWsbIndexedCollection **ppCollection);
STDMETHOD( GetJobs )( IWsbIndexedCollection **ppCollection);
STDMETHOD( FindJobByName )(OLECHAR* name, IHsmJob** ppJob );
STDMETHOD( GetJobDefs )( IWsbIndexedCollection **ppCollection);
STDMETHOD( GetPolicies )( IWsbIndexedCollection **ppCollection);
STDMETHOD( GetActions )( IWsbIndexedCollection **ppCollection);
STDMETHOD( GetCriteria )( IWsbIndexedCollection **ppCollection);
STDMETHOD( GetMediaRecs )( IWsbIndexedCollection **ppCollection);
STDMETHOD( GetMountingMedias ) ( IWsbIndexedCollection **ppCollection);
STDMETHOD( LockMountingMedias )( void );
STDMETHOD( UnlockMountingMedias )( void );
STDMETHOD( GetNextMedia )( LONG *pNextMedia );
STDMETHOD( GetSegmentDb )( IWsbDb **ppDb);
STDMETHOD( BackupSegmentDb )( void );
STDMETHOD( GetHsmFsaTskMgr )( IHsmFsaTskMgr **ppHsmFsaTskMgr);
STDMETHOD( SaveMetaData )( void );
STDMETHOD( SavePersistData )( void );
STDMETHOD( CloseOutDb )( void );
STDMETHOD( CancelAllJobs )( void );
STDMETHOD( AreJobsEnabled )( void );
STDMETHOD( EnableAllJobs )( void );
STDMETHOD( DisableAllJobs )( void );
STDMETHOD( RestartSuspendedJobs )( void );
STDMETHOD( CreateTask )( IN const OLECHAR * jobName, IN const OLECHAR * jobParameters,
IN const OLECHAR * jobComments,
IN const TASK_TRIGGER_TYPE jobTriggerType,
IN const WORD jobStartHour, IN const WORD jobStartMinute,
IN const BOOL scheduledJob );
STDMETHOD( CreateTaskEx )( IN const OLECHAR * jobName, IN const OLECHAR * jobParameters,
IN const OLECHAR * jobComments,
IN const TASK_TRIGGER_TYPE jobTriggerType,
IN const SYSTEMTIME runTime,
IN const DWORD runOccurrence,
IN const BOOL scheduledJob );
STDMETHOD( CancelCopyMedia )( void );
STDMETHOD( MarkMediaForRecreation )( IN REFGUID masterMediaId );
STDMETHOD( RecreateMaster )( IN REFGUID masterMediaId, USHORT copySet );
STDMETHOD( SynchronizeMedia )( GUID poolId, USHORT copySet );
STDMETHOD( GetHsmMediaMgr )( IRmsServer **ppHsmMediaMgr);
STDMETHOD( ResetSegmentValidMark )( void );
STDMETHOD( ResetMediaValidBytes )( void );
STDMETHOD( GetSegmentPosition )( IN REFGUID bagId,
IN LONGLONG fileStart,
IN LONGLONG fileSize,
OUT GUID* pPosMedia,
OUT LONGLONG* pPosOfffset );
// IHsmSystemState
STDMETHOD( ChangeSysState )( HSM_SYSTEM_STATE* pSysState );
// IWsbCreateLocalServer
STDMETHOD( CreateInstance )( REFCLSID rclsid, REFIID riid, void **ppv );
// Internal Helper functions
STDMETHOD( Autosave )(void);
STDMETHOD( LoadJobs )( IStream* pStream );
STDMETHOD( StoreJobs )( IStream* pStream );
STDMETHOD( LoadJobDefs )( IStream* pStream );
STDMETHOD( StoreJobDefs )( IStream* pStream );
STDMETHOD( LoadPolicies )( IStream* pStream );
STDMETHOD( StorePolicies )( IStream* pStream );
STDMETHOD( LoadManagedResources )( IStream* pStream );
STDMETHOD( StoreManagedResources )( IStream* pStream );
STDMETHOD( LoadStoragePools )( IStream* pStream );
STDMETHOD( StoreStoragePools )( IStream* pStream );
STDMETHOD( LoadSegmentInformation )( void );
STDMETHOD( StoreSegmentInformation )( void );
STDMETHOD( StoreSegmentInformationFinal )( void );
STDMETHOD( LoadMessages )( IStream* pStream );
STDMETHOD( StoreMessages )( IStream* pStream );
STDMETHOD( LoadPersistData )( void );
STDMETHOD( NotifyAllJobs )(HSM_JOB_STATE jobState);
STDMETHOD( CreateDefaultJobs )( void );
STDMETHOD( GetSavedTraceSettings )( LONGLONG *pTraceSettings, BOOLEAN *pTraceOn);
STDMETHOD( SetSavedTraceSettings )( LONGLONG traceSettings, BOOLEAN traceOn);
STDMETHOD( CheckManagedResources )( void );
STDMETHOD( InternalSavePersistData)( void );
STDMETHOD( CancelMountingMedias ) (void);
void StopAutosaveThread(void);
protected:
ULONG m_autosaveInterval; // Autosave interval in
// milliseconds; 0 turns it off
HANDLE m_autosaveThread;
HANDLE m_savingEvent; // An event for synchronizing saving of persistent data
HANDLE m_terminateEvent; // An event for signaling termination to the autosave thread
HANDLE m_CheckManagedResourcesThread;
GUID m_hId;
CWsbStringPtr m_name;
CWsbStringPtr m_dir;
BOOL m_initializationCompleted;
BOOL m_persistWasCreated; // TRUE if persistence file was created
ULONG m_traceSettings;
BOOL m_traceOn;
BOOL m_cancelCopyMedia;
BOOL m_inCopyMedia;
BOOL m_Suspended;
BOOL m_JobsEnabled; // Not persistent !!
CWsbStringPtr m_dbPath;
CComPtr<IHsmFsaTskMgr> m_pHsmFsaTskMgr;
CComPtr<IRmsServer> m_pHsmMediaMgr;
CRssJetWriter *m_pRssWriter;
CComPtr<IWsbTrace> m_pTrace;
CComPtr<IWsbDbSys> m_pDbSys;
CComPtr<IWsbDb> m_pSegmentDatabase;
CComPtr<IWsbIndexedCollection> m_pJobs;
CComPtr<IWsbIndexedCollection> m_pJobDefs;
CComPtr<IWsbIndexedCollection> m_pPolicies;
CComPtr<IWsbIndexedCollection> m_pManagedResources;
CComPtr<IWsbIndexedCollection> m_pStoragePools;
CComPtr<IWsbIndexedCollection> m_pMessages;
CComPtr<IWsbIndexedCollection> m_pOnlineInformation;
CComPtr<IWsbIndexedCollection> m_pMountingMedias;
LONG m_mediaCount;
ULONG m_buildVersion;
ULONG m_databaseVersion;
ULONG m_copyfilesUserLimit;
CRITICAL_SECTION m_JobDisableLock;
CRITICAL_SECTION m_MountingMediasLock;
};
class CHsmUpgradeRmsDb :
public CWsbPersistable,
public IHsmUpgradeRmsDb,
public CComCoClass<CHsmUpgradeRmsDb,&CLSID_CHsmUpgradeRmsDb>
{
public:
CHsmUpgradeRmsDb( ) {}
BEGIN_COM_MAP( CHsmUpgradeRmsDb )
COM_INTERFACE_ENTRY( IHsmUpgradeRmsDb )
COM_INTERFACE_ENTRY2(IPersist, IPersistStream)
COM_INTERFACE_ENTRY(IPersistStream)
COM_INTERFACE_ENTRY(IPersistFile)
COM_INTERFACE_ENTRY(IWsbPersistable)
END_COM_MAP( )
DECLARE_REGISTRY_RESOURCEID( IDR_HsmUpgradeRmsDb )
// CComObjectRoot
public:
STDMETHOD(FinalConstruct)(void);
void FinalRelease(void);
// IPersist
public:
STDMETHOD(GetClassID)(LPCLSID pclsid);
// IPersistStream
public:
STDMETHOD(GetSizeMax)(ULARGE_INTEGER* /*pSize*/) {
return(E_NOTIMPL); }
STDMETHOD(Load)(IStream* pStream);
STDMETHOD(Save)(IStream* pStream, BOOL clearDirty);
// IHsmUpgradeRmsDb
STDMETHOD(Init)( IRmsServer *pHsmMediaMgr);
private:
IRmsServer *m_pServer;
};
#endif // _HSMSERV_H