/*++ © 1998 Seagate Software, Inc. All rights reserved. Module Name: hsmactn.cpp Abstract: This component represents the actions that can be performed by a policy. Author: Chuck Bardeen [cbardeen] 29-Oct-1996 Revision History: --*/ #include "stdafx.h" #include "stdio.h" #include "wsb.h" #include "job.h" #include "hsmactn.h" #define WSB_TRACE_IS WSB_TRACE_BIT_JOB HRESULT CHsmAction::GetName( OUT OLECHAR** pName, IN ULONG bufferSize ) /*++ Implements: IHsmAction::GetName(). --*/ { HRESULT hr = S_OK; CWsbStringPtr tmpString; try { WsbAssert(0 != pName, E_POINTER); WsbAffirmHr(tmpString.LoadFromRsc(_Module.m_hInst, m_nameId)); WsbAffirmHr(tmpString.CopyTo(pName, bufferSize)); } WsbCatch(hr); return(hr); } HRESULT CHsmAction::GetSizeMax( OUT ULARGE_INTEGER* pSize ) /*++ Implements: IPersistStream::GetSizeMax(). --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CHsmAction::GetSizeMax"), OLESTR("")); try { WsbAssert(0 != pSize, E_POINTER); pSize->QuadPart = WsbPersistSizeOf(ULONG); } WsbCatch(hr); WsbTraceOut(OLESTR("CHsmAction::GetSizeMax"), OLESTR("hr = <%ls>, Size = <%ls>"), WsbHrAsString(hr), WsbPtrToUliAsString(pSize)); return(hr); } HRESULT CHsmAction::Load( IN IStream* pStream ) /*++ Implements: IPersistStream::Load(). --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CHsmAction::Load"), OLESTR("")); try { WsbAssert(0 != pStream, E_POINTER); WsbAffirmHr(WsbLoadFromStream(pStream, &m_nameId)); } WsbCatch(hr); WsbTraceOut(OLESTR("CHsmAction::Load"), OLESTR("hr = <%ls>, nameId = <%lu>"), WsbHrAsString(hr), m_nameId); return(hr); } HRESULT CHsmAction::Save( IN IStream* pStream, IN BOOL clearDirty ) /*++ Implements: IPersistStream::Save(). --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CHsmAction::Save"), OLESTR("clearDirty = <%ls>"), WsbBoolAsString(clearDirty)); try { WsbAssert(0 != pStream, E_POINTER); WsbAffirmHr(WsbSaveToStream(pStream, m_nameId)); // 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("CHsmAction::Save"), OLESTR("hr = <%ls>"), WsbHrAsString(hr)); return(hr); } HRESULT CHsmAction::Test( USHORT* passed, USHORT* failed ) /*++ Implements: IWsbTestable::Test(). --*/ { HRESULT hr = S_OK; try { WsbAssert(0 != passed, E_POINTER); WsbAssert(0 != failed, E_POINTER); *passed = 0; *failed = 0; } WsbCatch(hr); return(hr); } HRESULT CHsmDirectedAction::FinalConstruct( void ) /*++ Implements: CComObjectRoot::FinalConstruct(). --*/ { HRESULT hr = S_OK; try { WsbAffirmHr(CWsbObject::FinalConstruct()); m_storagePoolId = GUID_NULL; } WsbCatch(hr); return(hr); } HRESULT CHsmDirectedAction::GetStoragePoolId( OUT GUID* pId ) /*++ Implements: IHsmDirectedAction::GetStoragePoolId(). --*/ { HRESULT hr = S_OK; try { WsbAssert(0 != pId, E_POINTER); *pId = m_storagePoolId; } WsbCatch(hr); return(hr); } HRESULT CHsmDirectedAction::GetSizeMax( OUT ULARGE_INTEGER* pSize ) /*++ Implements: IPersistStream::GetSizeMax(). --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CHsmDirectedAction::GetSizeMax"), OLESTR("")); try { WsbAssert(0 != pSize, E_POINTER); pSize->QuadPart = WsbPersistSizeOf(ULONG) + WsbPersistSizeOf(GUID); } WsbCatch(hr); WsbTraceOut(OLESTR("CHsmDirectedAction::GetSizeMax"), OLESTR("hr = <%ls>, Size = <%ls>"), WsbHrAsString(hr), WsbPtrToUliAsString(pSize)); return(hr); } HRESULT CHsmDirectedAction::Load( IN IStream* pStream ) /*++ Implements: IPersistStream::Load(). --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CHsmDirectedAction::Load"), OLESTR("")); try { WsbAssert(0 != pStream, E_POINTER); WsbAffirmHr(WsbLoadFromStream(pStream, &m_nameId)); WsbAffirmHr(WsbLoadFromStream(pStream, &m_storagePoolId)); } WsbCatch(hr); WsbTraceOut(OLESTR("CHsmDirectedAction::Load"), OLESTR("hr = <%ls>, nameId = <%lu>, storagePoolId = <%ls>"), WsbHrAsString(hr), m_nameId, WsbGuidAsString(m_storagePoolId)); return(hr); } HRESULT CHsmDirectedAction::Save( IN IStream* pStream, IN BOOL clearDirty ) /*++ Implements: IPersistStream::Save(). --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CHsmDirectedAction::Save"), OLESTR("clearDirty = <%ls>"), WsbBoolAsString(clearDirty)); try { WsbAssert(0 != pStream, E_POINTER); WsbAffirmHr(WsbSaveToStream(pStream, m_nameId)); WsbAffirmHr(WsbSaveToStream(pStream, m_storagePoolId)); // 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("CHsmDirectedAction::Save"), OLESTR("hr = <%ls>"), WsbHrAsString(hr)); return(hr); } HRESULT CHsmDirectedAction::SetStoragePoolId( IN GUID id ) /*++ Implements: IHsmDirectedAction::SetStoragePoolId(). --*/ { HRESULT hr = S_OK; try { m_storagePoolId = id; m_isDirty = TRUE; } WsbCatch(hr); return(S_OK); } HRESULT CHsmRelocateAction::ExpandPlaceholders( void ) /*++ Implements: IHsmRelocateAction::ExpandPlaceholders(). --*/ { return(m_expandPlaceholders ? S_OK : S_FALSE); } HRESULT CHsmRelocateAction::FinalConstruct( void ) /*++ Implements: CComObjectRoot::FinalConstruct(). --*/ { HRESULT hr = S_OK; try { WsbAffirmHr(CWsbObject::FinalConstruct()); m_retainHierarchy = FALSE;; m_expandPlaceholders = FALSE;; } WsbCatch(hr); return(hr); } HRESULT CHsmRelocateAction::GetDestination( OUT OLECHAR** pDest, IN ULONG bufferSize ) /*++ Implements: IHsmRelocateAction::GetDestination(). --*/ { HRESULT hr = S_OK; try { WsbAssert(0 != pDest, E_POINTER); WsbAffirmHr(m_dest.CopyTo(pDest, bufferSize)); } WsbCatch(hr); return(hr); } HRESULT CHsmRelocateAction::GetSizeMax( OUT ULARGE_INTEGER* pSize ) /*++ Implements: IPersistStream::GetSizeMax(). --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CHsmRelocateAction::GetSizeMax"), OLESTR("")); try { WsbAssert(0 != pSize, E_POINTER); pSize->QuadPart = WsbPersistSizeOf(ULONG) + WsbPersistSizeOf(BOOL) + WsbPersistSizeOf(BOOL) + WsbPersistSize((wcslen(m_dest) + 1) * sizeof(OLECHAR)); } WsbCatch(hr); WsbTraceOut(OLESTR("CHsmRelocateAction::GetSizeMax"), OLESTR("hr = <%ls>, Size = <%ls>"), WsbHrAsString(hr), WsbPtrToUliAsString(pSize)); return(hr); } HRESULT CHsmRelocateAction::Load( IN IStream* pStream ) /*++ Implements: IPersistStream::Load(). --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CHsmRelocateAction::Load"), OLESTR("")); try { WsbAssert(0 != pStream, E_POINTER); WsbAffirmHr(WsbLoadFromStream(pStream, &m_nameId)); WsbAffirmHr(WsbLoadFromStream(pStream, &m_expandPlaceholders)); WsbAffirmHr(WsbLoadFromStream(pStream, &m_retainHierarchy)); WsbAffirmHr(WsbLoadFromStream(pStream, &m_dest, 0)); } WsbCatch(hr); WsbTraceOut(OLESTR("CHsmRelocateAction::Load"), OLESTR("hr = <%ls>, expandPlaceholders = <%ls>, retainHierarchy = <%ls>, destination = <%ls>"), WsbHrAsString(hr), m_nameId, WsbBoolAsString(m_expandPlaceholders), WsbBoolAsString(m_retainHierarchy), m_dest); return(hr); } HRESULT CHsmRelocateAction::RetainHierarchy( void ) /*++ Implements: IHsmRelocateAction::RetainHierarchy(). --*/ { return(m_retainHierarchy ? S_OK : S_FALSE); } HRESULT CHsmRelocateAction::Save( IN IStream* pStream, IN BOOL clearDirty ) /*++ Implements: IPersistStream::Save(). --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CHsmRelocateAction::Save"), OLESTR("clearDirty = <%ls>"), WsbBoolAsString(clearDirty)); try { WsbAssert(0 != pStream, E_POINTER); WsbAffirmHr(WsbSaveToStream(pStream, m_nameId)); WsbAffirmHr(WsbSaveToStream(pStream, m_expandPlaceholders)); WsbAffirmHr(WsbSaveToStream(pStream, m_retainHierarchy)); WsbAffirmHr(WsbSaveToStream(pStream, m_dest)); // 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("CHsmRelocateAction::Save"), OLESTR("hr = <%ls>"), WsbHrAsString(hr)); return(hr); } HRESULT CHsmRelocateAction::SetDestination( IN OLECHAR* dest ) /*++ Implements: IHsmRelocateAction::SetDestination(). --*/ { HRESULT hr = S_OK; try { m_dest = dest; m_isDirty = TRUE; } WsbCatch(hr); return(hr); } HRESULT CHsmRelocateAction::SetExpandPlaceholders( IN BOOL expandPlaceholders ) /*++ Implements: IHsmRelocateAction::SetExpandPlaceholders(). --*/ { HRESULT hr = S_OK; try { m_expandPlaceholders = expandPlaceholders; m_isDirty = TRUE; } WsbCatch(hr); return(hr); } HRESULT CHsmRelocateAction::SetRetainHierarchy( IN BOOL retainHierarchy ) /*++ Implements: IHsmRelocateAction::SetRetainHierarchy(). --*/ { HRESULT hr = S_OK; try { m_retainHierarchy = retainHierarchy; m_isDirty = TRUE; } WsbCatch(hr); return(hr); } HRESULT CHsmActionDelete::Do( IFsaScanItem* pScanItem ) /*++ Implements: IHsmAction::Do(). --*/ { HRESULT hr = S_OK; try { WsbAssert(0 != pScanItem, E_POINTER); WsbAffirmHr(pScanItem->Delete()); } WsbCatch(hr); return(hr); } HRESULT CHsmActionDelete::FinalConstruct( void ) /*++ Implements: CComObjectRoot::FinalConstruct(). --*/ { HRESULT hr = S_OK; try { WsbAffirmHr(CWsbObject::FinalConstruct()); m_nameId = IDS_HSMACTIONDELETE_ID; } WsbCatch(hr); return(hr); } HRESULT CHsmActionDelete::GetClassID( OUT CLSID* pClsid ) /*++ Implements: IPersist::GetClassID(). --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CHsmActionDelete::GetClassID"), OLESTR("")); try { WsbAssert(0 != pClsid, E_POINTER); *pClsid = CLSID_CHsmActionDelete; } WsbCatch(hr); WsbTraceOut(OLESTR("CHsmActionDelete::GetClassID"), OLESTR("hr = <%ls>, CLSID = <%ls>"), WsbHrAsString(hr), WsbGuidAsString(*pClsid)); return(hr); } HRESULT CHsmActionRecall::Do( IFsaScanItem* pScanItem ) /*++ Implements: IHsmAction::Do(). --*/ { HRESULT hr = S_OK; LONGLONG offset = 0; LONGLONG size = 0; FSA_PLACEHOLDER placeholder; try { WsbAssert(0 != pScanItem, E_POINTER); // Iterate overall the reparsed areas. for (hr = pScanItem->FindFirstPlaceholder(&offset, &size, &placeholder); SUCCEEDED(hr); hr = pScanItem->FindNextPlaceholder(&offset, &size, &placeholder)) { WsbAffirmHr(pScanItem->Recall(offset, size, FALSE)); } if (WSB_E_NOTFOUND == hr) { hr = S_OK; } } WsbCatch(hr); return(hr); } HRESULT CHsmActionRecall::FinalConstruct( void ) /*++ Implements: CComObjectRoot::FinalConstruct(). --*/ { HRESULT hr = S_OK; try { WsbAffirmHr(CWsbObject::FinalConstruct()); m_nameId = IDS_HSMACTIONRECALL_ID; } WsbCatch(hr); return(hr); } HRESULT CHsmActionRecall::GetClassID( OUT CLSID* pClsid ) /*++ Implements: IPersist::GetClassID(). --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CHsmActionRecall::GetClassID"), OLESTR("")); try { WsbAssert(0 != pClsid, E_POINTER); *pClsid = CLSID_CHsmActionRecall; } WsbCatch(hr); WsbTraceOut(OLESTR("CHsmActionRecall::GetClassID"), OLESTR("hr = <%ls>, CLSID = <%ls>"), WsbHrAsString(hr), WsbGuidAsString(*pClsid)); return(hr); } HRESULT CHsmActionRecycle::Do( IFsaScanItem* pScanItem ) /*++ Implements: IHsmAction::Do(). --*/ { HRESULT hr = S_OK; try { WsbAssert(0 != pScanItem, E_POINTER); WsbAffirmHr(pScanItem->Recycle()); } WsbCatch(hr); return(hr); } HRESULT CHsmActionRecycle::FinalConstruct( void ) /*++ Implements: CComObjectRoot::FinalConstruct(). --*/ { HRESULT hr = S_OK; try { WsbAffirmHr(CWsbObject::FinalConstruct()); m_nameId = IDS_HSMACTIONRECYCLE_ID; } WsbCatch(hr); return(hr); } HRESULT CHsmActionRecycle::GetClassID( OUT CLSID* pClsid ) /*++ Implements: IPersist::GetClassID(). --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CHsmActionRecycle::GetClassID"), OLESTR("")); try { WsbAssert(0 != pClsid, E_POINTER); *pClsid = CLSID_CHsmActionRecycle; } WsbCatch(hr); WsbTraceOut(OLESTR("CHsmActionRecycle::GetClassID"), OLESTR("hr = <%ls>, CLSID = <%ls>"), WsbHrAsString(hr), WsbGuidAsString(*pClsid)); return(hr); } HRESULT CHsmActionTruncate::Do( IFsaScanItem* pScanItem ) /*++ Implements: IHsmAction::Do(). --*/ { HRESULT hr = S_OK; LONGLONG size; try { WsbAssert(0 != pScanItem, E_POINTER); WsbAffirmHr(pScanItem->GetLogicalSize(&size)); WsbAffirmHr(pScanItem->Truncate(0, size)); } WsbCatch(hr); return(hr); } HRESULT CHsmActionTruncate::FinalConstruct( void ) /*++ Implements: CComObjectRoot::FinalConstruct(). --*/ { HRESULT hr = S_OK; try { WsbAffirmHr(CWsbObject::FinalConstruct()); m_nameId = IDS_HSMACTIONTRUNCATE_ID; } WsbCatch(hr); return(hr); } HRESULT CHsmActionTruncate::GetClassID( OUT CLSID* pClsid ) /*++ Implements: IPersist::GetClassID(). --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CHsmActionTruncate::GetClassID"), OLESTR("")); try { WsbAssert(0 != pClsid, E_POINTER); *pClsid = CLSID_CHsmActionTruncate; } WsbCatch(hr); WsbTraceOut(OLESTR("CHsmActionTruncate::GetClassID"), OLESTR("hr = <%ls>, CLSID = <%ls>"), WsbHrAsString(hr), WsbGuidAsString(*pClsid)); return(hr); } HRESULT CHsmActionUnmanage::Do( IFsaScanItem* pScanItem ) /*++ Implements: IHsmAction::Do(). --*/ { HRESULT hr = S_OK; LONGLONG offset; LONGLONG size; FSA_PLACEHOLDER placeholder; try { WsbAssert(0 != pScanItem, E_POINTER); // Iterate overall the reparsed areas. for (hr = pScanItem->FindFirstPlaceholder(&offset, &size, &placeholder); SUCCEEDED(hr); hr = pScanItem->FindNextPlaceholder(&offset, &size, &placeholder)) { WsbAffirmHr(pScanItem->Unmanage(offset, size)); } if (WSB_E_NOTFOUND == hr) { hr = S_OK; } } WsbCatch(hr); return(hr); } HRESULT CHsmActionUnmanage::FinalConstruct( void ) /*++ Implements: CComObjectRoot::FinalConstruct(). --*/ { HRESULT hr = S_OK; try { WsbAffirmHr(CWsbObject::FinalConstruct()); m_nameId = IDS_HSMACTIONUNMANAGE_ID; } WsbCatch(hr); return(hr); } HRESULT CHsmActionUnmanage::GetClassID( OUT CLSID* pClsid ) /*++ Implements: IPersist::GetClassID(). --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CHsmActionUnmanage::GetClassID"), OLESTR("")); try { WsbAssert(0 != pClsid, E_POINTER); *pClsid = CLSID_CHsmActionUnmanage; } WsbCatch(hr); WsbTraceOut(OLESTR("CHsmActionUnmanage::GetClassID"), OLESTR("hr = <%ls>, CLSID = <%ls>"), WsbHrAsString(hr), WsbGuidAsString(*pClsid)); return(hr); } HRESULT CHsmActionValidate::Do( IFsaScanItem* pScanItem ) /*++ Implements: IHsmAction::Do(). --*/ { HRESULT hr = S_OK; LONGLONG offset; LONGLONG size; FSA_PLACEHOLDER placeholder; try { WsbAssert(0 != pScanItem, E_POINTER); // Iterate overall the reparsed areas. for (hr = pScanItem->FindFirstPlaceholder(&offset, &size, &placeholder); SUCCEEDED(hr); hr = pScanItem->FindNextPlaceholder(&offset, &size, &placeholder)) { WsbAffirmHr(pScanItem->Validate(offset, size)); } if (WSB_E_NOTFOUND == hr) { hr = S_OK; } } WsbCatch(hr); return(hr); } HRESULT CHsmActionValidate::FinalConstruct( void ) /*++ Implements: CComObjectRoot::FinalConstruct(). --*/ { HRESULT hr = S_OK; try { WsbAffirmHr(CWsbObject::FinalConstruct()); m_nameId = IDS_HSMACTIONVALIDATE_ID; } WsbCatch(hr); return(hr); } HRESULT CHsmActionValidate::GetClassID( OUT CLSID* pClsid ) /*++ Implements: IPersist::GetClassID(). --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CHsmActionValidate::GetClassID"), OLESTR("")); try { WsbAssert(0 != pClsid, E_POINTER); *pClsid = CLSID_CHsmActionValidate; } WsbCatch(hr); WsbTraceOut(OLESTR("CHsmActionValidate::GetClassID"), OLESTR("hr = <%ls>, CLSID = <%ls>"), WsbHrAsString(hr), WsbGuidAsString(*pClsid)); return(hr); } HRESULT CHsmActionManage::Do( IFsaScanItem* pScanItem ) /*++ Implements: IHsmAction::Do(). --*/ { HRESULT hr = S_OK; LONGLONG size; WsbTraceIn(OLESTR("CHsmActionManage::Do"), OLESTR("")); try { WsbAssert(0 != pScanItem, E_POINTER); WsbAffirmHr(pScanItem->GetLogicalSize(&size)); WsbAffirmHr(pScanItem->Manage(0, size, m_storagePoolId, FALSE)); } WsbCatch(hr); WsbTraceOut(OLESTR("CHsmActionManage::Do"), OLESTR("hr = <%ls>"), WsbHrAsString(hr)); return(hr); } HRESULT CHsmActionManage::FinalConstruct( void ) /*++ Implements: CComObjectRoot::FinalConstruct(). --*/ { HRESULT hr = S_OK; try { WsbAffirmHr(CHsmDirectedAction::FinalConstruct()); m_nameId = IDS_HSMACTIONMANAGE_ID; } WsbCatch(hr); return(hr); } HRESULT CHsmActionManage::GetClassID( OUT CLSID* pClsid ) /*++ Implements: IPersist::GetClassID(). --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CHsmActionManage::GetClassID"), OLESTR("")); try { WsbAssert(0 != pClsid, E_POINTER); *pClsid = CLSID_CHsmActionManage; } WsbCatch(hr); WsbTraceOut(OLESTR("CHsmActionManage::GetClassID"), OLESTR("hr = <%ls>, CLSID = <%ls>"), WsbHrAsString(hr), WsbGuidAsString(*pClsid)); return(hr); } HRESULT CHsmActionMigrate::Do( IFsaScanItem* pScanItem ) /*++ Implements: IHsmAction::Do(). --*/ { HRESULT hr = S_OK; LONGLONG size; try { WsbAssert(0 != pScanItem, E_POINTER); WsbAffirmHr(pScanItem->GetLogicalSize(&size)); WsbAffirmHr(pScanItem->Manage(0, size, m_storagePoolId, TRUE)); } WsbCatch(hr); return(hr); } HRESULT CHsmActionMigrate::FinalConstruct( void ) /*++ Implements: CComObjectRoot::FinalConstruct(). --*/ { HRESULT hr = S_OK; try { WsbAffirmHr(CHsmDirectedAction::FinalConstruct()); m_nameId = IDS_HSMACTIONMIGRATE_ID; } WsbCatch(hr); return(hr); } HRESULT CHsmActionMigrate::GetClassID( OUT CLSID* pClsid ) /*++ Implements: IPersist::GetClassID(). --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CHsmActionMigrate::GetClassID"), OLESTR("")); try { WsbAssert(0 != pClsid, E_POINTER); *pClsid = CLSID_CHsmActionMigrate; } WsbCatch(hr); WsbTraceOut(OLESTR("CHsmActionMigrate::GetClassID"), OLESTR("hr = <%ls>, CLSID = <%ls>"), WsbHrAsString(hr), WsbGuidAsString(*pClsid)); return(hr); } HRESULT CHsmActionCopy::Do( IFsaScanItem* pScanItem ) /*++ Implements: IHsmAction::Do(). --*/ { HRESULT hr = S_OK; try { WsbAssert(0 != pScanItem, E_POINTER); WsbAffirmHr(pScanItem->Copy(m_dest, m_retainHierarchy, m_expandPlaceholders, TRUE)); } WsbCatch(hr); return(hr); } HRESULT CHsmActionCopy::FinalConstruct( void ) /*++ Implements: CComObjectRoot::FinalConstruct(). --*/ { HRESULT hr = S_OK; try { WsbAffirmHr(CHsmRelocateAction::FinalConstruct()); m_nameId = IDS_HSMACTIONCOPY_ID; } WsbCatch(hr); return(hr); } HRESULT CHsmActionCopy::GetClassID( OUT CLSID* pClsid ) /*++ Implements: IPersist::GetClassID(). --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CHsmActionCopy::GetClassID"), OLESTR("")); try { WsbAssert(0 != pClsid, E_POINTER); *pClsid = CLSID_CHsmActionCopy; } WsbCatch(hr); WsbTraceOut(OLESTR("CHsmActionCopy::GetClassID"), OLESTR("hr = <%ls>, CLSID = <%ls>"), WsbHrAsString(hr), WsbGuidAsString(*pClsid)); return(hr); } HRESULT CHsmActionMove::Do( IFsaScanItem* pScanItem ) /*++ Implements: IHsmAction::Do(). --*/ { HRESULT hr = S_OK; try { WsbAssert(0 != pScanItem, E_POINTER); WsbAffirmHr(pScanItem->Move(m_dest, m_retainHierarchy, m_expandPlaceholders, TRUE)); } WsbCatch(hr); return(hr); } HRESULT CHsmActionMove::FinalConstruct( void ) /*++ Implements: CComObjectRoot::FinalConstruct(). --*/ { HRESULT hr = S_OK; try { WsbAffirmHr(CHsmRelocateAction::FinalConstruct()); m_nameId = IDS_HSMACTIONMOVE_ID; } WsbCatch(hr); return(hr); } HRESULT CHsmActionMove::GetClassID( OUT CLSID* pClsid ) /*++ Implements: IPersist::GetClassID(). --*/ { HRESULT hr = S_OK; WsbTraceIn(OLESTR("CHsmActionMove::GetClassID"), OLESTR("")); try { WsbAssert(0 != pClsid, E_POINTER); *pClsid = CLSID_CHsmActionMove; } WsbCatch(hr); WsbTraceOut(OLESTR("CHsmActionMove::GetClassID"), OLESTR("hr = <%ls>, CLSID = <%ls>"), WsbHrAsString(hr), WsbGuidAsString(*pClsid)); return(hr); }