Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

2240 lines
64 KiB

/*++
Copyright (c) 1998 Seagate Software, Inc. All rights reserved.
Module Name:
MedInfo.cpp
Abstract:
This component is an object representation of the HSM Metadata media information
record.
Author:
Cat Brant [cbrant] 27-Feb-1997
Revision History:
--*/
#include "stdafx.h"
#include "wsbgen.h"
#include "engine.h"
#include "metaint.h"
#include "metalib.h"
#include "MedInfo.h"
#include "segdb.h"
#undef WSB_TRACE_IS
#define WSB_TRACE_IS WSB_TRACE_BIT_META
static USHORT iCountMedinfo = 0;
HRESULT
CMediaInfo::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 CWsbDbEntity::FinalConstruct().
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::FinalConstruct"),OLESTR(""));
try {
WsbAssertHr(CWsbDbEntity::FinalConstruct());
//
// Initialize the master media record
//
m_Master.id = GUID_NULL;
m_Master.ntmsId = GUID_NULL;
m_Master.storagePoolId = GUID_NULL;
m_Master.description = OLESTR("");
m_Master.name = OLESTR("");
m_Master.type = HSM_JOB_MEDIA_TYPE_UNKNOWN;
m_Master.lastUpdate = WsbLLtoFT(0);
m_Master.lastError = S_OK;
m_Master.recallOnly = FALSE;
m_Master.freeBytes = 0;
m_Master.capacity = 0;
m_Master.nextRemoteDataSet = 0;
m_Recreate = FALSE;
m_LogicalValidBytes = 0;
//
// Now initialize the last known good master
//
m_LastKnownGoodMaster.id = GUID_NULL;
m_LastKnownGoodMaster.ntmsId = GUID_NULL;
m_LastKnownGoodMaster.storagePoolId = GUID_NULL;
m_LastKnownGoodMaster.description = OLESTR("");
m_LastKnownGoodMaster.name = OLESTR("");
m_LastKnownGoodMaster.type = HSM_JOB_MEDIA_TYPE_UNKNOWN;
m_LastKnownGoodMaster.lastUpdate = WsbLLtoFT(0);
m_LastKnownGoodMaster.lastError = S_OK;
m_LastKnownGoodMaster.recallOnly = FALSE;
m_LastKnownGoodMaster.freeBytes = 0;
m_LastKnownGoodMaster.capacity = 0;
m_LastKnownGoodMaster.nextRemoteDataSet = 0;
//
// Initialize the master's copy media records
//
for (int i = 0; i < HSM_MAX_NUMBER_MEDIA_COPIES; i++) {
m_Copy[i].id = GUID_NULL;
m_Copy[i].description = OLESTR("");
m_Copy[i].name = OLESTR("");
m_Copy[i].lastUpdate = WsbLLtoFT(0);
m_Copy[i].lastError = S_OK;
m_Copy[i].nextRemoteDataSet = 0;
}
} WsbCatch(hr);
iCountMedinfo++;
WsbTraceOut(OLESTR("CMediaInfo::FinalConstruct"), OLESTR("hr = <%ls>, Count is <%d>"),
WsbHrAsString(hr), iCountMedinfo);
return(hr);
}
void
CMediaInfo::FinalRelease(
void
)
/*++
Implements:
CMediaInfo::FinalRelease().
--*/
{
WsbTraceIn(OLESTR("CMediaInfo::FinalRelease"), OLESTR(""));
CWsbDbEntity::FinalRelease();
iCountMedinfo--;
WsbTraceOut(OLESTR("CMediaInfo::FinalRelease"), OLESTR("Count is <%d>"), iCountMedinfo);
}
HRESULT
CMediaInfo::GetName(
OLECHAR **pName,
ULONG bufferSize
)
/*++
Implements:
IMediaInfo::GetName
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::GetName"),OLESTR("buffer size = <%lu>"), bufferSize);
try {
WsbAssertPointer(pName);
CWsbStringPtr tmpName;
tmpName = m_Master.name;
WsbAffirmHr(tmpName.CopyTo(pName, bufferSize));
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::GetName"), OLESTR("hr = <%ls>, Name = <%ls>"), WsbHrAsString(hr), WsbPtrToStringAsString(pName));
return(hr);
}
HRESULT
CMediaInfo::GetCapacity(
LONGLONG *pCapacity
)
/*++
Implements:
IMediaInfo::GetCapacity
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::GetCapacity"),OLESTR(""));
try {
WsbAssertPointer(pCapacity);
*pCapacity = m_Master.capacity;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::GetCapacity"), OLESTR("hr = <%ls>, Capacity = <%ls>"), WsbHrAsString(hr), WsbPtrToLonglongAsString(pCapacity));
return(hr);
}
HRESULT CMediaInfo::GetClassID
(
OUT LPCLSID pclsid
)
/*++
Implements:
IPerist::GetClassID()
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::GetClassID"), OLESTR(""));
try {
WsbAssert(0 != pclsid, E_POINTER);
*pclsid = CLSID_CMediaInfo;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::GetClassID"), OLESTR("hr = <%ls>, CLSID = <%ls>"), WsbHrAsString(hr), WsbGuidAsString(*pclsid));
return(hr);
}
HRESULT
CMediaInfo:: GetCopyName(
USHORT copyNumber,
OLECHAR **pName,
ULONG bufferSize
)
/*++
Implements:
IMediaInfo::GetCopyName
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::GetCopyName"),OLESTR(""));
try {
WsbAffirm(((0 < copyNumber) && (copyNumber <= HSM_MAX_NUMBER_MEDIA_COPIES)),
E_INVALIDARG);
WsbAssertPointer(pName);
CWsbStringPtr tmpString;
tmpString = m_Copy[copyNumber - 1].name;
WsbAffirmHr(tmpString.CopyTo(pName, bufferSize));
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::GetCopyName"), OLESTR("hr = <%ls>, Name = <%ls>"), WsbHrAsString(hr), WsbPtrToStringAsString(pName));
return(hr);
}
HRESULT
CMediaInfo:: GetCopyNextRemoteDataSet(
USHORT copyNumber,
SHORT *pNextRemoteDataSet
)
/*++
Implements:
IMediaInfo::GetCopyNextRemoteDataSet
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::GetCopyNextRemoteDataSet"),OLESTR(""));
try {
WsbAffirm(((0 < copyNumber) && (copyNumber <= HSM_MAX_NUMBER_MEDIA_COPIES)),
E_INVALIDARG);
WsbAssertPointer(pNextRemoteDataSet);
*pNextRemoteDataSet = m_Copy[copyNumber - 1].nextRemoteDataSet;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::GetCopyNextRemoteDataSet"), OLESTR("hr = <%ls>, NextRemoteDataSet = <%ls>"), WsbHrAsString(hr), WsbPtrToShortAsString(pNextRemoteDataSet));
return(hr);
}
HRESULT
CMediaInfo::GetCopyDescription(
USHORT copyNumber,
OLECHAR **pDescription,
ULONG bufferSize
)
/*++
Implements:
IMediaInfo::GetCopyDescription
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::GetCopyDescription"),OLESTR("Copy = <%u>"), copyNumber);
try {
WsbAffirm(((0 < copyNumber) && (copyNumber <= HSM_MAX_NUMBER_MEDIA_COPIES)),
E_INVALIDARG);
WsbAssertPointer(pDescription);
CWsbStringPtr tmpDescription;
tmpDescription = m_Copy[copyNumber - 1].description;
WsbAffirmHr(tmpDescription.CopyTo(pDescription, bufferSize));
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::GetCopyDescription"), OLESTR("hr = <%ls>, CopyDescription = <%ls>"), WsbHrAsString(hr), WsbPtrToStringAsString(pDescription));
return(hr);
}
HRESULT
CMediaInfo::GetCopyInfo(
USHORT copyNumber,
GUID *pMediaSubsystemId,
OLECHAR **pDescription,
ULONG descriptionBufferSize,
OLECHAR **pName,
ULONG nameBufferSize,
FILETIME *pUpdate,
HRESULT *pLastError,
SHORT *pNextRemoteDataSet
)
/*++
Implements:
IMediaInfo::GetCopyInfo
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::GetCopyInfo"),OLESTR("Copy is <%u>"), copyNumber);
try {
WsbAffirm(((0 < copyNumber) && (copyNumber <= HSM_MAX_NUMBER_MEDIA_COPIES)),
E_INVALIDARG);
if (pMediaSubsystemId != 0) {
*pMediaSubsystemId = m_Copy[copyNumber - 1].id;
}
if (pDescription != 0) {
CWsbStringPtr tmpDescription;
tmpDescription = m_Copy[copyNumber - 1].description;
tmpDescription.CopyTo(pDescription, descriptionBufferSize);
}
if (pName != 0) {
CWsbStringPtr tmpString;
tmpString = m_Copy[copyNumber - 1].name;
tmpString.CopyTo(pName, nameBufferSize);
}
if (pUpdate != 0) {
*pUpdate = m_Copy[copyNumber - 1].lastUpdate;
}
if (pLastError != 0 ) {
*pLastError = m_Copy[copyNumber - 1].lastError;
}
if (pNextRemoteDataSet != 0 ) {
*pNextRemoteDataSet = m_Copy[copyNumber - 1].nextRemoteDataSet;
}
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::GetCopyInfo"),
OLESTR("hr = <%ls>, SubSystemID = <%ls>, Description = <%ls>, Name = <%ls>, Update = <%ls>, LastError = <%ls>, NextRemoteDataSet = <%ls>"),
WsbHrAsString(hr), WsbPtrToGuidAsString(pMediaSubsystemId),
WsbQuickString(WsbPtrToStringAsString(pDescription)), WsbQuickString(WsbPtrToStringAsString(pName)),
WsbPtrToFiletimeAsString(FALSE, pUpdate), WsbPtrToHrAsString(pLastError),
WsbPtrToShortAsString(pNextRemoteDataSet));
return(hr);
}
HRESULT
CMediaInfo::GetCopyLastError(
USHORT copyNumber,
HRESULT *pLastError
)
/*++
Implements:
IMediaInfo::GetCopyLastError
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::GetCopyLastError"),OLESTR("Copy is <%u>"), copyNumber);
try {
WsbAffirm(((0 < copyNumber) && (copyNumber <= HSM_MAX_NUMBER_MEDIA_COPIES)),
E_INVALIDARG);
WsbAssertPointer(pLastError);
*pLastError = m_Copy[copyNumber - 1].lastError;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::GetCopyLastError"), OLESTR("hr = <%ls>, Last Error = <%ls>"), WsbHrAsString(hr), WsbPtrToHrAsString(pLastError));
return(hr);
}
HRESULT
CMediaInfo::GetCopyMediaSubsystemId(
USHORT copyNumber,
GUID *pMediaSubsystemId
)
/*++
Implements:
IMediaInfo::GetCopyMediaSubsystemId
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::GetCopyMediaSubsystemId"),OLESTR("Copy is <%u>"), copyNumber);
try {
WsbAffirm(((0 < copyNumber) && (copyNumber <= HSM_MAX_NUMBER_MEDIA_COPIES)),
E_INVALIDARG);
WsbAssertPointer(pMediaSubsystemId);
*pMediaSubsystemId = m_Copy[copyNumber - 1].id;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::GetCopyMediaSubsystemId"), OLESTR("hr = <%ls>, ID = <%ls>"), WsbHrAsString(hr), WsbPtrToGuidAsString(pMediaSubsystemId));
return(hr);
}
HRESULT
CMediaInfo::GetCopyUpdate(
USHORT copyNumber,
FILETIME *pUpdate
)
/*++
Implements:
IMediaInfo::GetCopyUpdate
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::GetCopyUpdate"),OLESTR("Copy is <%u>"), copyNumber);
try {
WsbAffirm(((0 < copyNumber) && (copyNumber <= HSM_MAX_NUMBER_MEDIA_COPIES)),
E_INVALIDARG);
WsbAssertPointer(pUpdate);
*pUpdate = m_Copy[copyNumber - 1].lastUpdate;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::GetCopyUpdate"), OLESTR("hr = <%ls>, Update = <%ls>"), WsbHrAsString(hr), WsbPtrToFiletimeAsString(FALSE,pUpdate));
return(hr);
}
HRESULT
CMediaInfo::GetDescription(
OLECHAR **pDescription,
ULONG bufferSize
)
/*++
Implements:
IMediaInfo::GetDescription
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::GetDescription"),OLESTR(""));
try {
WsbAssertPointer(pDescription);
CWsbStringPtr tmpDescription;
tmpDescription = m_Master.description;
WsbAffirmHr(tmpDescription.CopyTo(pDescription, bufferSize));
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::GetDescription"), OLESTR("hr = <%ls>, Description = <%ls>"), WsbHrAsString(hr), WsbPtrToStringAsString(pDescription));
return(hr);
}
HRESULT
CMediaInfo::GetFreeBytes(
LONGLONG *pFreeBytes
)
/*++
Implements:
IMediaInfo::GetFreeBytes
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::GetFreeBytes"),OLESTR(""));
try {
WsbAssertPointer(pFreeBytes);
*pFreeBytes = m_Master.freeBytes;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::GetFreeBytes"), OLESTR("hr = <%ls>, Free Space = <%ls>"), WsbHrAsString(hr), WsbPtrToLonglongAsString(pFreeBytes));
return(hr);
}
HRESULT
CMediaInfo::GetId(
GUID *pId
)
/*++
Implements:
IMediaInfo::GetId
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::GetId"),OLESTR(""));
try {
WsbAssertPointer(pId);
*pId = m_Master.id;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::GetId"), OLESTR("hr = <%ls>, Id = <%ls>"), WsbHrAsString(hr), WsbPtrToGuidAsString(pId));
return(hr);
}
HRESULT
CMediaInfo::GetLastError(
HRESULT *pLastError
)
/*++
Implements:
IMediaInfo::GetLastError
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::GetLastError"),OLESTR(""));
try {
WsbAssertPointer(pLastError);
*pLastError = m_Master.lastError;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::GetLastError"), OLESTR("hr = <%ls>, LastError = <%ls>"), WsbHrAsString(hr), WsbPtrToHrAsString(pLastError));
return(hr);
}
HRESULT
CMediaInfo::GetLogicalValidBytes(
LONGLONG *pLogicalValidBytes
)
/*++
Implements:
IMediaInfo::GetLogicalValidBytes
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::GetLogicalValidBytes"),OLESTR(""));
try {
WsbAssertPointer(pLogicalValidBytes);
*pLogicalValidBytes = m_LogicalValidBytes;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::GetLogicalValidBytes"), OLESTR("hr = <%ls>, LogicalValidBytes = <%ls>"), WsbHrAsString(hr), WsbPtrToLonglongAsString(pLogicalValidBytes));
return(hr);
}
HRESULT
CMediaInfo::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 *pRecallOnly,
FILETIME *pUpdate,
LONGLONG *pLogicalValidBytes,
BOOL *pRecreate
)
/*++
Implements:
IMediaInfo::GetMediaInfo
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::GetMediaInfo"),OLESTR(""));
try {
//Make sure we can provide data memebers
if (0 != pMediaId) {
*pMediaId = m_Master.id;
}
if (0 != pMediaSubsystemId) {
*pMediaSubsystemId = m_Master.ntmsId;
}
if (0 != pStoragePoolId) {
*pStoragePoolId = m_Master.storagePoolId;
}
if (0 != pDescription) {
CWsbStringPtr tmpString;
tmpString = m_Master.description;
WsbAffirmHr(tmpString.CopyTo(pDescription, descriptionBufferSize));
}
if (0 != pName) {
CWsbStringPtr tmpString;
tmpString = m_Master.name;
tmpString.CopyTo(pName, nameBufferSize);
}
if (0 != pType) {
*pType = m_Master.type;
}
if (0 != pUpdate) {
*pUpdate = m_Master.lastUpdate;
}
if (0 != pLastError) {
*pLastError = m_Master.lastError;
}
if (0 != pRecallOnly) {
*pRecallOnly = m_Master.recallOnly;
}
if (0 != pFreeBytes) {
*pFreeBytes = m_Master.freeBytes;
}
if (0 != pCapacity) {
*pCapacity = m_Master.capacity;
}
if (0 != pNextRemoteDataSet) {
*pNextRemoteDataSet = m_Master.nextRemoteDataSet;
}
if (0 != pLogicalValidBytes) {
*pLogicalValidBytes = m_LogicalValidBytes;
}
if (0 != pRecreate) {
*pRecreate = m_Recreate;
}
} WsbCatch(hr);
WsbTrace(OLESTR("CMediaInfo::GetMediaInfo id = <%ls>, ntmsId = <%ls>, StgPoolId = <%ls>\n"),
WsbPtrToGuidAsString(pMediaId), WsbQuickString(WsbPtrToGuidAsString(pMediaSubsystemId)),
WsbQuickString(WsbPtrToGuidAsString(pStoragePoolId)));
WsbTrace(OLESTR("CMediaInfo::GetMediaInfo Free = <%ls>, Cap = <%ls>, Last Error = <%ls>\n"),
WsbPtrToLonglongAsString(pFreeBytes),WsbQuickString(WsbPtrToLonglongAsString(pCapacity)),
WsbPtrToHrAsString(pLastError));
WsbTrace(OLESTR("CMediaInfo::GetMediaInfo NextRemoteDataSet = <%ls>, Description = <%ls>, Type = <%ls>\n"),
WsbPtrToShortAsString(pNextRemoteDataSet),
WsbPtrToStringAsString(pDescription),
WsbQuickString(WsbPtrToShortAsString((SHORT *)pType)));
WsbTrace(OLESTR("CMediaInfo::GetMediaInfo Name = <%ls>, RecallOnly = <%ls>, Update = <%ls>\n"),
WsbQuickString(WsbPtrToStringAsString(pName)),
WsbQuickString(WsbPtrToBoolAsString(pRecallOnly)),
WsbPtrToFiletimeAsString(FALSE, pUpdate));
WsbTrace(OLESTR("CMediaInfo::GetMediaInfo LogicalValid = <%ls>, Recreate = <%ls>\n"),
WsbQuickString(WsbPtrToLonglongAsString(pLogicalValidBytes)),
WsbQuickString(WsbPtrToBoolAsString(pRecreate)));
WsbTraceOut(OLESTR("CMediaInfo::GetMediaInfo"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CMediaInfo::GetMediaSubsystemId(
GUID *pMediaSubsystemId
)
/*++
Implements:
IMediaInfo::GetMediaSubsystemId
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::GetMediaSubsystemId"),OLESTR(""));
try {
WsbAssertPointer(pMediaSubsystemId);
*pMediaSubsystemId = m_Master.ntmsId;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::GetMediaSubsystemId"), OLESTR("hr = <%ls>, SubsystemID = <%ls>"), WsbHrAsString(hr), WsbPtrToGuidAsString(pMediaSubsystemId));
return(hr);
}
HRESULT
CMediaInfo::GetNextRemoteDataSet(
short *pNextRemoteDataSet
)
/*++
Implements:
IMediaInfo::GetNextRemoteDataSet
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::GetNextRemoteDataSet"),OLESTR(""));
try {
WsbAssertPointer(pNextRemoteDataSet);
*pNextRemoteDataSet = m_Master.nextRemoteDataSet;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::GetNextRemoteDataSet"), OLESTR("hr = <%ls>, Next Remote Data Set = <%ls>"), WsbHrAsString(hr), WsbPtrToShortAsString(pNextRemoteDataSet));
return(hr);
}
HRESULT
CMediaInfo::GetRecallOnlyStatus(
BOOL *pRecallOnlyStatus
)
/*++
Implements:
IMediaInfo::GetRecallOnlyStatus
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::GetRecallOnlyStatus"),OLESTR(""));
try {
WsbAssertPointer(pRecallOnlyStatus);
*pRecallOnlyStatus = m_Master.recallOnly;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::GetRecallOnlyStatus"), OLESTR("hr = <%ls>, Read only Status = <%ls>"), WsbHrAsString(hr), WsbPtrToBoolAsString(pRecallOnlyStatus));
return(hr);
}
HRESULT CMediaInfo::GetSizeMax
(
OUT ULARGE_INTEGER* pcbSize
)
/*++
Implements:
IPersistStream::GetSizeMax().
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::GetSizeMax"), OLESTR(""));
try {
hr = E_NOTIMPL;
pcbSize = 0;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::GetSizeMax"),
OLESTR("hr = <%ls>, Size = <%ls>"), WsbHrAsString(hr),
WsbPtrToUliAsString(pcbSize));
return(hr);
}
HRESULT
CMediaInfo::GetStoragePoolId(
GUID *pStoragePoolId
)
/*++
Implements:
IMediaInfo::GetStoragePoolId
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::GetStoragePoolId"),OLESTR(""));
try {
WsbAssertPointer(pStoragePoolId);
*pStoragePoolId = m_Master.storagePoolId;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::GetStoragePoolId"), OLESTR("hr = <%ls>, Storage Pool Id = <%ls>"), WsbHrAsString(hr), WsbPtrToGuidAsString(pStoragePoolId));
return(hr);
}
HRESULT
CMediaInfo::GetType(
HSM_JOB_MEDIA_TYPE *pType
)
/*++
Implements:
IMediaInfo::GetType
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::GetType"),OLESTR(""));
try {
WsbAssertPointer(pType);
*pType = m_Master.type;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::GetType"), OLESTR("hr = <%ls>, type = <%ls>"), WsbHrAsString(hr), WsbPtrToShortAsString((SHORT *)pType));
return(hr);
}
HRESULT
CMediaInfo::GetUpdate(
FILETIME *pUpdate
)
/*++
Implements:
IMediaInfo::GetUpdate
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::GetUpdate"),OLESTR(""));
try {
WsbAssertPointer(pUpdate);
*pUpdate = m_Master.lastUpdate;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::GetUpdate"), OLESTR("hr = <%ls>, Update = <%ls>"), WsbHrAsString(hr), WsbPtrToFiletimeAsString(FALSE, pUpdate));
return(hr);
}
HRESULT CMediaInfo::Load
(
IN IStream* pStream
)
/*++
Implements:
IPersistStream::Load().
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::Load"), OLESTR(""));
try {
WsbAssert(0 != pStream, E_POINTER);
ULONG descriptionLen = (ULONG)SEG_DB_MAX_MEDIA_NAME_LEN;
ULONG nameLen = (ULONG)SEG_DB_MAX_MEDIA_BAR_CODE_LEN;
WsbAffirmHr(WsbLoadFromStream(pStream, &m_Master.id));
WsbAffirmHr(WsbLoadFromStream(pStream, &m_Master.ntmsId));
WsbAffirmHr(WsbLoadFromStream(pStream, &m_Master.storagePoolId));
m_Master.description.Realloc(SEG_DB_MAX_MEDIA_NAME_LEN);
WsbAffirmHr(WsbLoadFromStream(pStream, (OLECHAR **)&m_Master.description, descriptionLen));
m_Master.name.Realloc(SEG_DB_MAX_MEDIA_BAR_CODE_LEN);
WsbAffirmHr(WsbLoadFromStream(pStream, (OLECHAR **)&m_Master.name, nameLen));
LONG tmpLong;
WsbAffirmHr(WsbLoadFromStream(pStream, &tmpLong));
m_Master.type = (HSM_JOB_MEDIA_TYPE)tmpLong;
WsbAffirmHr(WsbLoadFromStream(pStream, &m_Master.freeBytes));
WsbAffirmHr(WsbLoadFromStream(pStream, &m_Master.capacity));
WsbAffirmHr(WsbLoadFromStream(pStream, (LONG *)&m_Master.lastError));
WsbAffirmHr(WsbLoadFromStream(pStream, &m_Master.recallOnly));
WsbAffirmHr(WsbLoadFromStream(pStream, &m_Master.lastUpdate));
WsbAffirmHr(WsbLoadFromStream(pStream, &m_Master.nextRemoteDataSet));
WsbAffirmHr(WsbLoadFromStream(pStream, &m_LogicalValidBytes));
WsbAffirmHr(WsbLoadFromStream(pStream, &m_Recreate));
WsbAffirmHr(WsbLoadFromStream(pStream, &m_LastKnownGoodMaster.id));
WsbAffirmHr(WsbLoadFromStream(pStream, &m_LastKnownGoodMaster.ntmsId));
WsbAffirmHr(WsbLoadFromStream(pStream, &m_LastKnownGoodMaster.storagePoolId));
m_LastKnownGoodMaster.description.Realloc(SEG_DB_MAX_MEDIA_NAME_LEN);
WsbAffirmHr(WsbLoadFromStream(pStream, (OLECHAR **)&m_LastKnownGoodMaster.description, descriptionLen));
m_LastKnownGoodMaster.name.Realloc(SEG_DB_MAX_MEDIA_BAR_CODE_LEN);
WsbAffirmHr(WsbLoadFromStream(pStream, (OLECHAR **)&m_LastKnownGoodMaster.name, nameLen));
WsbAffirmHr(WsbLoadFromStream(pStream, &tmpLong));
m_LastKnownGoodMaster.type = (HSM_JOB_MEDIA_TYPE)tmpLong;
WsbAffirmHr(WsbLoadFromStream(pStream, &m_LastKnownGoodMaster.freeBytes));
WsbAffirmHr(WsbLoadFromStream(pStream, &m_LastKnownGoodMaster.capacity));
WsbAffirmHr(WsbLoadFromStream(pStream, (LONG *)&m_LastKnownGoodMaster.lastError));
WsbAffirmHr(WsbLoadFromStream(pStream, &m_LastKnownGoodMaster.recallOnly));
WsbAffirmHr(WsbLoadFromStream(pStream, &m_LastKnownGoodMaster.lastUpdate));
WsbAffirmHr(WsbLoadFromStream(pStream, &m_LastKnownGoodMaster.nextRemoteDataSet));
for (int i = 0; i < HSM_MAX_NUMBER_MEDIA_COPIES; i++ ) {
WsbAffirmHr(WsbLoadFromStream(pStream, &(m_Copy[i].id)));
m_Copy[i].description.Realloc(SEG_DB_MAX_MEDIA_NAME_LEN);
WsbAffirmHr(WsbLoadFromStream(pStream, (OLECHAR **)&(m_Copy[i].description), descriptionLen));
m_Copy[i].name.Realloc(SEG_DB_MAX_MEDIA_BAR_CODE_LEN);
WsbAffirmHr(WsbLoadFromStream(pStream, (OLECHAR **)&(m_Copy[i].name), nameLen));
WsbAffirmHr(WsbLoadFromStream(pStream, &(m_Copy[i].lastUpdate)));
WsbAffirmHr(WsbLoadFromStream(pStream, (LONG *)&(m_Copy[i].lastError)));
WsbAffirmHr(WsbLoadFromStream(pStream, &(m_Copy[i].nextRemoteDataSet)));
}
} WsbCatch(hr);
WsbTrace(OLESTR("ID = <%ls>, rmsId = <%ls>, stgPoolId = <%ls>\n"),
WsbQuickString(WsbGuidAsString(m_Master.id)),
WsbQuickString(WsbGuidAsString(m_Master.ntmsId)),
WsbQuickString(WsbGuidAsString(m_Master.storagePoolId)));
WsbTrace(OLESTR("Description = <%ls>, name = <%ls>, type = <%u>\n"),
(OLECHAR *)m_Master.description,
(OLECHAR *)m_Master.name,
m_Master.type);
WsbTrace(OLESTR("FreeBytes = <%ls>, capacity = <%ls>, lastError = <%ls>\n"),
WsbQuickString(WsbLonglongAsString(m_Master.freeBytes)),
WsbQuickString(WsbLonglongAsString(m_Master.capacity)),
WsbQuickString(WsbHrAsString(m_Master.lastError)));
WsbTrace(OLESTR("RecallOnly = <%ls>, NextRemotDataSet = <%u>\n"),
WsbBoolAsString(m_Master.recallOnly),
m_Master.nextRemoteDataSet);
WsbTrace(OLESTR("LastUpdate = <%ls>, logicalValidBytes = <%ls>, Recreate = <%ls>\n"),
WsbFiletimeAsString(FALSE, m_Master.lastUpdate),
WsbLonglongAsString(m_LogicalValidBytes),
WsbBoolAsString(m_Recreate));
WsbTraceOut(OLESTR("CMediaInfo::Load"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT CMediaInfo::Print
(
IN IStream* pStream
)
/*++
Implements:
IWsbDbEntity::Print
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::Print"), OLESTR(""));
try {
WsbAssert(0 != pStream, E_POINTER);
CWsbStringPtr strGuid;
WsbAffirmHr(WsbSafeGuidAsString(m_Master.id, strGuid));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" id = %ls,"),
(WCHAR *)strGuid));
WsbAffirmHr(WsbSafeGuidAsString(m_Master.ntmsId, strGuid));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" ntmsId = %ls,"),
(WCHAR *)strGuid));
WsbAffirmHr(WsbSafeGuidAsString(m_Master.storagePoolId, strGuid));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" StoragePoolId = %ls,"),
(WCHAR *)strGuid));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" RS Media Name = %ls,"), (OLECHAR *)m_Master.description));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" RMS Media Name = %ls,"), (OLECHAR *)m_Master.name));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" Media Type = %u,"), m_Master.type));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" Last Update = %ls,"),
WsbFiletimeAsString(FALSE, m_Master.lastUpdate)));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" Last Error = %ls,"), WsbHrAsString(m_Master.lastError)));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" Is Recall Only = %ls,"), WsbBoolAsString(m_Master.recallOnly)));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" Free Bytes = %ls,"),
WsbQuickString(WsbLonglongAsString(m_Master.freeBytes))));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" Capacity = %ls,"),
WsbQuickString(WsbLonglongAsString(m_Master.capacity))));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" Logical Valid Bytes = %ls,"),
WsbQuickString(WsbLonglongAsString(m_LogicalValidBytes))));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" NextRemoteDataSet = %u,"), m_Master.nextRemoteDataSet));
WsbAffirmHr(CWsbDbEntity::Print(pStream));
//
// Last Known Good Master
//
WsbAffirmHr(WsbSafeGuidAsString(m_LastKnownGoodMaster.id, strGuid));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR("\n Last Known Good id = %ls,"),
(WCHAR *)strGuid));
WsbAffirmHr(WsbSafeGuidAsString(m_LastKnownGoodMaster.ntmsId, strGuid));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" ntmsId = %ls,"),
(WCHAR *)strGuid));
WsbAffirmHr(WsbSafeGuidAsString(m_LastKnownGoodMaster.storagePoolId, strGuid));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" StoragePoolId = %ls,"),
(WCHAR *)strGuid));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" RS Media Name = %ls,"), (OLECHAR *)m_LastKnownGoodMaster.description));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" RMS Media Name = %ls,"), (OLECHAR *)m_LastKnownGoodMaster.name));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" Media Type = %u,"), m_LastKnownGoodMaster.type));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" Last Update = %ls,"),
WsbFiletimeAsString(FALSE, m_LastKnownGoodMaster.lastUpdate)));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" Last Error = %ls,"), WsbHrAsString(m_LastKnownGoodMaster.lastError)));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" Is Recall Only = %ls,"), WsbBoolAsString(m_LastKnownGoodMaster.recallOnly)));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" Free Bytes = %ls,"),
WsbQuickString(WsbLonglongAsString(m_LastKnownGoodMaster.freeBytes))));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" Capacity = %ls,"),
WsbQuickString(WsbLonglongAsString(m_LastKnownGoodMaster.capacity))));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" NextRemoteDataSet = %u,"), m_LastKnownGoodMaster.nextRemoteDataSet));
//
// Media Copies
//
for (int i = 0; i < HSM_MAX_NUMBER_MEDIA_COPIES; i++ ) {
WsbAffirmHr(WsbSafeGuidAsString(m_Copy[i].id, strGuid));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR("\n RS Media Copy %d RMS ID = %ls,") ,(i+1), (WCHAR *)strGuid));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" RS Media Name = %ls,") , (OLECHAR *)m_Copy[i].description));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" RMS Media Name = %ls,") , (OLECHAR *)m_Copy[i].name));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" Last Update = %ls,") , WsbFiletimeAsString(FALSE,m_Copy[i].lastUpdate)));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" Last Error = %ls,") , WsbHrAsString(m_Copy[i].lastError)));
WsbAffirmHr(WsbPrintfToStream(pStream, OLESTR(" NextRemoteDataSet = %u,") , m_Copy[i].nextRemoteDataSet));
}
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::Print"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT CMediaInfo::Save
(
IN IStream* pStream,
IN BOOL clearDirty
)
/*++
Implements:
IPersistStream::Save().
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::Save"), OLESTR("clearDirty = <%ls>"), WsbBoolAsString(clearDirty));
WsbTrace(OLESTR("ID = <%ls>, rmsId = <%ls>, stgPoolId = <%ls>\n"),
WsbQuickString(WsbGuidAsString(m_Master.id)),
WsbQuickString(WsbGuidAsString(m_Master.ntmsId)),
WsbQuickString(WsbGuidAsString(m_Master.storagePoolId)));
WsbTrace(OLESTR("Description = <%ls>, name = <%ls>, type = <%u>\n"),
(OLECHAR *)m_Master.description,
(OLECHAR *)m_Master.name,
m_Master.type);
WsbTrace(OLESTR("FreeBytes = <%ls>, capacity = <%ls>, lastError = <%ls>\n"),
WsbQuickString(WsbLonglongAsString(m_Master.freeBytes)),
WsbQuickString(WsbLonglongAsString(m_Master.capacity)),
WsbHrAsString(m_Master.lastError));
WsbTrace(OLESTR("RecallOnly = <%ls>, NextRemotDataSet = <%u>\n"),
WsbBoolAsString(m_Master.recallOnly),
m_Master.nextRemoteDataSet);
WsbTrace(OLESTR("LastUpdate = <%ls>, logicalValidBytes = <%ls>, Recreate = <%ls>\n"),
WsbFiletimeAsString(FALSE, m_Master.lastUpdate),
WsbLonglongAsString(m_LogicalValidBytes),
WsbBoolAsString(m_Recreate));
try {
WsbAssert(0 != pStream, E_POINTER);
WsbAffirmHr(WsbSaveToStream(pStream, m_Master.id));
WsbAffirmHr(WsbSaveToStream(pStream, m_Master.ntmsId));
WsbAffirmHr(WsbSaveToStream(pStream, m_Master.storagePoolId));
WsbAffirmHr(WsbSaveToStream(pStream, (OLECHAR *)m_Master.description));
WsbAffirmHr(WsbSaveToStream(pStream, (OLECHAR *)m_Master.name));
WsbAffirmHr(WsbSaveToStream(pStream, (LONG)m_Master.type));
WsbAffirmHr(WsbSaveToStream(pStream, m_Master.freeBytes));
WsbAffirmHr(WsbSaveToStream(pStream, m_Master.capacity));
WsbAffirmHr(WsbSaveToStream(pStream, (LONG)m_Master.lastError));
WsbAffirmHr(WsbSaveToStream(pStream, m_Master.recallOnly));
WsbAffirmHr(WsbSaveToStream(pStream, m_Master.lastUpdate));
WsbAffirmHr(WsbSaveToStream(pStream, m_Master.nextRemoteDataSet));
WsbAffirmHr(WsbSaveToStream(pStream, m_LogicalValidBytes));
WsbAffirmHr(WsbSaveToStream(pStream, m_Recreate));
WsbAffirmHr(WsbSaveToStream(pStream, m_LastKnownGoodMaster.id));
WsbAffirmHr(WsbSaveToStream(pStream, m_LastKnownGoodMaster.ntmsId));
WsbAffirmHr(WsbSaveToStream(pStream, m_LastKnownGoodMaster.storagePoolId));
WsbAffirmHr(WsbSaveToStream(pStream, (OLECHAR *)m_LastKnownGoodMaster.description));
WsbAffirmHr(WsbSaveToStream(pStream, (OLECHAR *)m_LastKnownGoodMaster.name));
WsbAffirmHr(WsbSaveToStream(pStream, (LONG)m_LastKnownGoodMaster.type));
WsbAffirmHr(WsbSaveToStream(pStream, m_LastKnownGoodMaster.freeBytes));
WsbAffirmHr(WsbSaveToStream(pStream, m_LastKnownGoodMaster.capacity));
WsbAffirmHr(WsbSaveToStream(pStream, (LONG)m_LastKnownGoodMaster.lastError));
WsbAffirmHr(WsbSaveToStream(pStream, m_LastKnownGoodMaster.recallOnly));
WsbAffirmHr(WsbSaveToStream(pStream, m_LastKnownGoodMaster.lastUpdate));
WsbAffirmHr(WsbSaveToStream(pStream, m_LastKnownGoodMaster.nextRemoteDataSet));
for (int i = 0; i < HSM_MAX_NUMBER_MEDIA_COPIES; i++ ) {
WsbAffirmHr(WsbSaveToStream(pStream, m_Copy[i].id));
WsbAffirmHr(WsbSaveToStream(pStream, m_Copy[i].description));
WsbAffirmHr(WsbSaveToStream(pStream, m_Copy[i].name));
WsbAffirmHr(WsbSaveToStream(pStream, m_Copy[i].lastUpdate));
WsbAffirmHr(WsbSaveToStream(pStream, (LONG)(m_Copy[i].lastError)));
WsbAffirmHr(WsbSaveToStream(pStream, m_Copy[i].nextRemoteDataSet));
}
// If we got it saved and we were asked to clear the dirty bit, then
// do so now.
if (clearDirty) {
m_isDirty = FALSE;
}
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::Save"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CMediaInfo::SetName(
OLECHAR *name
)
/*++
Implements:
IMediaInfo::SetName
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::SetName"),OLESTR("Name = <%ls>"), name);
try {
WsbAssertPointer(name);
m_Master.name = name;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::SetName"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CMediaInfo::SetCapacity(
LONGLONG capacity
)
/*++
Implements:
IMediaInfo::SetCapacity
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::SetCapacity"),OLESTR("Capacity = <%ls>"), WsbLonglongAsString(capacity));
try {
m_Master.capacity = capacity;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::SetCapacity"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CMediaInfo::SetCopyName(
USHORT copyNumber,
OLECHAR *name
)
/*++
Implements:
IMediaInfo::SetCopyName
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::SetCopyName"),OLESTR("copy = <%u>, Name = <%ls>"), copyNumber, name);
try {
// This method is not being used and currently we don't save the copy name in RSS database
// due to Windows Bugs 407340
WsbThrow(E_NOTIMPL);
/*** WsbAffirm(((0 < copyNumber) && (copyNumber <= HSM_MAX_NUMBER_MEDIA_COPIES)),
E_INVALIDARG);
m_Copy[copyNumber - 1].name = name; ***/
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::SetCopyName"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CMediaInfo::SetCopyNextRemoteDataSet(
USHORT copyNumber,
SHORT nextRemoteDataSet
)
/*++
Implements:
IMediaInfo::SetCopyNextRemoteDataSet
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::SetCopyNextRemoteDataSet"),OLESTR("copy = <%u>, NextRemoteDataSet = <%d>"), copyNumber, nextRemoteDataSet);
try {
WsbAffirm(((0 < copyNumber) && (copyNumber <= HSM_MAX_NUMBER_MEDIA_COPIES)),
E_INVALIDARG);
m_Copy[copyNumber - 1].nextRemoteDataSet = nextRemoteDataSet;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::SetCopyNextRemoteDataSet"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CMediaInfo::SetCopyDescription(
USHORT copyNumber,
OLECHAR *description
)
/*++
Implements:
IMediaInfo::SetCopyDescription
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::SetCopyDescription"),OLESTR("copy = <%u>, description = <%ls>"), copyNumber, description);
try {
// This method is not being used and currently we don't save the copy description in RSS database
// due to Windows Bugs 407340
WsbThrow(E_NOTIMPL);
/*** WsbAffirm(((0 < copyNumber) && (copyNumber <= HSM_MAX_NUMBER_MEDIA_COPIES)),
E_INVALIDARG);
m_Copy[copyNumber - 1].description = description; ***/
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::SetCopyDescription"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CMediaInfo::SetCopyInfo(
USHORT copyNumber,
GUID mediaSubsystemId,
OLECHAR *description,
OLECHAR *name,
FILETIME update,
HRESULT lastError,
SHORT nextRemoteDataSet
)
/*++
Implements:
IMediaInfo::SetCopyInfo
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::SetCopyInfo"),OLESTR("copy = <%u>, SubsystemId = <%ls>, Description = <%ls>, Name = <%ls>, update = <%ls>, lastError = <%ls>, NextRemoteDataSet = <%d> "),
copyNumber, WsbGuidAsString(mediaSubsystemId), description, name, WsbFiletimeAsString(FALSE, update),WsbHrAsString(lastError));
try {
WsbAffirm(((0 < copyNumber) && (copyNumber <= HSM_MAX_NUMBER_MEDIA_COPIES)),
E_INVALIDARG);
m_Copy[copyNumber - 1].id = mediaSubsystemId;
// We don't save the copy name & description in RSS database anymore due to Windows Bugs 407340
// The strings in the structure are already initialize to a null string so there's no need to set them again
/*** m_Copy[copyNumber - 1].description = description;
m_Copy[copyNumber - 1].name = name; ***/
m_Copy[copyNumber - 1].lastUpdate = update;
m_Copy[copyNumber - 1].lastError = lastError;
m_Copy[copyNumber - 1].nextRemoteDataSet = nextRemoteDataSet;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::SetCopyInfo"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CMediaInfo::SetCopyLastError(
USHORT copyNumber,
HRESULT lastError
)
/*++
Implements:
IMediaInfo::SetCopyLastError
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::SetCopyLastError"),OLESTR("Last Error = <%ls>"), WsbHrAsString(lastError));
try {
WsbAffirm(((0 < copyNumber) && (copyNumber <= HSM_MAX_NUMBER_MEDIA_COPIES)),
E_INVALIDARG);
m_Copy[copyNumber - 1].lastError = lastError;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::SetCopyLastError"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CMediaInfo::SetCopyMediaSubsystemId(
USHORT copyNumber,
GUID mediaSubsystemId
)
/*++
Implements:
IMediaInfo::SetCopyMediaSubsystemId
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::SetCopyMediaSubsystemId"),OLESTR("SubsystemId = <%ls>"), WsbGuidAsString(mediaSubsystemId));
try {
WsbAffirm(((0 < copyNumber) && (copyNumber <= HSM_MAX_NUMBER_MEDIA_COPIES)),
E_INVALIDARG);
m_Copy[copyNumber - 1].id = mediaSubsystemId;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::SetCopyMediaSubsystemId"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CMediaInfo::SetCopyUpdate(
USHORT copyNumber,
FILETIME update
)
/*++
Implements:
IMediaInfo::SetCopyUpdate
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::SetCopyUpdate"),OLESTR("update = <%ls>"), WsbFiletimeAsString(FALSE, update));
try {
WsbAffirm(((0 < copyNumber) && (copyNumber <= HSM_MAX_NUMBER_MEDIA_COPIES)),
E_INVALIDARG);
m_Copy[copyNumber - 1].lastUpdate = update;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::SetCopyUpdate"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CMediaInfo::SetDescription(
OLECHAR *description
)
/*++
Implements:
IMediaInfo::SetDescription
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::SetDescription"),OLESTR("description = <%ls>"), description);
try {
WsbAssertPointer(description);
m_Master.description = description;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::SetDescription"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CMediaInfo::SetFreeBytes(
LONGLONG FreeBytes
)
/*++
Implements:
IMediaInfo::SetFreeBytes
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::SetFreeBytes"),OLESTR("Free Space = <%ls>"), WsbLonglongAsString(FreeBytes));
try {
m_Master.freeBytes = FreeBytes;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::SetFreeBytes"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CMediaInfo::SetId(
GUID id
)
/*++
Implements:
IMediaInfo::SetId
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::SetId"),OLESTR("ID = <%ls>"), WsbGuidAsString(id));
try {
m_Master.id = id;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::SetId"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CMediaInfo::SetLastError(
HRESULT lastError
)
/*++
Implements:
IMediaInfo::SetLastError
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::SetLastError"),OLESTR("last error = <%ls>"), WsbHrAsString(lastError));
try {
m_Master.lastError = lastError;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::SetLastError"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CMediaInfo::SetLogicalValidBytes(
LONGLONG logicalValidBytes
)
/*++
Implements:
IMediaInfo::SetLogicalValidBytes
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::SetLogicalValidBytes"),OLESTR("LogicalValidBytes = <%ls>"), WsbLonglongAsString(logicalValidBytes));
try {
m_LogicalValidBytes = logicalValidBytes;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::SetLogicalValidBytes"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CMediaInfo::SetMediaInfo
(
GUID mediaId,
GUID mediaSubsystemId,
GUID storagePoolId,
LONGLONG FreeBytes,
LONGLONG Capacity,
HRESULT lastError,
short nextRemoteDataSet,
OLECHAR *description,
HSM_JOB_MEDIA_TYPE type,
OLECHAR *name,
BOOL RecallOnly,
FILETIME update,
LONGLONG logicalValidBytes,
BOOL recreate
)
/*++
Implements:
IMediaInfo::SetMediaInfo().
--*/
{
WsbTraceIn(OLESTR("CMediaInfo::SetMediaInfo"), OLESTR(""));
WsbTrace(OLESTR("CMediaInfo::SetMediaInfo id = <%ls>, SubsystemId = <%ls>, StoragePoolId = <%ls>\n"),
WsbGuidAsString(mediaId),
WsbQuickString(WsbGuidAsString(mediaSubsystemId)),
WsbQuickString(WsbGuidAsString(storagePoolId)));
WsbTrace(OLESTR("CMediaInfo::SetMediaInfo FreeBytes = <%ls>, Capacity = <%ls>, lastError = <%ls>\n"),
WsbLonglongAsString(FreeBytes),
WsbQuickString(WsbLonglongAsString(Capacity)),
WsbHrAsString(lastError));
WsbTrace(OLESTR("CMediaInfo::SetMediaInfo NextRemoteDataSet = <%d>, Description = <%ls>, Type = <%d>\n"),
nextRemoteDataSet,
(OLECHAR *)description,
type);
WsbTrace(OLESTR("CMediaInfo::SetMediaInfo Name = <%ls>, RecallOnly = <%ls>, update = <%ls>\n"),
(OLECHAR *)name,
WsbBoolAsString(RecallOnly),
WsbFiletimeAsString(FALSE, update));
WsbTrace(OLESTR("CMediaInfo::SetMediaInfo logicalValidBytes = <%ls>, recreate = <%ls>\n)"),
WsbLonglongAsString(logicalValidBytes), WsbBoolAsString(m_Recreate));
m_isDirty = TRUE;
m_Master.id = mediaId;
m_Master.ntmsId = mediaSubsystemId;
m_Master.storagePoolId = storagePoolId;
m_Master.freeBytes = FreeBytes;
m_Master.capacity = Capacity;
m_Master.lastError = lastError;
m_Master.description = description;
m_Master.type = type;
m_Master.name = name;
m_Master.recallOnly = RecallOnly;
m_Master.lastUpdate = update;
m_Master.nextRemoteDataSet = nextRemoteDataSet;
m_LogicalValidBytes = logicalValidBytes;
m_Recreate = recreate;
WsbTraceOut(OLESTR("CMediaInfo::SetMediaInfo"), OLESTR("hr = <%ls>"),WsbHrAsString(S_OK));
return(S_OK);
}
HRESULT
CMediaInfo::SetMediaSubsystemId(
GUID mediaSubsystemId
)
/*++
Implements:
IMediaInfo::SetMediaSubsystemId
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::SetMediaSubsystemId "),OLESTR("Subsystem Id = <%ls>"),
WsbGuidAsString(mediaSubsystemId));
try {
m_Master.ntmsId = mediaSubsystemId;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::SetMediaSubsystemId "), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CMediaInfo::SetNextRemoteDataSet(
short nextRemoteDataSet
)
/*++
Implements:
IMediaInfo::SetNextRemoteDataSet
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::SetNextRemoteDataSet"),OLESTR("Data Set = <%u>"), nextRemoteDataSet);
try {
m_Master.nextRemoteDataSet = nextRemoteDataSet;
m_LastKnownGoodMaster.nextRemoteDataSet = nextRemoteDataSet;
//
// Handle exception case where a copy reports more data sets than the
// master. This occurs when we increment the data set count, but
// never write to the media, then create a media copy, then write
// to the master which decrements the data set count to handle the
// missing data set, then finally increment the data set count.
for (int i=0; i< HSM_MAX_NUMBER_MEDIA_COPIES; i++) {
if (m_Copy[i].nextRemoteDataSet > 0) {
if (nextRemoteDataSet < m_Copy[i].nextRemoteDataSet) {
WsbAssert(nextRemoteDataSet+1 == m_Copy[i].nextRemoteDataSet, E_UNEXPECTED);
m_Copy[i].nextRemoteDataSet--;
}
}
}
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::SetNextRemoteDataSet"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CMediaInfo::SetRecallOnlyStatus(
BOOL RecallOnlyStatus
)
/*++
Implements:
IMediaInfo::SetRecallOnlyStatus
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::SetRecallOnlyStatus"),OLESTR("Read Only Status = <%ls>"),
WsbBoolAsString(RecallOnlyStatus));
try {
m_Master.recallOnly = RecallOnlyStatus;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::SetRecallOnlyStatus"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CMediaInfo::SetStoragePoolId(
GUID storagePoolId
)
/*++
Implements:
IMediaInfo::SetStoragePoolId
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::SetStoragePoolId"),OLESTR("Storage Pool Id = <%ls>"),
WsbGuidAsString(storagePoolId));
try {
m_Master.storagePoolId = storagePoolId;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::SetStoragePoolId"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CMediaInfo::SetType(
HSM_JOB_MEDIA_TYPE type
)
/*++
Implements:
IMediaInfo::SetType
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::SetType"),OLESTR("type = <%u>"), (USHORT)type);
try {
m_Master.type = type;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::SetType"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CMediaInfo::SetUpdate(
FILETIME update
)
/*++
Implements:
IMediaInfo::SetUpdate
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::SetUpdate"),OLESTR("Update = <%ls>"),
WsbFiletimeAsString(FALSE, update));
try {
m_Master.lastUpdate = update;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::SetUpdate"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CMediaInfo::Test
(
OUT USHORT *pTestsPassed,
OUT USHORT *pTestsFailed
)
/*++
Implements:
IWsbTestable::Test().
--*/
{
HRESULT hr = S_OK;
CComPtr<IMediaInfo> pMediaInfo1;
CComPtr<IMediaInfo> pMediaInfo2;
WsbTraceIn(OLESTR("CMediaInfo::Test"), OLESTR(""));
*pTestsPassed = *pTestsFailed = 0;
try {
hr = E_NOTIMPL;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::Test"), OLESTR("hr = <%ls>"),WsbHrAsString(hr));
return( hr );
}
HRESULT
CMediaInfo::UpdateKey(
IWsbDbKey *pKey
)
/*++
Implements:
IWsbDbEntity::UpdateKey
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::UpdateKey"),OLESTR(""));
try {
WsbAffirmHr(pKey->SetToGuid(m_Master.id));
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::UpdateKey"),OLESTR("hr = <%ls>"),WsbHrAsString(hr));
return(hr);
}
HRESULT
CMediaInfo::SetRecreate(
BOOL recreate
)
/*++
Implements:
IMediaInfo::SetRecreate
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::SetRecreate"),OLESTR("Recreate = <%ls>"), WsbBoolAsString(recreate));
try {
m_Recreate = recreate;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::SetRecreate"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CMediaInfo::GetRecreate(
BOOL *pRecreate
)
/*++
Implements:
IMediaInfo::GetRecreate
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::GetRecreate"),OLESTR(""));
try {
WsbAssertPointer(pRecreate);
*pRecreate = m_Recreate;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::GetRecreate"), OLESTR("hr = <%ls>, recreate = <%ls>"),
WsbHrAsString(hr), WsbPtrToBoolAsString(pRecreate));
return(hr);
}
HRESULT
CMediaInfo::GetLastKnownGoodMasterInfo(
GUID* pId,
GUID *pNtmsId,
GUID *pStoragePoolId,
LONGLONG *pFreeBytes,
LONGLONG *pCapacity,
HRESULT *pLastError,
OLECHAR **pDescription,
ULONG descriptionBufferSize,
HSM_JOB_MEDIA_TYPE *pType,
OLECHAR **pName,
ULONG nameBufferSize,
BOOL *pRecallOnly,
FILETIME *pUpdate,
SHORT *pNextRemoteDataSet
)
/*++
Implements:
IMediaInfo::GetLastKnownGoodMasterInfo
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::GetLastKnownGoodMasterInfo"),OLESTR(""));
try {
//Make sure we can provide data memebers
if (0 != pId) {
*pId = m_LastKnownGoodMaster.id;
}
if (0 != pNtmsId) {
*pNtmsId = m_LastKnownGoodMaster.ntmsId;
}
if (0 != pStoragePoolId) {
*pStoragePoolId = m_LastKnownGoodMaster.storagePoolId;
}
if (0 != pDescription) {
CWsbStringPtr tmpString;
tmpString = m_LastKnownGoodMaster.description;
tmpString.CopyTo(pDescription, descriptionBufferSize);
}
if (0 != pName) {
CWsbStringPtr tmpString;
tmpString = m_LastKnownGoodMaster.name;
tmpString.CopyTo(pName, nameBufferSize);
}
if (0 != pType) {
*pType = m_LastKnownGoodMaster.type;
}
if (0 != pUpdate) {
*pUpdate = m_LastKnownGoodMaster.lastUpdate;
}
if (0 != pLastError) {
*pLastError = m_LastKnownGoodMaster.lastError;
}
if (0 != pRecallOnly) {
*pRecallOnly = m_LastKnownGoodMaster.recallOnly;
}
if (0 != pFreeBytes) {
*pFreeBytes = m_LastKnownGoodMaster.freeBytes;
}
if (0 != pCapacity) {
*pCapacity = m_LastKnownGoodMaster.capacity;
}
if (0 != pNextRemoteDataSet) {
*pNextRemoteDataSet = m_LastKnownGoodMaster.nextRemoteDataSet;
}
} WsbCatch(hr);
WsbTrace(OLESTR("CMediaInfo::GetLastKnownGoodMasterInfo Id = <%ls>, ntmsId = <%ls>, StgPoolId = <%ls>\n"),
WsbPtrToGuidAsString(pId), WsbQuickString(WsbPtrToGuidAsString(pNtmsId)),
WsbQuickString(WsbPtrToGuidAsString(pStoragePoolId)));
WsbTrace(OLESTR("CMediaInfo::GetLastKnownGoodMasterInfo Free = <%ls>, Cap = <%ls>, Last Error = <%ls>\n"),
WsbPtrToLonglongAsString(pFreeBytes),WsbQuickString(WsbPtrToLonglongAsString(pCapacity)),
WsbPtrToHrAsString(pLastError));
WsbTrace(OLESTR("CMediaInfo::GetLastKnownGoodMasterInfo Description = <%ls>, Type = <%d)\n"),
WsbPtrToStringAsString(pDescription),
WsbQuickString(WsbPtrToShortAsString((SHORT *)pType)));
WsbTrace(OLESTR("CMediaInfo::GetLastKnownGoodMasterInfo Name = <%ls>, RecallOnly = <%ls>, Update = <%ls>, NextRemoteDataSet = <%ls>\n"),
WsbQuickString(WsbPtrToStringAsString(pName)),
WsbQuickString(WsbPtrToBoolAsString(pRecallOnly)),
WsbPtrToFiletimeAsString(FALSE, pUpdate),
WsbPtrToShortAsString(pNextRemoteDataSet));
WsbTraceOut(OLESTR("CMediaInfo::GetLastKnownGoodMasterInfo"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CMediaInfo::GetLKGMasterNextRemoteDataSet(
short *pNextRemoteDataSet
)
/*++
Implements:
IMediaInfo::GetLKGMasterNextRemoteDataSet
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::GetLKGMasterNextRemoteDataSet"),OLESTR(""));
try {
WsbAssertPointer(pNextRemoteDataSet);
*pNextRemoteDataSet = m_LastKnownGoodMaster.nextRemoteDataSet;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::GetLKGMasterNextRemoteDataSet"), OLESTR("hr = <%ls>, Next Last-Known-Good-Master Remote-Data-Set = <%ls>"), WsbHrAsString(hr), WsbPtrToShortAsString(pNextRemoteDataSet));
return(hr);
}
HRESULT
CMediaInfo::SetLastKnownGoodMasterInfo
(
GUID mediaId,
GUID mediaSubsystemId,
GUID storagePoolId,
LONGLONG FreeBytes,
LONGLONG Capacity,
HRESULT lastError,
OLECHAR *description,
HSM_JOB_MEDIA_TYPE type,
OLECHAR *name,
BOOL RecallOnly,
FILETIME update,
SHORT nextRemoteDataSet
)
/*++
Implements:
IMediaInfo::SetLastKnownGoodMasterInfo().
--*/
{
WsbTraceIn(OLESTR("CMediaInfo::SetLastKnownGoodMasterInfo"), OLESTR(""));
WsbTrace(OLESTR("CMediaInfo::SetLastKnownGoodMasterInfo"), OLESTR("id = <%ls>, SubsystemId = <%ls>, StoragePoolId = <%ls>\n"),
WsbGuidAsString(mediaId),
WsbQuickString(WsbGuidAsString(mediaSubsystemId)),
WsbQuickString(WsbGuidAsString(storagePoolId)));
WsbTrace(OLESTR("CMediaInfo::SetLastKnownGoodMasterInfo"), OLESTR("FreeBytes = <%ls>, Capacity = <%ls>, lastError = <%ls>\n"),
WsbLonglongAsString(FreeBytes),
WsbQuickString(WsbLonglongAsString(Capacity)),
WsbHrAsString(lastError));
WsbTrace(OLESTR("CMediaInfo::SetLastKnownGoodMasterInfo"), OLESTR("Description = <%ls>, Type = <%d>\n"),
(OLECHAR *)description,
type);
WsbTrace(OLESTR("CMediaInfo::SetLastKnownGoodMasterInfo"), OLESTR("Name = <%ls>, RecallOnly = <%ls>, update = <%ls>, nextRemoteDataSet = <%d>\n"),
(OLECHAR *)name,
WsbBoolAsString(RecallOnly),
WsbFiletimeAsString(FALSE, update),
nextRemoteDataSet);
m_isDirty = TRUE;
m_LastKnownGoodMaster.id = mediaId;
m_LastKnownGoodMaster.ntmsId = mediaSubsystemId;
m_LastKnownGoodMaster.storagePoolId = storagePoolId;
m_LastKnownGoodMaster.freeBytes = FreeBytes;
m_LastKnownGoodMaster.capacity = Capacity;
m_LastKnownGoodMaster.lastError = lastError;
m_LastKnownGoodMaster.type = type;
/*** These strings are not being used for anything and we need to save space in the media record - see Windows Bugs 407340
m_LastKnownGoodMaster.description = description;
m_LastKnownGoodMaster.name = name; ***/
m_LastKnownGoodMaster.recallOnly = RecallOnly;
m_LastKnownGoodMaster.lastUpdate = update;
m_LastKnownGoodMaster.nextRemoteDataSet = nextRemoteDataSet;
WsbTraceOut(OLESTR("CMediaInfo::SetLastKnownGoodMasterInfo"), OLESTR("hr = <%ls>"),WsbHrAsString(S_OK));
return(S_OK);
}
HRESULT
CMediaInfo::DeleteCopy(
USHORT copyNumber
)
/*++
Implements:
IMediaInfo::DeleteCopy
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::DeleteCopy"),OLESTR("copy = <%u>"), copyNumber);
try {
//
// Make sure we have a valid copy number
//
WsbAffirm(((0 < copyNumber) && (copyNumber <= HSM_MAX_NUMBER_MEDIA_COPIES)),
E_INVALIDARG);
//
// Null out the existing copy information
//
m_Copy[copyNumber - 1].id = GUID_NULL;
m_Copy[copyNumber - 1].description = OLESTR("");
m_Copy[copyNumber - 1].name = OLESTR("");
m_Copy[copyNumber - 1].lastUpdate = WsbLLtoFT(0);
m_Copy[copyNumber - 1].lastError = S_OK;
m_Copy[copyNumber - 1].nextRemoteDataSet = 0;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::DeleteCopy"), OLESTR("hr = <%ls>"), WsbHrAsString(hr));
return(hr);
}
HRESULT
CMediaInfo::RecreateMaster( void )
/*++
Implements:
IMediaInfo::RecreateMaster
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::RecreateMaster"),OLESTR(""));
try {
//
// Mark the master as one that needs to be recreated
//
m_Recreate = TRUE;
//
// Also, make sure we don't add data to this master
//
m_Master.recallOnly = TRUE;
} WsbCatch(hr);
WsbTraceOut(OLESTR("CMediaInfo::RecreateMaster"), OLESTR("hr = <%ls>"),
WsbHrAsString(hr));
return(hr);
}
//
// Internal (non COM) Helper functions
//
HRESULT
CMediaInfo::UpdateLastKnownGoodMaster( void )
/*++
Implements:
IMediaInfo::UpdateLastKnownGoodMaster
--*/
{
HRESULT hr = S_OK;
WsbTraceIn(OLESTR("CMediaInfo::UpdateLastKnownGoodMaster"),OLESTR(""));
m_LastKnownGoodMaster.id = m_Master.id;
m_LastKnownGoodMaster.ntmsId = m_Master.ntmsId;
m_LastKnownGoodMaster.storagePoolId = m_Master.storagePoolId;
m_LastKnownGoodMaster.freeBytes = m_Master.freeBytes;
m_LastKnownGoodMaster.capacity = m_Master.capacity;
m_LastKnownGoodMaster.lastError = m_Master.lastError;
m_LastKnownGoodMaster.type = m_Master.type;
// These strings are not being used for anything and we need to save space in the media record - see Windows Bugs 407340
m_LastKnownGoodMaster.description = OLESTR("");
m_LastKnownGoodMaster.name = OLESTR("");
/*** m_LastKnownGoodMaster.description = m_Master.description;
m_LastKnownGoodMaster.name = m_Master.name; ***/
m_LastKnownGoodMaster.recallOnly = m_Master.recallOnly;
m_LastKnownGoodMaster.lastUpdate = m_Master.lastUpdate;
m_LastKnownGoodMaster.nextRemoteDataSet = m_Master.nextRemoteDataSet;
WsbTraceOut(OLESTR("CMediaInfo::UpdateLastKnownGoodMaster"), OLESTR("hr = <%ls>"),
WsbHrAsString(hr));
return(hr);
}
HRESULT
CMediaInfo::WriteToDatabase( void )
/*++
Routine Description:
This function writes the information to the metadata
database. Note all other set functions require the
caller to call the Write() funtion for the entity.
Arguments:
None
Return Value:
S_OK: If the LastKnownGoodMaster is to be updated
--*/
{
HRESULT hr = S_OK;
BOOLEAN openedDb = FALSE;
CComPtr<IWsbDb> pSegmentDb;
CComPtr<IMediaInfo> pMediaInfo;
CComPtr<IHsmServer> pServer;
CComPtr<IWsbDbSession> pDbSession;
WsbTraceIn(OLESTR("CMediaInfo::WriteToDatabase"),OLESTR(""));
try {
//
// Find the database containing the record that matches this
// collectable.
//
WsbAffirmHr(CoCreateInstance( CLSID_HsmServer, 0, CLSCTX_SERVER, IID_IHsmServer, (void **)&pServer ));
WsbAffirmHr(pServer->GetSegmentDb(&pSegmentDb));
//
// Find the database entity
//
WsbAffirmHr(pSegmentDb->Open(&pDbSession));
openedDb = TRUE;
WsbTrace(OLESTR("CMediaInfo::WriteToDatabase - Opened the database\n"));
WsbAffirmHr(pSegmentDb->GetEntity(pDbSession, HSM_MEDIA_INFO_REC_TYPE, IID_IMediaInfo,
(void**)&pMediaInfo));
WsbAffirmHr(pMediaInfo->SetId(m_Master.id));
WsbAffirmHr(pMediaInfo->FindEQ());
//
// Write the changes to the database. To be sure that the "outside" world
// doesn't change anything but the allowed fields, just set the fields that are
// allowed to be changed.
//
WsbAffirmHr(pMediaInfo->SetRecreate(m_Recreate));
WsbAffirmHr(SetRecallOnlyStatus(m_Master.recallOnly));
for (int i = 1; i <= HSM_MAX_NUMBER_MEDIA_COPIES; i++) {
WsbAffirmHr(pMediaInfo->SetCopyInfo( (SHORT)i,
m_Copy[i-1].id,
(OLECHAR *)m_Copy[i-1].description,
(OLECHAR *)m_Copy[i-1].name,
m_Copy[i-1].lastUpdate,
m_Copy[i-1].lastError,
m_Copy[i-1].nextRemoteDataSet));
}
WsbAffirmHr(pMediaInfo->Write());
} WsbCatch(hr);
if (openedDb) {
WsbTrace(OLESTR("CMediaInfo::WriteToDatabase - Closing the database\n"));
pSegmentDb->Close(pDbSession);
pDbSession = 0;
openedDb = FALSE;
}
WsbTraceOut(OLESTR("CMediaInfo::WriteToDatabase"), OLESTR("hr = <%ls>"),
WsbHrAsString(hr));
return(hr);
}