910 lines
19 KiB
C++
910 lines
19 KiB
C++
/*++
|
||
|
||
© 1998 Seagate Software, Inc. All rights reserved.
|
||
|
||
Module Name:
|
||
|
||
HsmStgPl.cpp
|
||
|
||
Abstract:
|
||
|
||
This component is an object representation of the HSM Storage Pool. It
|
||
is both a persistable and collectable.
|
||
|
||
Author:
|
||
|
||
Cat Brant [cbrant] 09-Feb-1997
|
||
|
||
Revision History:
|
||
|
||
--*/
|
||
|
||
|
||
#include "stdafx.h"
|
||
#include "Wsb.h"
|
||
#include "HsmEng.h"
|
||
#include "HsmServ.h"
|
||
#include "HsmConn.h"
|
||
#include "HsmStgPl.h"
|
||
#include "Fsa.h"
|
||
#include "Rms.h"
|
||
|
||
#define WSB_TRACE_IS WSB_TRACE_BIT_HSMENG
|
||
|
||
HRESULT
|
||
CHsmStoragePool::FinalConstruct(
|
||
void
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
This method does some initialization of the object that is necessary
|
||
after construction.
|
||
|
||
Arguments:
|
||
|
||
None.
|
||
|
||
Return Value:
|
||
|
||
S_OK
|
||
Anything returned by CWsbObject::FinalConstruct().
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
try {
|
||
|
||
WsbAffirmHr(CWsbObject::FinalConstruct());
|
||
|
||
m_MediaSetId = GUID_NULL;
|
||
m_PolicyId = GUID_NULL;
|
||
m_NumOnlineMedia = 0;
|
||
m_NumMediaCopies = 0;
|
||
m_MediaSetName = " ";
|
||
|
||
WsbAffirmHr(CoCreateGuid( &m_Id ));
|
||
|
||
} WsbCatch(hr);
|
||
|
||
return(hr);
|
||
}
|
||
|
||
HRESULT
|
||
CHsmStoragePool::GetId(
|
||
OUT GUID *pId
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
See IHsmStoragePool::GetId
|
||
|
||
Arguments:
|
||
|
||
See IHsmStoragePool::GetId
|
||
|
||
Return Value:
|
||
|
||
See IHsmStoragePool::GetId
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CHsmStoragePool::GetId"),OLESTR(""));
|
||
|
||
try {
|
||
//Make sure we can provide data memebers
|
||
WsbAssert(0 != pId, E_POINTER);
|
||
|
||
//Provide the data members
|
||
*pId = m_Id;
|
||
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CHsmStoragePool::GetId"),
|
||
OLESTR("hr = <%ls>, Id = <%ls>>"),WsbHrAsString(hr), WsbPtrToGuidAsString(pId));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
HRESULT
|
||
CHsmStoragePool::SetId(
|
||
GUID Id
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
See IHsmStoragePool::SetId
|
||
|
||
Arguments:
|
||
|
||
See IHsmStoragePool::SetId
|
||
|
||
Return Value:
|
||
|
||
See IHsmStoragePool::SetId
|
||
|
||
--*/
|
||
{
|
||
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CHsmStoragePool::SetId"),OLESTR("Id = <%ls>>"), WsbGuidAsString(Id));
|
||
|
||
try {
|
||
|
||
//Provide the data members
|
||
m_Id = Id;
|
||
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CHsmStoragePool::SetId"),OLESTR("hr = <%ls>"),WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
HRESULT
|
||
CHsmStoragePool::GetClassID (
|
||
OUT LPCLSID pClsId
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
See IPerist::GetClassID()
|
||
|
||
Arguments:
|
||
|
||
See IPerist::GetClassID()
|
||
|
||
Return Value:
|
||
|
||
See IPerist::GetClassID()
|
||
|
||
--*/
|
||
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CHsmStoragePool::GetClassID"), OLESTR(""));
|
||
|
||
|
||
try {
|
||
WsbAssert(0 != pClsId, E_POINTER);
|
||
*pClsId = CLSID_CHsmStoragePool;
|
||
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CHsmStoragePool::GetClassID"), OLESTR("hr = <%ls>, CLSID = <%ls>"), WsbHrAsString(hr), WsbGuidAsString(*pClsId));
|
||
return(hr);
|
||
}
|
||
|
||
HRESULT
|
||
CHsmStoragePool::GetSizeMax (
|
||
OUT ULARGE_INTEGER* pcbSize
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
See IPersistStream::GetSizeMax().
|
||
|
||
Arguments:
|
||
|
||
See IPersistStream::GetSizeMax().
|
||
|
||
Return Value:
|
||
|
||
See IPersistStream::GetSizeMax().
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CHsmStoragePool::GetSizeMax"), OLESTR(""));
|
||
|
||
try {
|
||
ULONG nameLen;
|
||
|
||
WsbAssert(0 != pcbSize, E_POINTER);
|
||
|
||
nameLen = SysStringByteLen(m_MediaSetName);
|
||
|
||
pcbSize->QuadPart = ((3 * WsbPersistSizeOf(GUID)) + // m_id + m_MediaSetID + m_PolicyId
|
||
WsbPersistSizeOf(ULONG) + // m_NumOnlineMedia
|
||
WsbPersistSizeOf(USHORT) + // m_NumMediaCopies
|
||
nameLen); // m_MediaSetName
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CHsmStoragePool::GetSizeMax"),
|
||
OLESTR("hr = <%ls>, Size = <%ls>"), WsbHrAsString(hr),
|
||
WsbPtrToUliAsString(pcbSize));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
HRESULT
|
||
CHsmStoragePool::Load (
|
||
IN IStream* pStream
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
See IPersistStream::Load().
|
||
|
||
Arguments:
|
||
|
||
See IPersistStream::Load().
|
||
|
||
Return Value:
|
||
|
||
See IPersistStream::Load().
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CHsmStoragePool::Load"), OLESTR(""));
|
||
|
||
try {
|
||
WsbAssert(0 != pStream, E_POINTER);
|
||
|
||
|
||
WsbAffirmHr(WsbLoadFromStream(pStream, &m_Id));
|
||
WsbAffirmHr(WsbLoadFromStream(pStream, &m_MediaSetId));
|
||
WsbAffirmHr(WsbLoadFromStream(pStream, &m_PolicyId));
|
||
WsbAffirmHr(WsbLoadFromStream(pStream, &m_NumOnlineMedia));
|
||
WsbAffirmHr(WsbLoadFromStream(pStream, &m_NumMediaCopies));
|
||
m_MediaSetName.Free();
|
||
WsbAffirmHr(WsbBstrFromStream(pStream, &m_MediaSetName));
|
||
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CHsmStoragePool::Load"),
|
||
OLESTR("hr = <%ls>, GUID = <%ls>"),
|
||
WsbHrAsString(hr),
|
||
WsbGuidAsString(m_Id));
|
||
return(hr);
|
||
}
|
||
|
||
HRESULT
|
||
CHsmStoragePool::Save (
|
||
IN IStream* pStream,
|
||
IN BOOL clearDirty
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
See IPersistStream::Save().
|
||
|
||
Arguments:
|
||
|
||
See IPersistStream::Save().
|
||
|
||
Return Value:
|
||
|
||
See IPersistStream::Save().
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CHsmStoragePool::Save"), OLESTR("clearDirty = <%ls>"), WsbBoolAsString(clearDirty));
|
||
|
||
try {
|
||
WsbAssert(0 != pStream, E_POINTER);
|
||
|
||
WsbAffirmHr(WsbSaveToStream(pStream, m_Id));
|
||
WsbAffirmHr(WsbSaveToStream(pStream, m_MediaSetId));
|
||
WsbAffirmHr(WsbSaveToStream(pStream, m_PolicyId));
|
||
WsbAffirmHr(WsbSaveToStream(pStream, m_NumOnlineMedia));
|
||
WsbAffirmHr(WsbSaveToStream(pStream, m_NumMediaCopies));
|
||
WsbAffirmHr(WsbBstrToStream(pStream, m_MediaSetName));
|
||
|
||
if (clearDirty) {
|
||
m_isDirty = FALSE;
|
||
}
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CHsmStoragePool::Save"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
|
||
|
||
return(hr);
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CHsmStoragePool::Test (
|
||
OUT USHORT *pTestsPassed,
|
||
OUT USHORT *pTestsFailed
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
See IWsbTestable::Test().
|
||
|
||
Arguments:
|
||
|
||
See IWsbTestable::Test().
|
||
|
||
Return Value:
|
||
|
||
See IWsbTestable::Test().
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
CComPtr<IHsmStoragePool> pHsmStoragePool1;
|
||
CComPtr<IHsmStoragePool> pHsmStoragePool2;
|
||
GUID l_Id;
|
||
|
||
WsbTraceIn(OLESTR("CHsmStoragePool::Test"), OLESTR(""));
|
||
|
||
*pTestsPassed = *pTestsFailed = 0;
|
||
try {
|
||
// Get the pHsmStoragePool interface.
|
||
WsbAffirmHr(((IUnknown*)(IHsmStoragePool*) this)->QueryInterface(IID_IHsmStoragePool,
|
||
(void**) &pHsmStoragePool1));
|
||
|
||
|
||
hr = S_OK;
|
||
try {
|
||
//Create another instance and test the comparisson methods:
|
||
WsbAffirmHr(CoCreateInstance(CLSID_CHsmStoragePool, NULL, CLSCTX_ALL, IID_IHsmStoragePool, (void**) &pHsmStoragePool2));
|
||
|
||
// Check the default values.
|
||
WsbAffirmHr(pHsmStoragePool2->GetId(&l_Id));
|
||
WsbAffirm((l_Id == GUID_NULL), E_FAIL);
|
||
} WsbCatch(hr);
|
||
|
||
if (hr == S_OK) {
|
||
(*pTestsPassed)++;
|
||
} else {
|
||
(*pTestsFailed)++;
|
||
}
|
||
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CHsmStoragePool::Test"), OLESTR("hr = <%ls>"),WsbHrAsString(hr));
|
||
return(S_OK);
|
||
}
|
||
|
||
HRESULT
|
||
CHsmStoragePool::CompareTo (
|
||
IN IUnknown* pCollectable,
|
||
OUT short* pResult
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
1 : object > value
|
||
0 : object = value
|
||
-1 : object < value
|
||
In addition, the return code is S_OK if the object = value and
|
||
S_FALSE otherwise.
|
||
|
||
Arguments:
|
||
|
||
|
||
Return Value:
|
||
|
||
S_OK - object = value
|
||
|
||
S_FALSE - object != value
|
||
|
||
--*/
|
||
|
||
{
|
||
HRESULT hr = S_OK;
|
||
CComPtr<IHsmStoragePool> pHsmStoragePool;
|
||
|
||
WsbTraceIn(OLESTR("CHsmStoragePool::CompareTo"), OLESTR(""));
|
||
|
||
|
||
// Did they give us a valid item to compare to?
|
||
try {
|
||
WsbAssert(pCollectable != NULL, E_POINTER);
|
||
|
||
// We need the IWsbLong interface to get the value of the object.
|
||
WsbAffirmHr(pCollectable->QueryInterface(IID_IHsmStoragePool, (void**) &pHsmStoragePool));
|
||
hr = pHsmStoragePool->CompareToIHsmStoragePool(this, pResult);
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CHsmStoragePool::CompareTo"), OLESTR("hr = <%ls>, pResult = <%d>"), WsbHrAsString(hr), pResult);
|
||
|
||
return(hr);
|
||
}
|
||
|
||
HRESULT
|
||
CHsmStoragePool::CompareToIHsmStoragePool (
|
||
IN IHsmStoragePool* pHsmStoragePool,
|
||
OUT short* pResult
|
||
)
|
||
{
|
||
HRESULT hr = S_OK;
|
||
GUID l_Id;
|
||
BOOL areGuidsEqual;
|
||
|
||
|
||
WsbTraceIn(OLESTR("CHsmStoragePool::CompareToIHsmStoragePool"), OLESTR(""));
|
||
|
||
try {
|
||
|
||
// Did they give us a valid item to compare to?
|
||
WsbAssert(pHsmStoragePool != NULL, E_POINTER);
|
||
|
||
WsbAffirmHr(((IHsmStoragePool *)pHsmStoragePool)->GetId(&l_Id));
|
||
|
||
// Make sure the GUID matches. Then see if the SegStartLoc is in the range of this entry
|
||
areGuidsEqual = IsEqualGUID(m_Id, l_Id);
|
||
WsbAffirm( (areGuidsEqual == TRUE), S_FALSE);
|
||
|
||
} WsbCatch(hr);
|
||
|
||
WsbTraceOut(OLESTR("CHsmStoragePool::CompareToIHsmStoragePool"), OLESTR("hr = <%ls>, pResult = <%d>"), WsbHrAsString(hr), pResult);
|
||
|
||
return(hr);
|
||
}
|
||
|
||
HRESULT
|
||
CHsmStoragePool::GetMediaSet(
|
||
GUID *pMediaSetId,
|
||
BSTR *pMediaSetName
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
See IHsmStoragePool::
|
||
|
||
Arguments:
|
||
|
||
See IHsmStoragePool::
|
||
|
||
Return Value:
|
||
|
||
See IHsmStoragePool::
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CHsmStoragePool::GetMediaSet"),OLESTR(""));
|
||
|
||
try {
|
||
WsbAssert(0 != pMediaSetId, E_POINTER);
|
||
WsbAssert(0 != pMediaSetName, E_POINTER);
|
||
*pMediaSetName = WsbAllocString( m_MediaSetName );
|
||
|
||
*pMediaSetId = m_MediaSetId;
|
||
} WsbCatch( hr );
|
||
|
||
WsbTraceOut(OLESTR("CHsmStoragePool::GetMediaSet"),
|
||
OLESTR("hr = <%ls>, Id = <%ls>>"),WsbHrAsString(hr), WsbPtrToGuidAsString(pMediaSetId));
|
||
return( hr );
|
||
}
|
||
|
||
|
||
HRESULT
|
||
CHsmStoragePool::SetMediaSet(
|
||
GUID mediaSetId,
|
||
BSTR mediaSetName
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
See IHsmStoragePool::
|
||
|
||
Arguments:
|
||
|
||
See IHsmStoragePool::
|
||
|
||
Return Value:
|
||
|
||
See IHsmStoragePool::
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CHsmStoragePool::SetMediaSet"),OLESTR(""));
|
||
|
||
try {
|
||
m_MediaSetId = mediaSetId;
|
||
m_MediaSetName = mediaSetName;
|
||
|
||
m_isDirty = TRUE;
|
||
|
||
} WsbCatch( hr );
|
||
|
||
WsbTraceOut(OLESTR("CHsmStoragePool::SetMediaSet"), OLESTR("hr = <%ls>"),WsbHrAsString(hr));
|
||
|
||
return( hr );
|
||
}
|
||
|
||
HRESULT
|
||
CHsmStoragePool::GetNumOnlineMedia(
|
||
ULONG *pNumOnlineMedia
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
See IHsmStoragePool::
|
||
|
||
Arguments:
|
||
|
||
See IHsmStoragePool::
|
||
|
||
Return Value:
|
||
|
||
See IHsmStoragePool::
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
WsbTraceIn(OLESTR("CHsmStoragePool::GetNumOnlineMedia"),OLESTR(""));
|
||
|
||
try {
|
||
|
||
WsbAffirm(0 != pNumOnlineMedia, E_POINTER);
|
||
*pNumOnlineMedia = m_NumOnlineMedia;
|
||
|
||
} WsbCatch( hr );
|
||
|
||
WsbTraceOut(OLESTR("CHsmStoragePool::GetNumOnlineMedia"),
|
||
OLESTR("hr = <%ls>"),WsbHrAsString(hr));
|
||
|
||
return( hr );
|
||
}
|
||
|
||
HRESULT
|
||
CHsmStoragePool::SetNumOnlineMedia(
|
||
ULONG numOnlineMedia
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
See IHsmStoragePool::
|
||
|
||
Arguments:
|
||
|
||
See IHsmStoragePool::
|
||
|
||
Return Value:
|
||
|
||
See IHsmStoragePool::
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
WsbTraceIn(OLESTR("CHsmStoragePool::SetNumOnlineMedia"),OLESTR(""));
|
||
|
||
m_NumOnlineMedia = numOnlineMedia;
|
||
m_isDirty = TRUE;
|
||
|
||
WsbTraceOut(OLESTR("CHsmStoragePool::SetNumOnlineMedia"),
|
||
OLESTR("hr = <%ls>"),WsbHrAsString(hr));
|
||
|
||
return( hr );
|
||
}
|
||
|
||
HRESULT
|
||
CHsmStoragePool::GetNumMediaCopies(
|
||
USHORT *pNumMediaCopies
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
See IHsmStoragePool::
|
||
|
||
Arguments:
|
||
|
||
See IHsmStoragePool::
|
||
|
||
Return Value:
|
||
|
||
See IHsmStoragePool::
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
WsbTraceIn(OLESTR("CHsmStoragePool::GetNumMediaCopies"),OLESTR(""));
|
||
|
||
try {
|
||
|
||
WsbAffirm(0 != pNumMediaCopies, E_POINTER);
|
||
*pNumMediaCopies = m_NumMediaCopies;
|
||
|
||
} WsbCatch( hr );
|
||
|
||
WsbTraceOut(OLESTR("CHsmStoragePool::GetNumMediaCopies"),
|
||
OLESTR("hr = <%ls>"),WsbHrAsString(hr));
|
||
|
||
return( hr );
|
||
}
|
||
|
||
HRESULT
|
||
CHsmStoragePool::SetNumMediaCopies(
|
||
USHORT numMediaCopies
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
See IHsmStoragePool::
|
||
|
||
Arguments:
|
||
|
||
See IHsmStoragePool::
|
||
|
||
Return Value:
|
||
|
||
See IHsmStoragePool::
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CHsmStoragePool::SetNumMediaCopies"),OLESTR(""));
|
||
|
||
m_NumMediaCopies = numMediaCopies;
|
||
m_isDirty = TRUE;
|
||
|
||
WsbTraceOut(OLESTR("CHsmStoragePool::SetNumMediaCopies"),OLESTR("hr = <%ls>"),WsbHrAsString(hr));
|
||
return( hr );
|
||
}
|
||
|
||
HRESULT
|
||
CHsmStoragePool::GetManagementPolicy(
|
||
GUID *pManagementPolicyId
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
See IHsmStoragePool::
|
||
|
||
Arguments:
|
||
|
||
See IHsmStoragePool::
|
||
|
||
Return Value:
|
||
|
||
See IHsmStoragePool::
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CHsmStoragePool::GetManagementPolicy"),OLESTR(""));
|
||
|
||
try {
|
||
|
||
WsbAffirm(0 != pManagementPolicyId, E_POINTER);
|
||
*pManagementPolicyId = m_PolicyId;
|
||
|
||
} WsbCatch( hr );
|
||
|
||
WsbTraceOut(OLESTR("CHsmStoragePool::GetManagementPolicy"),OLESTR("hr = <%ls>"),WsbHrAsString(hr));
|
||
|
||
return( hr );
|
||
}
|
||
|
||
HRESULT
|
||
CHsmStoragePool::SetManagementPolicy(
|
||
GUID managementPolicyId
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
See IHsmStoragePool::
|
||
|
||
Arguments:
|
||
|
||
See IHsmStoragePool::
|
||
|
||
Return Value:
|
||
|
||
See IHsmStoragePool::
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CHsmStoragePool::SetManagementPolicy"),OLESTR(""));
|
||
|
||
m_PolicyId = managementPolicyId;
|
||
m_isDirty = TRUE;
|
||
|
||
WsbTraceOut(OLESTR("CHsmStoragePool::SetManagementPolicy"),OLESTR("hr = <%ls>"),WsbHrAsString(hr));
|
||
|
||
return( hr );
|
||
}
|
||
|
||
HRESULT
|
||
CHsmStoragePool::GetRmsMediaSet (
|
||
IUnknown **ppIRmsMediaSet
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
See IHsmStoragePool::
|
||
|
||
Arguments:
|
||
|
||
See IHsmStoragePool::
|
||
|
||
Return Value:
|
||
|
||
See IHsmStoragePool::
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CHsmStoragePool::GetRmsMediaSet"),OLESTR(""));
|
||
|
||
try {
|
||
WsbAffirm(0 != ppIRmsMediaSet, E_POINTER );
|
||
hr = E_NOTIMPL;
|
||
|
||
} WsbCatch( hr );
|
||
|
||
WsbTraceOut(OLESTR("CHsmStoragePool::GetRmsMediaSet"),OLESTR("hr = <%ls>"),WsbHrAsString(hr));
|
||
|
||
return( hr );
|
||
}
|
||
|
||
HRESULT
|
||
CHsmStoragePool::InitFromRmsMediaSet (
|
||
IUnknown *pIRmsMediaSet
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
See IHsmStoragePool::
|
||
|
||
Arguments:
|
||
|
||
See IHsmStoragePool::
|
||
|
||
Return Value:
|
||
|
||
See IHsmStoragePool::
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CHsmStoragePool::InitFromRmsMediaSet"),OLESTR(""));
|
||
|
||
try {
|
||
WsbAffirm(0 != pIRmsMediaSet, E_POINTER );
|
||
//
|
||
// Get the real interface
|
||
//
|
||
CComPtr<IRmsMediaSet> l_pIRmsMediaSet;
|
||
WsbAffirmHr(pIRmsMediaSet->QueryInterface(IID_IRmsMediaSet, (void **)&l_pIRmsMediaSet));
|
||
WsbAffirmHr(l_pIRmsMediaSet->GetMediaSetId(&m_MediaSetId));
|
||
m_MediaSetName.Free();
|
||
WsbAffirmHr(l_pIRmsMediaSet->GetName(&m_MediaSetName));
|
||
|
||
// Set in the Registry which media type is being used
|
||
// Note: This hack should be removed when HSM supports more than one media type on the same system
|
||
LONG mediaType;
|
||
DWORD dwType;
|
||
WsbAffirmHr(l_pIRmsMediaSet->GetMediaSupported(&mediaType));
|
||
switch (mediaType) {
|
||
case RmsMediaOptical:
|
||
case RmsMediaFixed:
|
||
case RmsMediaDVD:
|
||
dwType = HSM_VALUE_TYPE_DIRECTACCESS;
|
||
break;
|
||
case RmsMedia8mm:
|
||
case RmsMedia4mm:
|
||
case RmsMediaDLT:
|
||
case RmsMediaTape:
|
||
dwType = HSM_VALUE_TYPE_SEQUENTIAL;
|
||
break;
|
||
default:
|
||
// This is not expected, however, we set tape as default
|
||
WsbTraceAlways(OLESTR("CHsmStoragePool::InitFromRmsMediaSet : Got an unexpected media type %ld !!!\n"), mediaType);
|
||
dwType = HSM_VALUE_TYPE_SEQUENTIAL;
|
||
break;
|
||
}
|
||
|
||
WsbAffirmHr(WsbSetRegistryValueDWORD(NULL, HSM_ENGINE_REGISTRY_STRING, HSM_MEDIA_TYPE, dwType));
|
||
|
||
} WsbCatch( hr );
|
||
|
||
WsbTraceOut(OLESTR("CHsmStoragePool::InitFromRmsMediaSet"),OLESTR("hr = <%ls>"),WsbHrAsString(hr));
|
||
|
||
return( hr );
|
||
}
|
||
|
||
HRESULT
|
||
CHsmStoragePool::GetMediaSetType (
|
||
USHORT *pMediaType
|
||
)
|
||
/*++
|
||
|
||
Routine Description:
|
||
|
||
Gets the media type of the corresponding media set
|
||
|
||
Arguments:
|
||
|
||
pMediaType - media type, currently, the only options are direct-access or sequential
|
||
|
||
Return Value:
|
||
|
||
S_OK for success
|
||
|
||
Notes:
|
||
|
||
Future: Might consider keeping the media type instead of asking the media-set object again and again -
|
||
Media type is not a dynamic propery. However, this reuires a change in the .col file structure.
|
||
|
||
--*/
|
||
{
|
||
HRESULT hr = S_OK;
|
||
|
||
WsbTraceIn(OLESTR("CHsmStoragePool::GetMediaSetType"),OLESTR(""));
|
||
|
||
try {
|
||
WsbAffirm(0 != pMediaType, E_POINTER );
|
||
|
||
// Get media-set object
|
||
CComPtr<IHsmServer> pHsmServer;
|
||
CComPtr<IRmsServer> pRmsServer;
|
||
CComPtr<IRmsMediaSet> pRmsMediaSet;
|
||
|
||
WsbAssertHr(HsmConnectFromId(HSMCONN_TYPE_HSM, GUID_NULL, IID_IHsmServer, (void**) &pHsmServer));
|
||
WsbAffirmHr(pHsmServer->GetHsmMediaMgr(&pRmsServer));
|
||
WsbAffirmHr(pRmsServer->CreateObject(m_MediaSetId, CLSID_CRmsMediaSet, IID_IRmsMediaSet, RmsOpenExisting, (void **)&pRmsMediaSet));
|
||
|
||
// Determine media type
|
||
LONG mediaType;
|
||
WsbAffirmHr(pRmsMediaSet->GetMediaSupported(&mediaType));
|
||
switch (mediaType) {
|
||
case RmsMediaOptical:
|
||
case RmsMediaFixed:
|
||
case RmsMediaDVD:
|
||
*pMediaType = HSM_VALUE_TYPE_DIRECTACCESS;
|
||
break;
|
||
case RmsMedia8mm:
|
||
case RmsMedia4mm:
|
||
case RmsMediaDLT:
|
||
case RmsMediaTape:
|
||
*pMediaType = HSM_VALUE_TYPE_SEQUENTIAL;
|
||
break;
|
||
default:
|
||
// This is not expected, however, we set tape as default
|
||
WsbTraceAlways(OLESTR("CHsmStoragePool::GetMediaSetType : Got an unexpected media type %hu !!!\n"), *pMediaType);
|
||
*pMediaType = HSM_VALUE_TYPE_SEQUENTIAL;
|
||
break;
|
||
}
|
||
|
||
} WsbCatch( hr );
|
||
|
||
WsbTraceOut(OLESTR("CHsmStoragePool::GetMediaSetType"),OLESTR("Media-type = %hu hr = <%ls>"), *pMediaType, WsbHrAsString(hr));
|
||
|
||
return( hr );
|
||
}
|