253 lines
12 KiB
C
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
|
||
|
};
|
||
|
|
||
|
|
||
|
|