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


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

import "EventSys.idl";

import "vss.idl";


///////////////////////////////////////////////////////////////////////////////
// Forward declarations
//

interface IVssWriter;
interface IVssWriterCallback;



///////////////////////////////////////////////////////////////////////////////
//  Declarations
//




[
    object,
    uuid(9171F2F2-E6F8-445b-91C5-504BF41D1D07),
    helpstring("IVssWriter interface"),
	oleautomation,
    pointer_default(unique)
]
interface IVssWriter : IUnknown
{
    [helpstring("method RequestWriterInfo")]
    HRESULT RequestWriterInfo(
        [in]	BSTR bstrSnapshotSetId,
		[in]	BOOL bWriterMetadata,
		[in]	BOOL bWriterState,
		[in]	IDispatch* pWriterCallback		
        );

    [helpstring("method PrepareForBackup")]
    HRESULT PrepareForBackup(
        [in]	BSTR bstrSnapshotSetId,					
		[in]	IDispatch* pWriterCallback
        );

    [helpstring("method PrepareForSnapshot")]
    HRESULT PrepareForSnapshot(
        [in]	BSTR bstrSnapshotSetId,					
        [in]	BSTR VolumeNamesList					
        );

    [helpstring("method Freeze")]
    HRESULT Freeze(
        [in]    BSTR bstrSnapshotSetId,
        [in]    INT nApplicationLevel
        );

    [helpstring("method Thaw")]
    HRESULT Thaw(
        [in]    BSTR bstrSnapshotSetId
        );

    [helpstring("method PostSnapshot")]
    HRESULT PostSnapshot(
    	[in]	BSTR bstrSnapshotSetId,
	[in]	IDispatch *pWriterCallback
	);

    [helpstring("method BackupComplete")]
    HRESULT BackupComplete(
        [in]    BSTR bstrSnapshotSetId,
		[in]	IDispatch* pWriterCallback
        );

    [helpstring("method Abort")]
    HRESULT Abort(
        [in]    BSTR bstrSnapshotSetId
        );

    [helpstring("method PreRestore")]
    HRESULT PreRestore(
		[in]	IDispatch* pWriterCallback
		);

    [helpstring("method PostRestore")]
    HRESULT PostRestore(
		[in]	IDispatch* pWriterCallback

        );
};


[
	object,
	dual,
	uuid(ED4A8B9D-3377-4884-A493-74897CA57E68),
	helpstring("IVssWriterCallback interface"),
	pointer_default(unique)
]
interface IVssWriterCallback : IDispatch
{
	[helpstring("method ExposeWriterMetadata")] 				
	HRESULT ExposeWriterMetadata(							
		[in]	BSTR WriterInstanceId,
		[in]	BSTR WriterClassId,
		[in]	BSTR bstrWriterName,
		[in]	BSTR strWriterXmlMetadata
		);											

	[helpstring("method GetContent")] 				
	HRESULT GetContent(
		[in]    BSTR WriterInstanceId,
		[out]	BSTR* pbstrXMLDocContent
		);

	[helpstring("method SetContent")] 				
	HRESULT SetContent(
		[in]    BSTR WriterInstanceId,
		[in]	BSTR bstrXMLDocContent
		);

	[helpstring("method GetBackupState")] 				
	HRESULT GetBackupState(
		[out]   BOOL *pbBootableSystemStateBackedUp,
		[out]   BOOL *pbAreComponentsSelected,
		[out]   VSS_BACKUP_TYPE *pBackupType,
		[out]   BOOL *pbPartialFileSupport
		);											

	[helpstring("method ExposeCurrentState")] 				
	HRESULT ExposeCurrentState(							
		[in]	BSTR WriterInstanceId,					
		[in]	VSS_WRITER_STATE nCurrentState,
		[in]	HRESULT hrWriterFailure
		);											
};


////////////////////////////////////////////////////////////////////////////////
//  VssEvent Type Library

[
	uuid(3DE641EF-0556-4d4a-98D5-7DBD8AD5D70F),
	version(1.0),
	helpstring("VssEvent 1.0 Type Library")
]
library VssEventLib
{
	importlib("stdole2.tlb");

	[
		uuid(FAF53CC4-BD73-4e36-83F1-2B23F46E513E),
		helpstring("VssEvent Class")
	]
	coclass VssEvent
	{
		interface IVssWriter;
	};
};