windows-nt/Source/XPSP1/NT/base/fs/hsm/engine/task/medinfo.h
2020-09-26 16:20:57 +08:00

253 lines
12 KiB
C++

/*++
Copyright (c) 1998 Seagate Software, Inc. All rights reserved.
Module Name:
medinfo.h
Abstract:
Declaration of class CMedInfo
Author:
Revision History:
--*/
#include "resource.h" // main symbols
#include "engine.h" // main symbols
#include "Wsb.h" // Wsb Collectable Class
#include "wsbdb.h"
#include "metalib.h" // Meta database
typedef struct _HSM_MEDIA_MASTER {
GUID id; //HSM Engine Media ID
GUID ntmsId; //HSM RMS/NTMS Media ID
GUID storagePoolId; //Storage Pool ID
CWsbStringPtr description; //Display name - RS generated
CWsbStringPtr name; //Barcode on media or NTMS generated
//name
HSM_JOB_MEDIA_TYPE type; //Type of media (HSM)
FILETIME lastUpdate; //Last update of copy
HRESULT lastError; //S_OK or the last exception
//..encountered when accessing
//..the media
BOOL recallOnly; //True if no more data is to
//..be premigrated to the media
//..Set by internal operations,
//..may not be changed externally
LONGLONG freeBytes; //Real free space on media
LONGLONG capacity; //Total capacity of media
SHORT nextRemoteDataSet; //Next remote data set
} HSM_MEDIA_MASTER, *PHSM_MEDIA_MASTER;
typedef struct _HSM_MEDIA_COPY {
GUID id; //HSM RMS/NTMS Media ID of copy
CWsbStringPtr description; //RS generated name of copy (display name)
CWsbStringPtr name; //Barcode or NTMS generated name of copy
FILETIME lastUpdate; //Last update of copy
HRESULT lastError; //S_OK or the last exception
//..encountered when accessing
//..the media
SHORT nextRemoteDataSet; //The next remote data set of the media
//..master that was copied
} HSM_MEDIA_COPY, *PHSM_MEDIA_COPY;
/////////////////////////////////////////////////////////////////////////////
// Task
class CMediaInfo :
public CWsbDbEntity,
public IMediaInfo,
public CComCoClass<CMediaInfo,&CLSID_CMediaInfo>
{
public:
CMediaInfo() {}
BEGIN_COM_MAP(CMediaInfo)
COM_INTERFACE_ENTRY(IMediaInfo)
COM_INTERFACE_ENTRY2(IWsbDbEntity, CWsbDbEntity)
COM_INTERFACE_ENTRY(IWsbDbEntityPriv)
COM_INTERFACE_ENTRY(IPersistStream)
COM_INTERFACE_ENTRY(IWsbCollectable)
// COM_INTERFACE_ENTRY(IWsbPersistable)
COM_INTERFACE_ENTRY(IWsbTestable)
END_COM_MAP()
DECLARE_REGISTRY(CMediaInfo, _T("Task.MediaInfo.1"), _T("Task.MediaInfo"), IDS_MEDIAINFO_DESC, THREADFLAGS_BOTH)
// IMediaInfo
public:
STDMETHOD(FinalConstruct)(void);
void FinalRelease(void);
// IWsbDbEntity
public:
STDMETHOD(Print)(IStream* pStream);
STDMETHOD(UpdateKey)(IWsbDbKey *pKey);
WSB_FROM_CWSBDBENTITY;
// IPersist
public:
STDMETHOD(GetClassID)(LPCLSID pClsid);
// IPersistStream
public:
STDMETHOD(GetSizeMax)(ULARGE_INTEGER* pSize);
STDMETHOD(Load)(IStream* pStream);
STDMETHOD(Save)(IStream* pStream, BOOL clearDirty);
// IWsbTestable
public:
STDMETHOD(Test)(USHORT *pTestsPassed, USHORT* pTestsFailed);
//*/
// IMediaInfo
public:
STDMETHOD( GetCapacity )( LONGLONG *pCapacity );
STDMETHOD( GetCopyDescription ) ( USHORT copyNumber, OLECHAR **pDescription,
ULONG bufferSize);
STDMETHOD( GetCopyInfo )( USHORT copyNumber,
GUID *pMediaSubsystemId,
OLECHAR **pDescription,
ULONG descriptionBufferSize,
OLECHAR **pName,
ULONG nameBufferSize,
FILETIME *pUpdate,
HRESULT *pLastError,
SHORT *pNextRemoteDataSet );
STDMETHOD( GetCopyLastError )( USHORT copyNumber, HRESULT *pLastError );
STDMETHOD( GetCopyMediaSubsystemId )( USHORT copyNumber, GUID *pMediaSubsystemId );
STDMETHOD( GetCopyName )( USHORT copyNumber, OLECHAR **pName, ULONG bufferSize);
STDMETHOD( GetCopyNextRemoteDataSet )( USHORT copyNumber, SHORT *pNextRemoteDataSet);
STDMETHOD( GetCopyUpdate )( USHORT copyNumber, FILETIME *pUpdate );
STDMETHOD( GetDescription )(OLECHAR **pDescription, ULONG buffsize );
STDMETHOD( GetFreeBytes )( LONGLONG *pFreeBytes);
STDMETHOD( GetId )( GUID *pId);
STDMETHOD( GetLastError )( HRESULT *pLastError);
STDMETHOD( GetLastKnownGoodMasterInfo )( GUID* pMediaId,
GUID *pMediaSubsystemId,
GUID *pStoragePoolId,
LONGLONG *pFreeBytes,
LONGLONG *pCapacity,
HRESULT *pLastError,
OLECHAR **pDescription,
ULONG descriptionBufferSize,
HSM_JOB_MEDIA_TYPE *pType,
OLECHAR **pName,
ULONG nameBufferSize,
BOOL *pReadOnly,
FILETIME *pUpdate,
SHORT *pNextRemoteDataSet);
STDMETHOD( GetLKGMasterNextRemoteDataSet )( SHORT *pNextRemoteDataSet );
STDMETHOD( GetLogicalValidBytes )( LONGLONG *pLogicalValidBytes);
STDMETHOD( GetMediaInfo )( GUID* pMediaId,
GUID *pMediaSubsystemId,
GUID *pStoragePoolId,
LONGLONG *pFreeBytes,
LONGLONG *pCapacity,
HRESULT *pLastError,
SHORT *pNextRemoteDataSet,
OLECHAR **pDescription,
ULONG descriptionBufferSize,
HSM_JOB_MEDIA_TYPE *pType,
OLECHAR **pName,
ULONG nameBufferSize,
BOOL *pReadOnly,
FILETIME *pUpdate,
LONGLONG *pLogicalValidBytes,
BOOL *pRecreate);
STDMETHOD( GetMediaSubsystemId )( GUID *pRmsMediaId );
STDMETHOD( GetName )( OLECHAR **pName, ULONG bufferSize);
STDMETHOD( GetNextRemoteDataSet )( SHORT *pNextRemoteDataSet );
STDMETHOD( GetRecallOnlyStatus )( BOOL *pRecallOnlyStatus );
STDMETHOD( GetRecreate )( BOOL *pRecreate );
STDMETHOD( GetStoragePoolId )( GUID *pStoragePoolId );
STDMETHOD( GetType )( HSM_JOB_MEDIA_TYPE *pType );
STDMETHOD( GetUpdate)( FILETIME *pUpdate );
STDMETHOD( SetCapacity )( LONGLONG capacity);
STDMETHOD( SetCopyDescription ) ( USHORT copyNumber, OLECHAR *name);
STDMETHOD( SetCopyInfo )( USHORT copyNumber,
GUID mediaSubsystemId,
OLECHAR *description,
OLECHAR *name,
FILETIME update,
HRESULT lastError,
SHORT nextRemoteDataSet );
STDMETHOD( SetCopyLastError )( USHORT copyNumber, HRESULT lastError );
STDMETHOD( SetCopyMediaSubsystemId )( USHORT copyNumber, GUID mediaSybsystemMediaId );
STDMETHOD( SetCopyName )( USHORT copyNumber, OLECHAR *barCode);
STDMETHOD( SetCopyNextRemoteDataSet )( USHORT copyNumber, SHORT nextRemoteDataSet);
STDMETHOD( SetCopyUpdate )( USHORT copyNumber, FILETIME update );
STDMETHOD( SetDescription )(OLECHAR *description);
STDMETHOD( SetFreeBytes )( LONGLONG FreeBytes );
STDMETHOD( SetId )( GUID id);
STDMETHOD( SetLastError )( HRESULT lastError);
STDMETHOD( SetLastKnownGoodMasterInfo )( GUID mediaId,
GUID mediaSubsystemMediaId,
GUID storagePoolId,
LONGLONG FreeBytes,
LONGLONG Capacity,
HRESULT lastError,
OLECHAR *description,
HSM_JOB_MEDIA_TYPE type,
OLECHAR *name,
BOOL ReadOnly,
FILETIME update,
SHORT nextRemoteDataSet);
STDMETHOD( SetLogicalValidBytes )( LONGLONG logicalValidBytes);
STDMETHOD( SetMediaInfo )( GUID mediaId,
GUID mediaSubsystemMediaId,
GUID storagePoolId,
LONGLONG FreeBytes,
LONGLONG Capacity,
HRESULT lastError,
SHORT nextRemoteDataSet,
OLECHAR *description,
HSM_JOB_MEDIA_TYPE type,
OLECHAR *name,
BOOL ReadOnly,
FILETIME update,
LONGLONG logicalValidBytes,
BOOL recreate);
STDMETHOD( SetMediaSubsystemId )( GUID rmsMediaId );
STDMETHOD( SetName )( OLECHAR *barCode);
STDMETHOD( SetNextRemoteDataSet )( SHORT nextRemoteDataSet );
STDMETHOD( SetRecallOnlyStatus )( BOOL readOnlyStatus );
STDMETHOD( SetRecreate )( BOOL recreate );
STDMETHOD( SetStoragePoolId )( GUID storagePoolId );
STDMETHOD( SetType )( HSM_JOB_MEDIA_TYPE type );
STDMETHOD( SetUpdate)( FILETIME update );
STDMETHOD( DeleteCopy)( USHORT copyNumber );
STDMETHOD( RecreateMaster )( void );
STDMETHOD( UpdateLastKnownGoodMaster )( void );
private:
//
// Helper functions
//
STDMETHOD( WriteToDatabase )( void );
HSM_MEDIA_MASTER m_Master; //Media master information
BOOL m_Recreate; //True if the master is to
//..be recreated - no more
//..data is migrated to
//..media in this state.
//..May be set through the
//..UI and changed when
//..master is recreated.
LONGLONG m_LogicalValidBytes; //Amount of valid data if
//..space reclamation were
//..to occur.
HSM_MEDIA_MASTER m_LastKnownGoodMaster; //Last known good media
//..master information
HSM_MEDIA_COPY m_Copy[HSM_MAX_NUMBER_MEDIA_COPIES]; //Media copy information
};