// SegDb.h : Declaration of the CSegDb #include "resource.h" // main symbols #include "Wsb.h" // Wsb Collectable Class #include "wsbdb.h" #define SEG_KEY_TYPE 1 #define MEDIA_INFO_KEY_TYPE 1 #define BAG_INFO_KEY_TYPE 1 #define BAG_HOLE_KEY_TYPE 1 #define VOL_ASSIGN_KEY_TYPE 1 // NOTE: // // The macro SEG_DB_MAX_MEDIA_NAME_LEN and SEG_DB_MAX_MEDIA_BAR_CODE_LEN below were defined without parenthesis // As a result, the max size of the media record is only 711 bytes instead of 1751 as it should be !! // See Windows Bugs 407340. // It is NOT fixed since there are too many existing installations with the wrong record size... // This bug has implications around the code - look for "Windows Bugs 407340" comments throughout the HSM code // #define SEG_DB_MAX_MEDIA_NAME_LEN MAX_COMPUTERNAME_LENGTH + 128 + 2 #define SEG_DB_MAX_MEDIA_BAR_CODE_LEN MAX_COMPUTERNAME_LENGTH + 128 + 2 ///////////////////////////////////////////////////////////////////////////// // seg class CSegDb : public CWsbDb, public ISegDb, public CComCoClass { public: CSegDb() {} BEGIN_COM_MAP(CSegDb) COM_INTERFACE_ENTRY(ISegDb) COM_INTERFACE_ENTRY2(IWsbDb, ISegDb) COM_INTERFACE_ENTRY(IWsbDbPriv) COM_INTERFACE_ENTRY(IPersistStream) // COM_INTERFACE_ENTRY(IWsbTestable) END_COM_MAP() DECLARE_REGISTRY(CSegDb, _T("Seg.SegDb.1"), _T("Seg.SegDb"), IDS_SEGDB_DESC, THREADFLAGS_BOTH) DECLARE_PROTECT_FINAL_CONSTRUCT(); STDMETHOD(FinalConstruct)(void); STDMETHOD(FinalRelease)(void); // IWsbTestable public: STDMETHOD(Test)(USHORT *pTestsPassed, USHORT* pTestsFailed); // IWsbDb WSB_FROM_CWSBDB; // IPersist public: STDMETHOD(GetClassID)(LPCLSID pclsid); // IPersistStream public: STDMETHOD(GetSizeMax)(ULARGE_INTEGER* pSize) { return(CWsbDb::GetSizeMax(pSize)); } STDMETHOD(Load)(IStream* pStream); STDMETHOD(Save)(IStream* pStream, BOOL clearDirty); // ISegDb public: STDMETHOD(Erase)( void ); STDMETHOD(Initialize)(OLECHAR* root, IWsbDbSys* pDbSys, BOOL* pCreateFlag); STDMETHOD(BagHoleAdd)(IWsbDbSession* pDbSession, GUID bagId, LONGLONG segStartLoc, LONGLONG segLen); STDMETHOD(BagHoleFind)(IWsbDbSession* pDbSession, GUID bagId, LONGLONG segStartLoc, LONGLONG segLen, IBagHole** ppIBagHole ); STDMETHOD(BagHoleSubtract)(IWsbDbSession* pDbSession, GUID bagId, LONGLONG segStartLoc, LONGLONG segLen); STDMETHOD(SegAdd)(IWsbDbSession* pDbSession, GUID bagId, LONGLONG segStartLoc, LONGLONG segLen, GUID MediaId, LONGLONG mediaStart, BOOL indirectRecord = FALSE ); STDMETHOD(SegFind)(IWsbDbSession* pDbSession, GUID bagId, LONGLONG segStartLoc, LONGLONG segLen, ISegRec** ppISegRec ); STDMETHOD(SegSubtract)(IWsbDbSession* pDbSession, GUID bagId, LONGLONG segStartLoc, LONGLONG SegLen); STDMETHOD(VolAssignAdd)(IWsbDbSession* pDbSession, GUID bagId, LONGLONG segStartLoc, LONGLONG segLen, GUID VolId); STDMETHOD(VolAssignFind)(IWsbDbSession* pDbSession, GUID bagId, LONGLONG segStartLoc, LONGLONG segLen, IVolAssign** ppIVolAssign ); STDMETHOD(VolAssignSubtract)(IWsbDbSession* pDbSession, GUID bagId, LONGLONG segStartLoc, LONGLONG segLen); private: LONG m_value; };