293 lines
8.1 KiB
C
293 lines
8.1 KiB
C
|
/*++
|
|||
|
|
|||
|
<EFBFBD> 1998 Seagate Software, Inc. All rights reserved
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
RmsServr.h
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
Declaration of the CRmsServer class
|
|||
|
|
|||
|
Author:
|
|||
|
|
|||
|
Brian Dodd [brian] 15-Nov-1996
|
|||
|
|
|||
|
Revision History:
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
#ifndef _RMSSERVR_
|
|||
|
#define _RMSSERVR_
|
|||
|
|
|||
|
#include "resource.h" // resource symbols
|
|||
|
|
|||
|
#include "RmsObjct.h" // CRmsComObject
|
|||
|
|
|||
|
//
|
|||
|
// Registry entry
|
|||
|
//
|
|||
|
|
|||
|
class CRmsServer :
|
|||
|
public CComDualImpl<IRmsServer, &IID_IRmsServer, &LIBID_RMSLib>,
|
|||
|
public IHsmSystemState,
|
|||
|
public CRmsComObject,
|
|||
|
public CWsbPersistStream,
|
|||
|
public IConnectionPointContainerImpl<CRmsServer>,
|
|||
|
public IConnectionPointImpl<CRmsServer, &IID_IRmsSinkEveryEvent, CComDynamicUnkArray>,
|
|||
|
public CComCoClass<CRmsServer,&CLSID_CRmsServer>
|
|||
|
{
|
|||
|
public:
|
|||
|
CRmsServer() {}
|
|||
|
BEGIN_COM_MAP(CRmsServer)
|
|||
|
COM_INTERFACE_ENTRY2(IDispatch, IRmsServer)
|
|||
|
COM_INTERFACE_ENTRY(IRmsServer)
|
|||
|
COM_INTERFACE_ENTRY(IHsmSystemState)
|
|||
|
COM_INTERFACE_ENTRY(IRmsComObject)
|
|||
|
COM_INTERFACE_ENTRY(ISupportErrorInfo)
|
|||
|
COM_INTERFACE_ENTRY2(IPersist, IPersistStream)
|
|||
|
COM_INTERFACE_ENTRY(IPersistStream)
|
|||
|
COM_INTERFACE_ENTRY(IWsbPersistStream)
|
|||
|
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
|
|||
|
END_COM_MAP()
|
|||
|
|
|||
|
DECLARE_NOT_AGGREGATABLE(CRmsServer)
|
|||
|
DECLARE_REGISTRY_RESOURCEID(IDR_RmsServer)
|
|||
|
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
|||
|
|
|||
|
BEGIN_CONNECTION_POINT_MAP(CRmsServer)
|
|||
|
CONNECTION_POINT_ENTRY(IID_IRmsSinkEveryEvent)
|
|||
|
END_CONNECTION_POINT_MAP()
|
|||
|
|
|||
|
// CComObjectRoot
|
|||
|
public:
|
|||
|
STDMETHOD(FinalConstruct)(void);
|
|||
|
|
|||
|
STDMETHOD(FinalRelease)(void);
|
|||
|
|
|||
|
// IPersist
|
|||
|
public:
|
|||
|
STDMETHOD(GetClassID)(
|
|||
|
OUT CLSID *pClsid);
|
|||
|
|
|||
|
// IPersistStream
|
|||
|
public:
|
|||
|
STDMETHOD(GetSizeMax)(
|
|||
|
OUT ULARGE_INTEGER* pSize);
|
|||
|
|
|||
|
STDMETHOD(Load)(
|
|||
|
IN IStream* pStream);
|
|||
|
|
|||
|
STDMETHOD(Save)(
|
|||
|
IN IStream* pStream,
|
|||
|
IN BOOL clearDirty);
|
|||
|
|
|||
|
// IHsmSystemState
|
|||
|
public:
|
|||
|
STDMETHOD( ChangeSysState )( HSM_SYSTEM_STATE* pSysState );
|
|||
|
|
|||
|
// IRmsServer
|
|||
|
public:
|
|||
|
STDMETHOD( InitializeInAnotherThread )(void);
|
|||
|
|
|||
|
STDMETHOD( Initialize )(void);
|
|||
|
|
|||
|
STDMETHOD( SaveAll )(void);
|
|||
|
|
|||
|
STDMETHOD( Unload )(void);
|
|||
|
|
|||
|
STDMETHOD( GetServerName )(
|
|||
|
OUT BSTR *pName);
|
|||
|
|
|||
|
STDMETHOD( GetCartridges )(
|
|||
|
OUT IWsbIndexedCollection **ptr);
|
|||
|
|
|||
|
STDMETHOD( GetActiveCartridges )(
|
|||
|
OUT IWsbIndexedCollection **ptr);
|
|||
|
|
|||
|
STDMETHOD( GetDataMovers )(
|
|||
|
OUT IWsbIndexedCollection **ptr);
|
|||
|
|
|||
|
STDMETHOD( SetActiveCartridge )(
|
|||
|
IN IRmsCartridge *ptr);
|
|||
|
|
|||
|
STDMETHOD( GetLibraries )(
|
|||
|
OUT IWsbIndexedCollection **ptr);
|
|||
|
|
|||
|
STDMETHOD( GetMediaSets )(
|
|||
|
OUT IWsbIndexedCollection **ptr);
|
|||
|
|
|||
|
STDMETHOD( GetRequests )(
|
|||
|
OUT IWsbIndexedCollection **ptr);
|
|||
|
|
|||
|
STDMETHOD( GetClients )(
|
|||
|
OUT IWsbIndexedCollection **ptr);
|
|||
|
|
|||
|
STDMETHOD( GetUnconfiguredDevices )(
|
|||
|
OUT IWsbIndexedCollection **ptr);
|
|||
|
|
|||
|
STDMETHOD( ScanForDevices )(void);
|
|||
|
|
|||
|
STDMETHOD( ScanForDrives )(void);
|
|||
|
|
|||
|
STDMETHOD( MountScratchCartridge )(
|
|||
|
OUT GUID *pCartId,
|
|||
|
IN REFGUID fromMediaSet,
|
|||
|
IN REFGUID prevSideId,
|
|||
|
IN OUT LONGLONG *pFreeSpace,
|
|||
|
IN LONG blockingFactor,
|
|||
|
IN BSTR displayName,
|
|||
|
IN OUT IRmsDrive **ppDrive,
|
|||
|
OUT IRmsCartridge **ppCartridge,
|
|||
|
OUT IDataMover **ppDataMover,
|
|||
|
IN DWORD dwOptions = RMS_NONE);
|
|||
|
|
|||
|
STDMETHOD( MountCartridge )(
|
|||
|
IN REFGUID cartId,
|
|||
|
IN OUT IRmsDrive **ppDrive,
|
|||
|
OUT IRmsCartridge **ppCartridge,
|
|||
|
OUT IDataMover **ppDataMover,
|
|||
|
IN DWORD dwOptions = RMS_NONE,
|
|||
|
IN DWORD threadId = 0);
|
|||
|
|
|||
|
STDMETHOD( DismountCartridge )(
|
|||
|
IN REFGUID cartId,
|
|||
|
IN DWORD dwOptions = RMS_NONE);
|
|||
|
|
|||
|
STDMETHOD( DuplicateCartridge )(
|
|||
|
IN REFGUID cartId,
|
|||
|
IN REFGUID firstSideId,
|
|||
|
IN OUT GUID *pCopyCartId,
|
|||
|
IN REFGUID copySetId,
|
|||
|
IN BSTR copyName,
|
|||
|
OUT LONGLONG *pFreeSpace,
|
|||
|
OUT LONGLONG *pCapacity,
|
|||
|
IN DWORD options);
|
|||
|
|
|||
|
STDMETHOD( RecycleCartridge )(
|
|||
|
IN REFGUID cartId,
|
|||
|
IN DWORD options);
|
|||
|
|
|||
|
STDMETHOD( FindLibraryById )(
|
|||
|
IN REFGUID libId,
|
|||
|
OUT IRmsLibrary **ptr);
|
|||
|
|
|||
|
STDMETHOD( FindCartridgeById )(
|
|||
|
IN REFGUID cartId,
|
|||
|
OUT IRmsCartridge **ptr);
|
|||
|
|
|||
|
STDMETHOD( CreateObject )(
|
|||
|
IN REFGUID objectId,
|
|||
|
IN REFCLSID rclsid,
|
|||
|
IN REFIID riid,
|
|||
|
IN DWORD dwCreate,
|
|||
|
OUT void **ppvObj);
|
|||
|
|
|||
|
STDMETHOD( IsNTMSInstalled )(void);
|
|||
|
|
|||
|
STDMETHOD( GetNTMS )(
|
|||
|
OUT IRmsNTMS **ptr);
|
|||
|
|
|||
|
STDMETHOD( IsReady )(void);
|
|||
|
|
|||
|
STDMETHOD( ChangeState )(
|
|||
|
IN LONG newState);
|
|||
|
|
|||
|
STDMETHOD( GetNofAvailableDrives ) (
|
|||
|
IN REFGUID fromMediaSet,
|
|||
|
OUT DWORD *pdwNofDrives);
|
|||
|
|
|||
|
STDMETHOD( FindCartridgeStatusById )(
|
|||
|
IN REFGUID cartId,
|
|||
|
OUT DWORD *dwStatus);
|
|||
|
|
|||
|
STDMETHOD( IsMultipleSidedMedia )(
|
|||
|
IN REFGUID mediaSetId);
|
|||
|
|
|||
|
STDMETHOD( CheckSecondSide )(
|
|||
|
IN REFGUID firstSideId,
|
|||
|
OUT BOOL *pbValid,
|
|||
|
OUT GUID *pSecondSideId);
|
|||
|
|
|||
|
|
|||
|
// CRmsServer
|
|||
|
private:
|
|||
|
HRESULT resolveUnconfiguredDevices(void);
|
|||
|
|
|||
|
HRESULT autoConfigureDevices(void);
|
|||
|
|
|||
|
HRESULT processInquiryData(
|
|||
|
IN int portNumber,
|
|||
|
IN UCHAR *pPortScanData);
|
|||
|
|
|||
|
HRESULT findDriveLetter(
|
|||
|
IN UCHAR portNo,
|
|||
|
IN UCHAR pathNo,
|
|||
|
IN UCHAR id,
|
|||
|
IN UCHAR lun,
|
|||
|
OUT OLECHAR *driveString);
|
|||
|
|
|||
|
HRESULT getDeviceName(
|
|||
|
IN UCHAR portNo,
|
|||
|
IN UCHAR pathNo,
|
|||
|
IN UCHAR id,
|
|||
|
IN UCHAR lun,
|
|||
|
OUT OLECHAR *deviceName);
|
|||
|
|
|||
|
HRESULT getHardDrivesToUseFromRegistry(
|
|||
|
OUT OLECHAR *pDrivesToUse, OUT DWORD *pLen);
|
|||
|
|
|||
|
HRESULT enableAsBackupOperator(void);
|
|||
|
|
|||
|
private:
|
|||
|
enum { // Class specific constants:
|
|||
|
//
|
|||
|
Version = 1, // Class version, this should be
|
|||
|
// incremented each time the
|
|||
|
// the class definition changes.
|
|||
|
MaxActive = 8 // Max number of active cartridges.
|
|||
|
};
|
|||
|
|
|||
|
CWsbStringPtr m_dbPath; // The directory where databases are stored.
|
|||
|
LONG m_LockReference;// The server lock used for blocking normal access during synchornized operations.
|
|||
|
CWsbBstrPtr m_ServerName; // The name of the computer running the server.
|
|||
|
CComPtr<IWsbIndexedCollection> m_pCartridges; // The cartridges known to the server.
|
|||
|
CComPtr<IWsbIndexedCollection> m_pLibraries; // The libraries managed by the server.
|
|||
|
CComPtr<IWsbIndexedCollection> m_pMediaSets; // The media sets known to the server.
|
|||
|
CComPtr<IWsbIndexedCollection> m_pRequests; // The requests associated with the server.
|
|||
|
CComPtr<IWsbIndexedCollection> m_pClients; // The clients associated with the server.
|
|||
|
CComPtr<IWsbIndexedCollection> m_pUnconfiguredDevices; // The unconfigured devices associated with the server.
|
|||
|
CComPtr<IRmsNTMS> m_pNTMS; // NTMS support.
|
|||
|
ULONG m_HardDrivesUsed; // the number of hard drives in use by RMS.
|
|||
|
|
|||
|
//typedef List<int> LISTINT;
|
|||
|
|
|||
|
//LISTINT::iterator i;
|
|||
|
//LISTINT test;
|
|||
|
//List<IRmsCartridge *> m_ListOfActiveCartridges; // The cartridges already mounted into a drive.
|
|||
|
//List<IRmsCartridge *>::iterator m_IteratorForListOfActiveCartridges; // The cartridges already mounted into a drive.
|
|||
|
CComPtr<IWsbIndexedCollection> m_pActiveCartridges; // The cartridges already mounted into a drive.
|
|||
|
CComPtr<IWsbIndexedCollection> m_pDataMovers; // The active data movers.
|
|||
|
CComPtr<IRmsCartridge> m_pActiveCartridge ; // The cartridges already mounted into a drive.
|
|||
|
|
|||
|
// Thread routines
|
|||
|
public:
|
|||
|
static DWORD WINAPI InitializationThread(
|
|||
|
IN LPVOID pv);
|
|||
|
|
|||
|
};
|
|||
|
|
|||
|
/////////////////////////////////////////////////////////////////////////////
|
|||
|
//
|
|||
|
// g_pServer
|
|||
|
//
|
|||
|
// This is made global so that anybody in the context of Rms has
|
|||
|
// quick access to it
|
|||
|
//
|
|||
|
|
|||
|
extern IRmsServer *g_pServer;
|
|||
|
extern CRITICAL_SECTION g_CriticalSection;
|
|||
|
|
|||
|
#endif // _RMSSERVR_
|