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.
 
 
 
 
 
 

213 lines
6.0 KiB

/*++
Copyright (c) 1999 Microsoft Corporation
Abstract:
@doc
@module Copy.cxx | Implementation of VSS_OBJECT_PROP_Copy and VSS_OBJECT_PROP_Ptr classes
@end
Author:
Adi Oltean [aoltean] 09/01/1999
Remarks:
It cannot be put into a library because of ATL code.
Revision History:
Name Date Comments
aoltean 09/01/1999 Created
aoltean 09/09/1999 dss -> vss
aoltean 09/13/1999 Moved to inc. Renamed to copy.inl
aoltean 09/20/1999 Adding methods for creating the snapshot, snapshot set,
provider and volume property structures.
Also VSS_OBJECT_PROP_Manager renamed to VSS_OBJECT_PROP_Manager.
aoltean 09/21/1999 Renaming back VSS_OBJECT_PROP_Manager to VSS_OBJECT_PROP_Copy.
Moving the CreateXXX into VSS_OBJECT_PROP_Ptr::InstantiateAsXXX
aoltean 09/22/1999 Fixing VSSDBG_GEN.
aoltean 09/24/1999 Moving into modules/prop
aoltean 12/16/1999 Adding specialized copyXXX methods
--*/
/////////////////////////////////////////////////////////////////////////////
// Needed includes
#include "stdafx.hxx"
#include "vs_inc.hxx"
// Generated file from Coord.IDL
#include "vs_idl.hxx"
#include "copy.hxx"
////////////////////////////////////////////////////////////////////////
// Standard foo for file name aliasing. This code block must be after
// all includes of VSS header files.
//
#ifdef VSS_FILE_ALIAS
#undef VSS_FILE_ALIAS
#endif
#define VSS_FILE_ALIAS "PRPCOPYC"
//
////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// VSS_OBJECT_PROP_Copy class
HRESULT VSS_OBJECT_PROP_Copy::copySnapshot(
IN VSS_SNAPSHOT_PROP* pObj1,
IN VSS_SNAPSHOT_PROP* pObj2
)
{
CVssFunctionTracer ft( VSSDBG_GEN, L"VSS_OBJECT_PROP_Copy::copySnapshot" );
try
{
// Testing arguments
BS_ASSERT(pObj1 != NULL);
BS_ASSERT(pObj2 != NULL);
// Copy the members
pObj1->m_SnapshotId = pObj2->m_SnapshotId;
pObj1->m_SnapshotSetId = pObj2->m_SnapshotSetId;
pObj1->m_lSnapshotsCount = pObj2->m_lSnapshotsCount;
::VssSafeDuplicateStr( ft, pObj1->m_pwszSnapshotDeviceObject, pObj2->m_pwszSnapshotDeviceObject );
::VssSafeDuplicateStr( ft, pObj1->m_pwszOriginalVolumeName, pObj2->m_pwszOriginalVolumeName );
::VssSafeDuplicateStr( ft, pObj1->m_pwszOriginatingMachine, pObj2->m_pwszOriginatingMachine );
::VssSafeDuplicateStr( ft, pObj1->m_pwszServiceMachine, pObj2->m_pwszServiceMachine );
::VssSafeDuplicateStr( ft, pObj1->m_pwszExposedName, pObj2->m_pwszExposedName );
::VssSafeDuplicateStr( ft, pObj1->m_pwszExposedPath, pObj2->m_pwszExposedPath );
pObj1->m_ProviderId = pObj2->m_ProviderId;
pObj1->m_lSnapshotAttributes = pObj2->m_lSnapshotAttributes;
pObj1->m_tsCreationTimestamp = pObj2->m_tsCreationTimestamp;
pObj1->m_eStatus = pObj2->m_eStatus;
}
VSS_STANDARD_CATCH(ft)
return ft.hr;
}
HRESULT VSS_OBJECT_PROP_Copy::copyProvider(
IN VSS_PROVIDER_PROP* pObj1,
IN VSS_PROVIDER_PROP* pObj2
)
{
CVssFunctionTracer ft( VSSDBG_GEN, L"VSS_OBJECT_PROP_Copy::copyProvider" );
try
{
// Testing arguments
BS_ASSERT(pObj1 != NULL);
BS_ASSERT(pObj2 != NULL);
// Copy the members
pObj1->m_ProviderId = pObj2->m_ProviderId;
::VssSafeDuplicateStr( ft, pObj1->m_pwszProviderName, pObj2->m_pwszProviderName );
pObj1->m_eProviderType = pObj2->m_eProviderType;
::VssSafeDuplicateStr( ft, pObj1->m_pwszProviderVersion, pObj2->m_pwszProviderVersion );
pObj1->m_ProviderVersionId = pObj2->m_ProviderVersionId;
pObj1->m_ClassId = pObj2->m_ClassId;
}
VSS_STANDARD_CATCH(ft)
return ft.hr;
}
HRESULT VSS_OBJECT_PROP_Copy::copy(
IN VSS_OBJECT_PROP* pObj1,
IN VSS_OBJECT_PROP* pObj2
)
{
HRESULT hr;
// Testing arguments
if ((pObj1 == NULL) || (pObj2 == NULL))
return E_INVALIDARG;
// Zeroing the contents of the destination structure
::VssZeroOut(pObj1);
// Copy the type
pObj1->Type = pObj2->Type;
// Effective copy
switch(pObj2->Type)
{
case VSS_OBJECT_SNAPSHOT:
hr = copySnapshot( &(pObj1->Obj.Snap), &(pObj2->Obj.Snap) );
break;
case VSS_OBJECT_PROVIDER:
hr = copyProvider( &(pObj1->Obj.Prov), &(pObj2->Obj.Prov) );
break;
default:
BS_ASSERT(false);
hr = E_UNEXPECTED;
break;
}
return hr;
}
void VSS_OBJECT_PROP_Copy::init(
IN VSS_OBJECT_PROP* pObjectProp
)
{
CVssFunctionTracer ft( VSSDBG_GEN, L"VSS_OBJECT_PROP_Copy::init" );
try
{
// Zeroing the contents of the structure
::VssZeroOut(pObjectProp);
}
VSS_STANDARD_CATCH(ft)
}
void VSS_OBJECT_PROP_Copy::destroy(
IN VSS_OBJECT_PROP* pObjectProp
)
{
CVssFunctionTracer ft( VSSDBG_GEN, L"VSS_OBJECT_PROP_Copy::destroy" );
try
{
if (pObjectProp)
{
switch(pObjectProp->Type)
{
case VSS_OBJECT_SNAPSHOT:
::VssFreeString(pObjectProp->Obj.Snap.m_pwszOriginalVolumeName);
::VssFreeString(pObjectProp->Obj.Snap.m_pwszSnapshotDeviceObject);
::VssFreeString(pObjectProp->Obj.Snap.m_pwszOriginatingMachine);
::VssFreeString(pObjectProp->Obj.Snap.m_pwszServiceMachine);
::VssFreeString(pObjectProp->Obj.Snap.m_pwszExposedName);
::VssFreeString(pObjectProp->Obj.Snap.m_pwszExposedPath);
break;
case VSS_OBJECT_PROVIDER:
::VssFreeString(pObjectProp->Obj.Prov.m_pwszProviderName);
::VssFreeString(pObjectProp->Obj.Prov.m_pwszProviderVersion);
break;
default:
break;
}
pObjectProp->Type = VSS_OBJECT_UNKNOWN;
}
}
VSS_STANDARD_CATCH(ft)
}