///////////////////////////////////////////////////////////////////////////////
//
//	Copyright (c) 2000	Microsoft Corporation
//



///////////////////////////////////////////////////////////////////////////////
//	Imports
//


import "oaidl.idl";
import "ocidl.idl";
import "vss.idl";



///////////////////////////////////////////////////////////////////////////////
//	 Interfaces
//


[
	object,
	uuid(93BA4344-AA56-403e-87F2-819650FEDACD),
	helpstring("IVssCoordinator interface"),
	pointer_default(unique)
]
interface IVssCoordinator : IUnknown
{
	[helpstring("method SetContext")] 			
	HRESULT SetContext(							
		[in]	LONG 	lContext
		);												

	[helpstring("method StartSnapshotSet")] 			
	HRESULT StartSnapshotSet(							
		[out]	VSS_ID* 	pSnapshotSetId				
		);												

	[helpstring("method AddToSnapshotSet")] 			
	HRESULT AddToSnapshotSet(							
		[in]	VSS_PWSZ	pwszVolumeName, 			
		[in]	VSS_ID		ProviderId,
		[out]	VSS_ID		*pSnapshotId
		);												

	[helpstring("method DoSnapshotSet")]				
	HRESULT DoSnapshotSet(
		[in]	IDispatch *pWriterCallback,
		[out]   IVssAsync** ppAsync 					
		);												

	[helpstring("method GetSnapshotProperties")]					
	HRESULT GetSnapshotProperties(								
    	[in]	VSS_ID			SnapshotId,
    	[out]	VSS_SNAPSHOT_PROP	*pProp
    	);

    [helpstring("method ExposeSnapshot")]
	HRESULT ExposeSnapshot(
        [in] VSS_ID SnapshotId,
        [in] VSS_PWSZ wszPathFromRoot,
        [in] LONG lAttributes,
        [in] VSS_PWSZ wszExpose,
        [out] VSS_PWSZ *pwszExposed
        );

    [helpstring("method RemountReadWrite")]
	HRESULT RemountReadWrite(
		[in] VSS_ID SnapshotId,
		[out] IVssAsync** ppAsync
		);

    [helpstring("method ImportSnapshots")]
    HRESULT ImportSnapshots(
		[in] BSTR bstrXMLSnapshotSet,
		[out] IVssAsync** ppAsync
		);

	[helpstring("method Query")]						
	HRESULT Query(										
		[in]	VSS_ID			QueriedObjectId,		
		[in]	VSS_OBJECT_TYPE eQueriedObjectType, 	
		[in]	VSS_OBJECT_TYPE eReturnedObjectsType,	
		[out]	IVssEnumObject **ppEnum 				
		);												

	[helpstring("method DeleteSnapshots")]				
	HRESULT DeleteSnapshots(							
		[in]	VSS_ID			SourceObjectId, 		
		[in]	VSS_OBJECT_TYPE eSourceObjectType,		
		[in]	BOOL			bForceDelete,			
		[out]	LONG*			plDeletedSnapshots,		
		[out]	VSS_ID*			pNondeletedSnapshotID	
		);

    [helpstring("method BreakSnapshotSet")]
	HRESULT BreakSnapshotSet(
		[in]	VSS_ID		    SnapshotSetId
		);

	[helpstring("method IsVolumeSupported")]				
    HRESULT IsVolumeSupported(
		[in]	VSS_ID		    ProviderId, 				
        [in]    VSS_PWSZ        pwszVolumeName,
        [out]   BOOL *          pbSupportedByThisProvider
        );

	[helpstring("method IsVolumeSnapshotted")]				
    HRESULT IsVolumeSnapshotted(
		[in]	VSS_ID		    ProviderId, 				
        [in]    VSS_PWSZ        pwszVolumeName,
        [out]   BOOL *          pbSnapshotsPresent,
    	[out]	LONG *		    plSnapshotCompatibility
        );

	[helpstring("method SetWriterInstances")]				
    HRESULT SetWriterInstances(
		[in]	LONG		    lWriterInstanceIdCount, 				
        [in, unique, size_is(lWriterInstanceIdCount)]
                VSS_ID          *rgWriterInstanceId
        );
};


[
	object,
	uuid(D6222095-05C3-42f3-81D9-A4A0CEC05C26),
	helpstring("IVssShim interface"),
	pointer_default(unique)
]
interface IVssShim : IUnknown
{
	[helpstring("method SimulateSnapshotFreeze")] 			
	HRESULT SimulateSnapshotFreeze(
	    [in]    VSS_ID          guidSnapshotSetId,
		[in]    ULONG           ulOptionFlags,	
		[in]    ULONG           ulVolumeCount,	
		[in, unique, size_is(ulVolumeCount, ) ]
		        VSS_PWSZ*       ppwszVolumeNamesArray,
		[out]   IVssAsync**     ppAsync 					
		);												

	[helpstring("method SimulateSnapshotThaw")] 			
	HRESULT SimulateSnapshotThaw(
	    [in]    VSS_ID            guidSnapshotSetId
	    );

	[helpstring("method WaitForSubscribingCompletion")]				
	HRESULT WaitForSubscribingCompletion();												
};


[
	object,
	uuid(77ED5996-2F63-11d3-8A39-00C04F72D8E3),
	helpstring("IVssAdmin interface"),
	pointer_default(unique)
]
interface IVssAdmin : IUnknown
{
	[helpstring("method RegisterProvider")] 			
	HRESULT RegisterProvider(							
		[in]	VSS_ID		pProviderId, 				
		[in]	CLSID		ClassId,					
		[in]	VSS_PWSZ	pwszProviderName,			
		[in]	VSS_PROVIDER_TYPE eProviderType,
		[in]	VSS_PWSZ	pwszProviderVersion,		
		[in]	VSS_ID		ProviderVersionId
		);												

	[helpstring("method UnregisterProvider")]			
	HRESULT UnregisterProvider( 						
		[in]	VSS_ID	ProviderId						
		);												

	[helpstring("method QueryProviders")]				
	HRESULT QueryProviders( 							
		[out]	IVssEnumObject**ppEnum					
		);												

	[helpstring("method AbortAllSnapshotsInProgress")]	
	HRESULT AbortAllSnapshotsInProgress(				
		);												
};


////////////////////////////////////////////////////////
//	VSS Type Library

[
	uuid(97AEFDD8-2F60-11d3-8A39-00C04F72D8E3),
	version(1.0),
	helpstring("Volume Shadow Copy Service 1.0 Type Library")
]
library VSS
{
	importlib("stdole2.tlb");

	[
		uuid(E579AB5F-1CC4-44b4-BED9-DE0991FF0623),
		helpstring("VSSCoordinator Class")
	]
	coclass VSSCoordinator
	{
		[default] interface IVssCoordinator;
		interface IVssAdmin;
	}
}
