/*** Autogenerated by WIDL 9.20 from include/vsbackup.idl - Do not edit ***/

#ifdef _WIN32
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif
#include <rpc.h>
#include <rpcndr.h>
#endif

#ifndef COM_NO_WINDOWS_H
#include <windows.h>
#include <ole2.h>
#endif

#ifndef __vsbackup_h__
#define __vsbackup_h__

/* Forward declarations */

#ifndef __IVssWMComponent_FWD_DEFINED__
#define __IVssWMComponent_FWD_DEFINED__
typedef interface IVssWMComponent IVssWMComponent;
#ifdef __cplusplus
interface IVssWMComponent;
#endif /* __cplusplus */
#endif

#ifndef __IVssExamineWriterMetadata_FWD_DEFINED__
#define __IVssExamineWriterMetadata_FWD_DEFINED__
typedef interface IVssExamineWriterMetadata IVssExamineWriterMetadata;
#ifdef __cplusplus
interface IVssExamineWriterMetadata;
#endif /* __cplusplus */
#endif

#ifndef __IVssExamineWriterMetadataEx_FWD_DEFINED__
#define __IVssExamineWriterMetadataEx_FWD_DEFINED__
typedef interface IVssExamineWriterMetadataEx IVssExamineWriterMetadataEx;
#ifdef __cplusplus
interface IVssExamineWriterMetadataEx;
#endif /* __cplusplus */
#endif

#ifndef __IVssExamineWriterMetadataEx2_FWD_DEFINED__
#define __IVssExamineWriterMetadataEx2_FWD_DEFINED__
typedef interface IVssExamineWriterMetadataEx2 IVssExamineWriterMetadataEx2;
#ifdef __cplusplus
interface IVssExamineWriterMetadataEx2;
#endif /* __cplusplus */
#endif

#ifndef __IVssWriterComponentsExt_FWD_DEFINED__
#define __IVssWriterComponentsExt_FWD_DEFINED__
typedef interface IVssWriterComponentsExt IVssWriterComponentsExt;
#ifdef __cplusplus
interface IVssWriterComponentsExt;
#endif /* __cplusplus */
#endif

#ifndef __IVssBackupComponents_FWD_DEFINED__
#define __IVssBackupComponents_FWD_DEFINED__
typedef interface IVssBackupComponents IVssBackupComponents;
#ifdef __cplusplus
interface IVssBackupComponents;
#endif /* __cplusplus */
#endif

#ifndef __IVssBackupComponentsEx_FWD_DEFINED__
#define __IVssBackupComponentsEx_FWD_DEFINED__
typedef interface IVssBackupComponentsEx IVssBackupComponentsEx;
#ifdef __cplusplus
interface IVssBackupComponentsEx;
#endif /* __cplusplus */
#endif

#ifndef __IVssBackupComponentsEx2_FWD_DEFINED__
#define __IVssBackupComponentsEx2_FWD_DEFINED__
typedef interface IVssBackupComponentsEx2 IVssBackupComponentsEx2;
#ifdef __cplusplus
interface IVssBackupComponentsEx2;
#endif /* __cplusplus */
#endif

#ifndef __IVssBackupComponentsEx3_FWD_DEFINED__
#define __IVssBackupComponentsEx3_FWD_DEFINED__
typedef interface IVssBackupComponentsEx3 IVssBackupComponentsEx3;
#ifdef __cplusplus
interface IVssBackupComponentsEx3;
#endif /* __cplusplus */
#endif

#ifndef __IVssBackupComponentsEx4_FWD_DEFINED__
#define __IVssBackupComponentsEx4_FWD_DEFINED__
typedef interface IVssBackupComponentsEx4 IVssBackupComponentsEx4;
#ifdef __cplusplus
interface IVssBackupComponentsEx4;
#endif /* __cplusplus */
#endif

/* Headers for imported files */

#include <oaidl.h>
#include <ocidl.h>
#include <vss.h>
#include <vswriter.h>

#ifdef __cplusplus
extern "C" {
#endif

#include <winapifamily.h>
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
typedef struct _VSS_COMPONENTINFO {
    VSS_COMPONENT_TYPE type;
    BSTR bstrLogicalPath;
    BSTR bstrComponentName;
    BSTR bstrCaption;
    BYTE *pbIcon;
    UINT cbIcon;
    boolean bRestoreMetadata;
    boolean bNotifyOnBackupComplete;
    boolean bSelectable;
    boolean bSelectableForRestore;
    DWORD dwComponentFlags;
    UINT cFileCount;
    UINT cDatabases;
    UINT cLogFiles;
    UINT cDependencies;
} VSS_COMPONENTINFO;
typedef const VSS_COMPONENTINFO *PVSSCOMPONENTINFO;
/*****************************************************************************
 * IVssWMComponent interface
 */
#ifndef __IVssWMComponent_INTERFACE_DEFINED__
#define __IVssWMComponent_INTERFACE_DEFINED__

DEFINE_GUID(IID_IVssWMComponent, 0x00000000, 0x0000, 0x0000, 0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("00000000-0000-0000-0000-000000000000")
IVssWMComponent : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetComponentInfo(
        PVSSCOMPONENTINFO *ppInfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE FreeComponentInfo(
        PVSSCOMPONENTINFO pInfo) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFile(
        UINT iFile,
        IVssWMFiledesc **ppFiledesc) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDatabaseFile(
        UINT iDBFile,
        IVssWMFiledesc **ppFiledesc) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDatabaseLogFile(
        UINT iDbLogFile,
        IVssWMFiledesc **ppFiledesc) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDependency(
        UINT iDependency,
        IVssWMDependency **ppDependency) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IVssWMComponent, 0x00000000, 0x0000, 0x0000, 0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00)
#endif
#else
typedef struct IVssWMComponentVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IVssWMComponent *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IVssWMComponent *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IVssWMComponent *This);

    /*** IVssWMComponent methods ***/
    HRESULT (STDMETHODCALLTYPE *GetComponentInfo)(
        IVssWMComponent *This,
        PVSSCOMPONENTINFO *ppInfo);

    HRESULT (STDMETHODCALLTYPE *FreeComponentInfo)(
        IVssWMComponent *This,
        PVSSCOMPONENTINFO pInfo);

    HRESULT (STDMETHODCALLTYPE *GetFile)(
        IVssWMComponent *This,
        UINT iFile,
        IVssWMFiledesc **ppFiledesc);

    HRESULT (STDMETHODCALLTYPE *GetDatabaseFile)(
        IVssWMComponent *This,
        UINT iDBFile,
        IVssWMFiledesc **ppFiledesc);

    HRESULT (STDMETHODCALLTYPE *GetDatabaseLogFile)(
        IVssWMComponent *This,
        UINT iDbLogFile,
        IVssWMFiledesc **ppFiledesc);

    HRESULT (STDMETHODCALLTYPE *GetDependency)(
        IVssWMComponent *This,
        UINT iDependency,
        IVssWMDependency **ppDependency);

    END_INTERFACE
} IVssWMComponentVtbl;

interface IVssWMComponent {
    CONST_VTBL IVssWMComponentVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IVssWMComponent_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVssWMComponent_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVssWMComponent_Release(This) (This)->lpVtbl->Release(This)
/*** IVssWMComponent methods ***/
#define IVssWMComponent_GetComponentInfo(This,ppInfo) (This)->lpVtbl->GetComponentInfo(This,ppInfo)
#define IVssWMComponent_FreeComponentInfo(This,pInfo) (This)->lpVtbl->FreeComponentInfo(This,pInfo)
#define IVssWMComponent_GetFile(This,iFile,ppFiledesc) (This)->lpVtbl->GetFile(This,iFile,ppFiledesc)
#define IVssWMComponent_GetDatabaseFile(This,iDBFile,ppFiledesc) (This)->lpVtbl->GetDatabaseFile(This,iDBFile,ppFiledesc)
#define IVssWMComponent_GetDatabaseLogFile(This,iDbLogFile,ppFiledesc) (This)->lpVtbl->GetDatabaseLogFile(This,iDbLogFile,ppFiledesc)
#define IVssWMComponent_GetDependency(This,iDependency,ppDependency) (This)->lpVtbl->GetDependency(This,iDependency,ppDependency)
#else
/*** IUnknown methods ***/
static inline HRESULT IVssWMComponent_QueryInterface(IVssWMComponent* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IVssWMComponent_AddRef(IVssWMComponent* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IVssWMComponent_Release(IVssWMComponent* This) {
    return This->lpVtbl->Release(This);
}
/*** IVssWMComponent methods ***/
static inline HRESULT IVssWMComponent_GetComponentInfo(IVssWMComponent* This,PVSSCOMPONENTINFO *ppInfo) {
    return This->lpVtbl->GetComponentInfo(This,ppInfo);
}
static inline HRESULT IVssWMComponent_FreeComponentInfo(IVssWMComponent* This,PVSSCOMPONENTINFO pInfo) {
    return This->lpVtbl->FreeComponentInfo(This,pInfo);
}
static inline HRESULT IVssWMComponent_GetFile(IVssWMComponent* This,UINT iFile,IVssWMFiledesc **ppFiledesc) {
    return This->lpVtbl->GetFile(This,iFile,ppFiledesc);
}
static inline HRESULT IVssWMComponent_GetDatabaseFile(IVssWMComponent* This,UINT iDBFile,IVssWMFiledesc **ppFiledesc) {
    return This->lpVtbl->GetDatabaseFile(This,iDBFile,ppFiledesc);
}
static inline HRESULT IVssWMComponent_GetDatabaseLogFile(IVssWMComponent* This,UINT iDbLogFile,IVssWMFiledesc **ppFiledesc) {
    return This->lpVtbl->GetDatabaseLogFile(This,iDbLogFile,ppFiledesc);
}
static inline HRESULT IVssWMComponent_GetDependency(IVssWMComponent* This,UINT iDependency,IVssWMDependency **ppDependency) {
    return This->lpVtbl->GetDependency(This,iDependency,ppDependency);
}
#endif
#endif

#endif


#endif  /* __IVssWMComponent_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IVssExamineWriterMetadata interface
 */
#ifndef __IVssExamineWriterMetadata_INTERFACE_DEFINED__
#define __IVssExamineWriterMetadata_INTERFACE_DEFINED__

DEFINE_GUID(IID_IVssExamineWriterMetadata, 0x902fcf7f, 0xb7fd, 0x42f8, 0x81,0xf1, 0xb2,0xe4,0x00,0xb1,0xe5,0xbd);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("902fcf7f-b7fd-42f8-81f1-b2e400b1e5bd")
IVssExamineWriterMetadata : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetIdentity(
        VSS_ID *pidInstance,
        VSS_ID *pidWriter,
        BSTR *pbstrWriterName,
        VSS_USAGE_TYPE *pUsage,
        VSS_SOURCE_TYPE *pSource) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFileCounts(
        UINT *pcIncludeFiles,
        UINT *pcExcludeFiles,
        UINT *pcComponents) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetIncludeFile(
        UINT iFile,
        IVssWMFiledesc **ppFiledesc) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetExcludeFile(
        UINT iFile,
        IVssWMFiledesc **ppFiledesc) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetComponent(
        UINT iComponent,
        IVssWMComponent **ppComponent) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRestoreMethod(
        VSS_RESTOREMETHOD_ENUM *pMethod,
        BSTR *pbstrService,
        BSTR *pbstrUserProcedure,
        VSS_WRITERRESTORE_ENUM *pwriterRestore,
        boolean *pbRebootRequired,
        UINT *pcMappings) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetAlternateLocationMapping(
        UINT iMapping,
        IVssWMFiledesc **ppFiledesc) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBackupSchema(
        DWORD *pdwSchemaMask) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetDocument(
        IXMLDOMDocument **pDoc) = 0;

    virtual HRESULT STDMETHODCALLTYPE SaveAsXML(
        BSTR *pbstrXML) = 0;

    virtual HRESULT STDMETHODCALLTYPE LoadFromXML(
        BSTR bstrXML) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IVssExamineWriterMetadata, 0x902fcf7f, 0xb7fd, 0x42f8, 0x81,0xf1, 0xb2,0xe4,0x00,0xb1,0xe5,0xbd)
#endif
#else
typedef struct IVssExamineWriterMetadataVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IVssExamineWriterMetadata *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IVssExamineWriterMetadata *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IVssExamineWriterMetadata *This);

    /*** IVssExamineWriterMetadata methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIdentity)(
        IVssExamineWriterMetadata *This,
        VSS_ID *pidInstance,
        VSS_ID *pidWriter,
        BSTR *pbstrWriterName,
        VSS_USAGE_TYPE *pUsage,
        VSS_SOURCE_TYPE *pSource);

    HRESULT (STDMETHODCALLTYPE *GetFileCounts)(
        IVssExamineWriterMetadata *This,
        UINT *pcIncludeFiles,
        UINT *pcExcludeFiles,
        UINT *pcComponents);

    HRESULT (STDMETHODCALLTYPE *GetIncludeFile)(
        IVssExamineWriterMetadata *This,
        UINT iFile,
        IVssWMFiledesc **ppFiledesc);

    HRESULT (STDMETHODCALLTYPE *GetExcludeFile)(
        IVssExamineWriterMetadata *This,
        UINT iFile,
        IVssWMFiledesc **ppFiledesc);

    HRESULT (STDMETHODCALLTYPE *GetComponent)(
        IVssExamineWriterMetadata *This,
        UINT iComponent,
        IVssWMComponent **ppComponent);

    HRESULT (STDMETHODCALLTYPE *GetRestoreMethod)(
        IVssExamineWriterMetadata *This,
        VSS_RESTOREMETHOD_ENUM *pMethod,
        BSTR *pbstrService,
        BSTR *pbstrUserProcedure,
        VSS_WRITERRESTORE_ENUM *pwriterRestore,
        boolean *pbRebootRequired,
        UINT *pcMappings);

    HRESULT (STDMETHODCALLTYPE *GetAlternateLocationMapping)(
        IVssExamineWriterMetadata *This,
        UINT iMapping,
        IVssWMFiledesc **ppFiledesc);

    HRESULT (STDMETHODCALLTYPE *GetBackupSchema)(
        IVssExamineWriterMetadata *This,
        DWORD *pdwSchemaMask);

    HRESULT (STDMETHODCALLTYPE *GetDocument)(
        IVssExamineWriterMetadata *This,
        IXMLDOMDocument **pDoc);

    HRESULT (STDMETHODCALLTYPE *SaveAsXML)(
        IVssExamineWriterMetadata *This,
        BSTR *pbstrXML);

    HRESULT (STDMETHODCALLTYPE *LoadFromXML)(
        IVssExamineWriterMetadata *This,
        BSTR bstrXML);

    END_INTERFACE
} IVssExamineWriterMetadataVtbl;

interface IVssExamineWriterMetadata {
    CONST_VTBL IVssExamineWriterMetadataVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IVssExamineWriterMetadata_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVssExamineWriterMetadata_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVssExamineWriterMetadata_Release(This) (This)->lpVtbl->Release(This)
/*** IVssExamineWriterMetadata methods ***/
#define IVssExamineWriterMetadata_GetIdentity(This,pidInstance,pidWriter,pbstrWriterName,pUsage,pSource) (This)->lpVtbl->GetIdentity(This,pidInstance,pidWriter,pbstrWriterName,pUsage,pSource)
#define IVssExamineWriterMetadata_GetFileCounts(This,pcIncludeFiles,pcExcludeFiles,pcComponents) (This)->lpVtbl->GetFileCounts(This,pcIncludeFiles,pcExcludeFiles,pcComponents)
#define IVssExamineWriterMetadata_GetIncludeFile(This,iFile,ppFiledesc) (This)->lpVtbl->GetIncludeFile(This,iFile,ppFiledesc)
#define IVssExamineWriterMetadata_GetExcludeFile(This,iFile,ppFiledesc) (This)->lpVtbl->GetExcludeFile(This,iFile,ppFiledesc)
#define IVssExamineWriterMetadata_GetComponent(This,iComponent,ppComponent) (This)->lpVtbl->GetComponent(This,iComponent,ppComponent)
#define IVssExamineWriterMetadata_GetRestoreMethod(This,pMethod,pbstrService,pbstrUserProcedure,pwriterRestore,pbRebootRequired,pcMappings) (This)->lpVtbl->GetRestoreMethod(This,pMethod,pbstrService,pbstrUserProcedure,pwriterRestore,pbRebootRequired,pcMappings)
#define IVssExamineWriterMetadata_GetAlternateLocationMapping(This,iMapping,ppFiledesc) (This)->lpVtbl->GetAlternateLocationMapping(This,iMapping,ppFiledesc)
#define IVssExamineWriterMetadata_GetBackupSchema(This,pdwSchemaMask) (This)->lpVtbl->GetBackupSchema(This,pdwSchemaMask)
#define IVssExamineWriterMetadata_GetDocument(This,pDoc) (This)->lpVtbl->GetDocument(This,pDoc)
#define IVssExamineWriterMetadata_SaveAsXML(This,pbstrXML) (This)->lpVtbl->SaveAsXML(This,pbstrXML)
#define IVssExamineWriterMetadata_LoadFromXML(This,bstrXML) (This)->lpVtbl->LoadFromXML(This,bstrXML)
#else
/*** IUnknown methods ***/
static inline HRESULT IVssExamineWriterMetadata_QueryInterface(IVssExamineWriterMetadata* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IVssExamineWriterMetadata_AddRef(IVssExamineWriterMetadata* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IVssExamineWriterMetadata_Release(IVssExamineWriterMetadata* This) {
    return This->lpVtbl->Release(This);
}
/*** IVssExamineWriterMetadata methods ***/
static inline HRESULT IVssExamineWriterMetadata_GetIdentity(IVssExamineWriterMetadata* This,VSS_ID *pidInstance,VSS_ID *pidWriter,BSTR *pbstrWriterName,VSS_USAGE_TYPE *pUsage,VSS_SOURCE_TYPE *pSource) {
    return This->lpVtbl->GetIdentity(This,pidInstance,pidWriter,pbstrWriterName,pUsage,pSource);
}
static inline HRESULT IVssExamineWriterMetadata_GetFileCounts(IVssExamineWriterMetadata* This,UINT *pcIncludeFiles,UINT *pcExcludeFiles,UINT *pcComponents) {
    return This->lpVtbl->GetFileCounts(This,pcIncludeFiles,pcExcludeFiles,pcComponents);
}
static inline HRESULT IVssExamineWriterMetadata_GetIncludeFile(IVssExamineWriterMetadata* This,UINT iFile,IVssWMFiledesc **ppFiledesc) {
    return This->lpVtbl->GetIncludeFile(This,iFile,ppFiledesc);
}
static inline HRESULT IVssExamineWriterMetadata_GetExcludeFile(IVssExamineWriterMetadata* This,UINT iFile,IVssWMFiledesc **ppFiledesc) {
    return This->lpVtbl->GetExcludeFile(This,iFile,ppFiledesc);
}
static inline HRESULT IVssExamineWriterMetadata_GetComponent(IVssExamineWriterMetadata* This,UINT iComponent,IVssWMComponent **ppComponent) {
    return This->lpVtbl->GetComponent(This,iComponent,ppComponent);
}
static inline HRESULT IVssExamineWriterMetadata_GetRestoreMethod(IVssExamineWriterMetadata* This,VSS_RESTOREMETHOD_ENUM *pMethod,BSTR *pbstrService,BSTR *pbstrUserProcedure,VSS_WRITERRESTORE_ENUM *pwriterRestore,boolean *pbRebootRequired,UINT *pcMappings) {
    return This->lpVtbl->GetRestoreMethod(This,pMethod,pbstrService,pbstrUserProcedure,pwriterRestore,pbRebootRequired,pcMappings);
}
static inline HRESULT IVssExamineWriterMetadata_GetAlternateLocationMapping(IVssExamineWriterMetadata* This,UINT iMapping,IVssWMFiledesc **ppFiledesc) {
    return This->lpVtbl->GetAlternateLocationMapping(This,iMapping,ppFiledesc);
}
static inline HRESULT IVssExamineWriterMetadata_GetBackupSchema(IVssExamineWriterMetadata* This,DWORD *pdwSchemaMask) {
    return This->lpVtbl->GetBackupSchema(This,pdwSchemaMask);
}
static inline HRESULT IVssExamineWriterMetadata_GetDocument(IVssExamineWriterMetadata* This,IXMLDOMDocument **pDoc) {
    return This->lpVtbl->GetDocument(This,pDoc);
}
static inline HRESULT IVssExamineWriterMetadata_SaveAsXML(IVssExamineWriterMetadata* This,BSTR *pbstrXML) {
    return This->lpVtbl->SaveAsXML(This,pbstrXML);
}
static inline HRESULT IVssExamineWriterMetadata_LoadFromXML(IVssExamineWriterMetadata* This,BSTR bstrXML) {
    return This->lpVtbl->LoadFromXML(This,bstrXML);
}
#endif
#endif

#endif


#endif  /* __IVssExamineWriterMetadata_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IVssExamineWriterMetadataEx interface
 */
#ifndef __IVssExamineWriterMetadataEx_INTERFACE_DEFINED__
#define __IVssExamineWriterMetadataEx_INTERFACE_DEFINED__

DEFINE_GUID(IID_IVssExamineWriterMetadataEx, 0x0c0e5ec0, 0xca44, 0x472b, 0xb7,0x02, 0xe6,0x52,0xdb,0x1c,0x04,0x51);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("0c0e5ec0-ca44-472b-b702-e652db1c0451")
IVssExamineWriterMetadataEx : public IVssExamineWriterMetadata
{
    virtual HRESULT STDMETHODCALLTYPE GetIdentityEx(
        VSS_ID *pidInstance,
        VSS_ID *pidWriter,
        BSTR *pbstrWriterName,
        BSTR *pbstrInstanceName,
        VSS_USAGE_TYPE *pUsage,
        VSS_SOURCE_TYPE *pSource) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IVssExamineWriterMetadataEx, 0x0c0e5ec0, 0xca44, 0x472b, 0xb7,0x02, 0xe6,0x52,0xdb,0x1c,0x04,0x51)
#endif
#else
typedef struct IVssExamineWriterMetadataExVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IVssExamineWriterMetadataEx *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IVssExamineWriterMetadataEx *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IVssExamineWriterMetadataEx *This);

    /*** IVssExamineWriterMetadata methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIdentity)(
        IVssExamineWriterMetadataEx *This,
        VSS_ID *pidInstance,
        VSS_ID *pidWriter,
        BSTR *pbstrWriterName,
        VSS_USAGE_TYPE *pUsage,
        VSS_SOURCE_TYPE *pSource);

    HRESULT (STDMETHODCALLTYPE *GetFileCounts)(
        IVssExamineWriterMetadataEx *This,
        UINT *pcIncludeFiles,
        UINT *pcExcludeFiles,
        UINT *pcComponents);

    HRESULT (STDMETHODCALLTYPE *GetIncludeFile)(
        IVssExamineWriterMetadataEx *This,
        UINT iFile,
        IVssWMFiledesc **ppFiledesc);

    HRESULT (STDMETHODCALLTYPE *GetExcludeFile)(
        IVssExamineWriterMetadataEx *This,
        UINT iFile,
        IVssWMFiledesc **ppFiledesc);

    HRESULT (STDMETHODCALLTYPE *GetComponent)(
        IVssExamineWriterMetadataEx *This,
        UINT iComponent,
        IVssWMComponent **ppComponent);

    HRESULT (STDMETHODCALLTYPE *GetRestoreMethod)(
        IVssExamineWriterMetadataEx *This,
        VSS_RESTOREMETHOD_ENUM *pMethod,
        BSTR *pbstrService,
        BSTR *pbstrUserProcedure,
        VSS_WRITERRESTORE_ENUM *pwriterRestore,
        boolean *pbRebootRequired,
        UINT *pcMappings);

    HRESULT (STDMETHODCALLTYPE *GetAlternateLocationMapping)(
        IVssExamineWriterMetadataEx *This,
        UINT iMapping,
        IVssWMFiledesc **ppFiledesc);

    HRESULT (STDMETHODCALLTYPE *GetBackupSchema)(
        IVssExamineWriterMetadataEx *This,
        DWORD *pdwSchemaMask);

    HRESULT (STDMETHODCALLTYPE *GetDocument)(
        IVssExamineWriterMetadataEx *This,
        IXMLDOMDocument **pDoc);

    HRESULT (STDMETHODCALLTYPE *SaveAsXML)(
        IVssExamineWriterMetadataEx *This,
        BSTR *pbstrXML);

    HRESULT (STDMETHODCALLTYPE *LoadFromXML)(
        IVssExamineWriterMetadataEx *This,
        BSTR bstrXML);

    /*** IVssExamineWriterMetadataEx methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIdentityEx)(
        IVssExamineWriterMetadataEx *This,
        VSS_ID *pidInstance,
        VSS_ID *pidWriter,
        BSTR *pbstrWriterName,
        BSTR *pbstrInstanceName,
        VSS_USAGE_TYPE *pUsage,
        VSS_SOURCE_TYPE *pSource);

    END_INTERFACE
} IVssExamineWriterMetadataExVtbl;

interface IVssExamineWriterMetadataEx {
    CONST_VTBL IVssExamineWriterMetadataExVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IVssExamineWriterMetadataEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVssExamineWriterMetadataEx_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVssExamineWriterMetadataEx_Release(This) (This)->lpVtbl->Release(This)
/*** IVssExamineWriterMetadata methods ***/
#define IVssExamineWriterMetadataEx_GetIdentity(This,pidInstance,pidWriter,pbstrWriterName,pUsage,pSource) (This)->lpVtbl->GetIdentity(This,pidInstance,pidWriter,pbstrWriterName,pUsage,pSource)
#define IVssExamineWriterMetadataEx_GetFileCounts(This,pcIncludeFiles,pcExcludeFiles,pcComponents) (This)->lpVtbl->GetFileCounts(This,pcIncludeFiles,pcExcludeFiles,pcComponents)
#define IVssExamineWriterMetadataEx_GetIncludeFile(This,iFile,ppFiledesc) (This)->lpVtbl->GetIncludeFile(This,iFile,ppFiledesc)
#define IVssExamineWriterMetadataEx_GetExcludeFile(This,iFile,ppFiledesc) (This)->lpVtbl->GetExcludeFile(This,iFile,ppFiledesc)
#define IVssExamineWriterMetadataEx_GetComponent(This,iComponent,ppComponent) (This)->lpVtbl->GetComponent(This,iComponent,ppComponent)
#define IVssExamineWriterMetadataEx_GetRestoreMethod(This,pMethod,pbstrService,pbstrUserProcedure,pwriterRestore,pbRebootRequired,pcMappings) (This)->lpVtbl->GetRestoreMethod(This,pMethod,pbstrService,pbstrUserProcedure,pwriterRestore,pbRebootRequired,pcMappings)
#define IVssExamineWriterMetadataEx_GetAlternateLocationMapping(This,iMapping,ppFiledesc) (This)->lpVtbl->GetAlternateLocationMapping(This,iMapping,ppFiledesc)
#define IVssExamineWriterMetadataEx_GetBackupSchema(This,pdwSchemaMask) (This)->lpVtbl->GetBackupSchema(This,pdwSchemaMask)
#define IVssExamineWriterMetadataEx_GetDocument(This,pDoc) (This)->lpVtbl->GetDocument(This,pDoc)
#define IVssExamineWriterMetadataEx_SaveAsXML(This,pbstrXML) (This)->lpVtbl->SaveAsXML(This,pbstrXML)
#define IVssExamineWriterMetadataEx_LoadFromXML(This,bstrXML) (This)->lpVtbl->LoadFromXML(This,bstrXML)
/*** IVssExamineWriterMetadataEx methods ***/
#define IVssExamineWriterMetadataEx_GetIdentityEx(This,pidInstance,pidWriter,pbstrWriterName,pbstrInstanceName,pUsage,pSource) (This)->lpVtbl->GetIdentityEx(This,pidInstance,pidWriter,pbstrWriterName,pbstrInstanceName,pUsage,pSource)
#else
/*** IUnknown methods ***/
static inline HRESULT IVssExamineWriterMetadataEx_QueryInterface(IVssExamineWriterMetadataEx* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IVssExamineWriterMetadataEx_AddRef(IVssExamineWriterMetadataEx* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IVssExamineWriterMetadataEx_Release(IVssExamineWriterMetadataEx* This) {
    return This->lpVtbl->Release(This);
}
/*** IVssExamineWriterMetadata methods ***/
static inline HRESULT IVssExamineWriterMetadataEx_GetIdentity(IVssExamineWriterMetadataEx* This,VSS_ID *pidInstance,VSS_ID *pidWriter,BSTR *pbstrWriterName,VSS_USAGE_TYPE *pUsage,VSS_SOURCE_TYPE *pSource) {
    return This->lpVtbl->GetIdentity(This,pidInstance,pidWriter,pbstrWriterName,pUsage,pSource);
}
static inline HRESULT IVssExamineWriterMetadataEx_GetFileCounts(IVssExamineWriterMetadataEx* This,UINT *pcIncludeFiles,UINT *pcExcludeFiles,UINT *pcComponents) {
    return This->lpVtbl->GetFileCounts(This,pcIncludeFiles,pcExcludeFiles,pcComponents);
}
static inline HRESULT IVssExamineWriterMetadataEx_GetIncludeFile(IVssExamineWriterMetadataEx* This,UINT iFile,IVssWMFiledesc **ppFiledesc) {
    return This->lpVtbl->GetIncludeFile(This,iFile,ppFiledesc);
}
static inline HRESULT IVssExamineWriterMetadataEx_GetExcludeFile(IVssExamineWriterMetadataEx* This,UINT iFile,IVssWMFiledesc **ppFiledesc) {
    return This->lpVtbl->GetExcludeFile(This,iFile,ppFiledesc);
}
static inline HRESULT IVssExamineWriterMetadataEx_GetComponent(IVssExamineWriterMetadataEx* This,UINT iComponent,IVssWMComponent **ppComponent) {
    return This->lpVtbl->GetComponent(This,iComponent,ppComponent);
}
static inline HRESULT IVssExamineWriterMetadataEx_GetRestoreMethod(IVssExamineWriterMetadataEx* This,VSS_RESTOREMETHOD_ENUM *pMethod,BSTR *pbstrService,BSTR *pbstrUserProcedure,VSS_WRITERRESTORE_ENUM *pwriterRestore,boolean *pbRebootRequired,UINT *pcMappings) {
    return This->lpVtbl->GetRestoreMethod(This,pMethod,pbstrService,pbstrUserProcedure,pwriterRestore,pbRebootRequired,pcMappings);
}
static inline HRESULT IVssExamineWriterMetadataEx_GetAlternateLocationMapping(IVssExamineWriterMetadataEx* This,UINT iMapping,IVssWMFiledesc **ppFiledesc) {
    return This->lpVtbl->GetAlternateLocationMapping(This,iMapping,ppFiledesc);
}
static inline HRESULT IVssExamineWriterMetadataEx_GetBackupSchema(IVssExamineWriterMetadataEx* This,DWORD *pdwSchemaMask) {
    return This->lpVtbl->GetBackupSchema(This,pdwSchemaMask);
}
static inline HRESULT IVssExamineWriterMetadataEx_GetDocument(IVssExamineWriterMetadataEx* This,IXMLDOMDocument **pDoc) {
    return This->lpVtbl->GetDocument(This,pDoc);
}
static inline HRESULT IVssExamineWriterMetadataEx_SaveAsXML(IVssExamineWriterMetadataEx* This,BSTR *pbstrXML) {
    return This->lpVtbl->SaveAsXML(This,pbstrXML);
}
static inline HRESULT IVssExamineWriterMetadataEx_LoadFromXML(IVssExamineWriterMetadataEx* This,BSTR bstrXML) {
    return This->lpVtbl->LoadFromXML(This,bstrXML);
}
/*** IVssExamineWriterMetadataEx methods ***/
static inline HRESULT IVssExamineWriterMetadataEx_GetIdentityEx(IVssExamineWriterMetadataEx* This,VSS_ID *pidInstance,VSS_ID *pidWriter,BSTR *pbstrWriterName,BSTR *pbstrInstanceName,VSS_USAGE_TYPE *pUsage,VSS_SOURCE_TYPE *pSource) {
    return This->lpVtbl->GetIdentityEx(This,pidInstance,pidWriter,pbstrWriterName,pbstrInstanceName,pUsage,pSource);
}
#endif
#endif

#endif


#endif  /* __IVssExamineWriterMetadataEx_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IVssExamineWriterMetadataEx2 interface
 */
#ifndef __IVssExamineWriterMetadataEx2_INTERFACE_DEFINED__
#define __IVssExamineWriterMetadataEx2_INTERFACE_DEFINED__

DEFINE_GUID(IID_IVssExamineWriterMetadataEx2, 0xce115780, 0xa611, 0x431b, 0xb5,0x7f, 0xc3,0x83,0x03,0xab,0x6a,0xee);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("ce115780-a611-431b-b57f-c38303ab6aee")
IVssExamineWriterMetadataEx2 : public IVssExamineWriterMetadataEx
{
    virtual HRESULT STDMETHODCALLTYPE GetVersion(
        DWORD *pdwMajorVersion,
        DWORD *pdwMinorVersion) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetExcludeFromSnapshotCount(
        UINT *pcExcludedFromSnapshot) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetExcludeFromSnapshotFile(
        UINT iFile,
        IVssWMFiledesc **ppFiledesc) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IVssExamineWriterMetadataEx2, 0xce115780, 0xa611, 0x431b, 0xb5,0x7f, 0xc3,0x83,0x03,0xab,0x6a,0xee)
#endif
#else
typedef struct IVssExamineWriterMetadataEx2Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IVssExamineWriterMetadataEx2 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IVssExamineWriterMetadataEx2 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IVssExamineWriterMetadataEx2 *This);

    /*** IVssExamineWriterMetadata methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIdentity)(
        IVssExamineWriterMetadataEx2 *This,
        VSS_ID *pidInstance,
        VSS_ID *pidWriter,
        BSTR *pbstrWriterName,
        VSS_USAGE_TYPE *pUsage,
        VSS_SOURCE_TYPE *pSource);

    HRESULT (STDMETHODCALLTYPE *GetFileCounts)(
        IVssExamineWriterMetadataEx2 *This,
        UINT *pcIncludeFiles,
        UINT *pcExcludeFiles,
        UINT *pcComponents);

    HRESULT (STDMETHODCALLTYPE *GetIncludeFile)(
        IVssExamineWriterMetadataEx2 *This,
        UINT iFile,
        IVssWMFiledesc **ppFiledesc);

    HRESULT (STDMETHODCALLTYPE *GetExcludeFile)(
        IVssExamineWriterMetadataEx2 *This,
        UINT iFile,
        IVssWMFiledesc **ppFiledesc);

    HRESULT (STDMETHODCALLTYPE *GetComponent)(
        IVssExamineWriterMetadataEx2 *This,
        UINT iComponent,
        IVssWMComponent **ppComponent);

    HRESULT (STDMETHODCALLTYPE *GetRestoreMethod)(
        IVssExamineWriterMetadataEx2 *This,
        VSS_RESTOREMETHOD_ENUM *pMethod,
        BSTR *pbstrService,
        BSTR *pbstrUserProcedure,
        VSS_WRITERRESTORE_ENUM *pwriterRestore,
        boolean *pbRebootRequired,
        UINT *pcMappings);

    HRESULT (STDMETHODCALLTYPE *GetAlternateLocationMapping)(
        IVssExamineWriterMetadataEx2 *This,
        UINT iMapping,
        IVssWMFiledesc **ppFiledesc);

    HRESULT (STDMETHODCALLTYPE *GetBackupSchema)(
        IVssExamineWriterMetadataEx2 *This,
        DWORD *pdwSchemaMask);

    HRESULT (STDMETHODCALLTYPE *GetDocument)(
        IVssExamineWriterMetadataEx2 *This,
        IXMLDOMDocument **pDoc);

    HRESULT (STDMETHODCALLTYPE *SaveAsXML)(
        IVssExamineWriterMetadataEx2 *This,
        BSTR *pbstrXML);

    HRESULT (STDMETHODCALLTYPE *LoadFromXML)(
        IVssExamineWriterMetadataEx2 *This,
        BSTR bstrXML);

    /*** IVssExamineWriterMetadataEx methods ***/
    HRESULT (STDMETHODCALLTYPE *GetIdentityEx)(
        IVssExamineWriterMetadataEx2 *This,
        VSS_ID *pidInstance,
        VSS_ID *pidWriter,
        BSTR *pbstrWriterName,
        BSTR *pbstrInstanceName,
        VSS_USAGE_TYPE *pUsage,
        VSS_SOURCE_TYPE *pSource);

    /*** IVssExamineWriterMetadataEx2 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetVersion)(
        IVssExamineWriterMetadataEx2 *This,
        DWORD *pdwMajorVersion,
        DWORD *pdwMinorVersion);

    HRESULT (STDMETHODCALLTYPE *GetExcludeFromSnapshotCount)(
        IVssExamineWriterMetadataEx2 *This,
        UINT *pcExcludedFromSnapshot);

    HRESULT (STDMETHODCALLTYPE *GetExcludeFromSnapshotFile)(
        IVssExamineWriterMetadataEx2 *This,
        UINT iFile,
        IVssWMFiledesc **ppFiledesc);

    END_INTERFACE
} IVssExamineWriterMetadataEx2Vtbl;

interface IVssExamineWriterMetadataEx2 {
    CONST_VTBL IVssExamineWriterMetadataEx2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IVssExamineWriterMetadataEx2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVssExamineWriterMetadataEx2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVssExamineWriterMetadataEx2_Release(This) (This)->lpVtbl->Release(This)
/*** IVssExamineWriterMetadata methods ***/
#define IVssExamineWriterMetadataEx2_GetIdentity(This,pidInstance,pidWriter,pbstrWriterName,pUsage,pSource) (This)->lpVtbl->GetIdentity(This,pidInstance,pidWriter,pbstrWriterName,pUsage,pSource)
#define IVssExamineWriterMetadataEx2_GetFileCounts(This,pcIncludeFiles,pcExcludeFiles,pcComponents) (This)->lpVtbl->GetFileCounts(This,pcIncludeFiles,pcExcludeFiles,pcComponents)
#define IVssExamineWriterMetadataEx2_GetIncludeFile(This,iFile,ppFiledesc) (This)->lpVtbl->GetIncludeFile(This,iFile,ppFiledesc)
#define IVssExamineWriterMetadataEx2_GetExcludeFile(This,iFile,ppFiledesc) (This)->lpVtbl->GetExcludeFile(This,iFile,ppFiledesc)
#define IVssExamineWriterMetadataEx2_GetComponent(This,iComponent,ppComponent) (This)->lpVtbl->GetComponent(This,iComponent,ppComponent)
#define IVssExamineWriterMetadataEx2_GetRestoreMethod(This,pMethod,pbstrService,pbstrUserProcedure,pwriterRestore,pbRebootRequired,pcMappings) (This)->lpVtbl->GetRestoreMethod(This,pMethod,pbstrService,pbstrUserProcedure,pwriterRestore,pbRebootRequired,pcMappings)
#define IVssExamineWriterMetadataEx2_GetAlternateLocationMapping(This,iMapping,ppFiledesc) (This)->lpVtbl->GetAlternateLocationMapping(This,iMapping,ppFiledesc)
#define IVssExamineWriterMetadataEx2_GetBackupSchema(This,pdwSchemaMask) (This)->lpVtbl->GetBackupSchema(This,pdwSchemaMask)
#define IVssExamineWriterMetadataEx2_GetDocument(This,pDoc) (This)->lpVtbl->GetDocument(This,pDoc)
#define IVssExamineWriterMetadataEx2_SaveAsXML(This,pbstrXML) (This)->lpVtbl->SaveAsXML(This,pbstrXML)
#define IVssExamineWriterMetadataEx2_LoadFromXML(This,bstrXML) (This)->lpVtbl->LoadFromXML(This,bstrXML)
/*** IVssExamineWriterMetadataEx methods ***/
#define IVssExamineWriterMetadataEx2_GetIdentityEx(This,pidInstance,pidWriter,pbstrWriterName,pbstrInstanceName,pUsage,pSource) (This)->lpVtbl->GetIdentityEx(This,pidInstance,pidWriter,pbstrWriterName,pbstrInstanceName,pUsage,pSource)
/*** IVssExamineWriterMetadataEx2 methods ***/
#define IVssExamineWriterMetadataEx2_GetVersion(This,pdwMajorVersion,pdwMinorVersion) (This)->lpVtbl->GetVersion(This,pdwMajorVersion,pdwMinorVersion)
#define IVssExamineWriterMetadataEx2_GetExcludeFromSnapshotCount(This,pcExcludedFromSnapshot) (This)->lpVtbl->GetExcludeFromSnapshotCount(This,pcExcludedFromSnapshot)
#define IVssExamineWriterMetadataEx2_GetExcludeFromSnapshotFile(This,iFile,ppFiledesc) (This)->lpVtbl->GetExcludeFromSnapshotFile(This,iFile,ppFiledesc)
#else
/*** IUnknown methods ***/
static inline HRESULT IVssExamineWriterMetadataEx2_QueryInterface(IVssExamineWriterMetadataEx2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IVssExamineWriterMetadataEx2_AddRef(IVssExamineWriterMetadataEx2* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IVssExamineWriterMetadataEx2_Release(IVssExamineWriterMetadataEx2* This) {
    return This->lpVtbl->Release(This);
}
/*** IVssExamineWriterMetadata methods ***/
static inline HRESULT IVssExamineWriterMetadataEx2_GetIdentity(IVssExamineWriterMetadataEx2* This,VSS_ID *pidInstance,VSS_ID *pidWriter,BSTR *pbstrWriterName,VSS_USAGE_TYPE *pUsage,VSS_SOURCE_TYPE *pSource) {
    return This->lpVtbl->GetIdentity(This,pidInstance,pidWriter,pbstrWriterName,pUsage,pSource);
}
static inline HRESULT IVssExamineWriterMetadataEx2_GetFileCounts(IVssExamineWriterMetadataEx2* This,UINT *pcIncludeFiles,UINT *pcExcludeFiles,UINT *pcComponents) {
    return This->lpVtbl->GetFileCounts(This,pcIncludeFiles,pcExcludeFiles,pcComponents);
}
static inline HRESULT IVssExamineWriterMetadataEx2_GetIncludeFile(IVssExamineWriterMetadataEx2* This,UINT iFile,IVssWMFiledesc **ppFiledesc) {
    return This->lpVtbl->GetIncludeFile(This,iFile,ppFiledesc);
}
static inline HRESULT IVssExamineWriterMetadataEx2_GetExcludeFile(IVssExamineWriterMetadataEx2* This,UINT iFile,IVssWMFiledesc **ppFiledesc) {
    return This->lpVtbl->GetExcludeFile(This,iFile,ppFiledesc);
}
static inline HRESULT IVssExamineWriterMetadataEx2_GetComponent(IVssExamineWriterMetadataEx2* This,UINT iComponent,IVssWMComponent **ppComponent) {
    return This->lpVtbl->GetComponent(This,iComponent,ppComponent);
}
static inline HRESULT IVssExamineWriterMetadataEx2_GetRestoreMethod(IVssExamineWriterMetadataEx2* This,VSS_RESTOREMETHOD_ENUM *pMethod,BSTR *pbstrService,BSTR *pbstrUserProcedure,VSS_WRITERRESTORE_ENUM *pwriterRestore,boolean *pbRebootRequired,UINT *pcMappings) {
    return This->lpVtbl->GetRestoreMethod(This,pMethod,pbstrService,pbstrUserProcedure,pwriterRestore,pbRebootRequired,pcMappings);
}
static inline HRESULT IVssExamineWriterMetadataEx2_GetAlternateLocationMapping(IVssExamineWriterMetadataEx2* This,UINT iMapping,IVssWMFiledesc **ppFiledesc) {
    return This->lpVtbl->GetAlternateLocationMapping(This,iMapping,ppFiledesc);
}
static inline HRESULT IVssExamineWriterMetadataEx2_GetBackupSchema(IVssExamineWriterMetadataEx2* This,DWORD *pdwSchemaMask) {
    return This->lpVtbl->GetBackupSchema(This,pdwSchemaMask);
}
static inline HRESULT IVssExamineWriterMetadataEx2_GetDocument(IVssExamineWriterMetadataEx2* This,IXMLDOMDocument **pDoc) {
    return This->lpVtbl->GetDocument(This,pDoc);
}
static inline HRESULT IVssExamineWriterMetadataEx2_SaveAsXML(IVssExamineWriterMetadataEx2* This,BSTR *pbstrXML) {
    return This->lpVtbl->SaveAsXML(This,pbstrXML);
}
static inline HRESULT IVssExamineWriterMetadataEx2_LoadFromXML(IVssExamineWriterMetadataEx2* This,BSTR bstrXML) {
    return This->lpVtbl->LoadFromXML(This,bstrXML);
}
/*** IVssExamineWriterMetadataEx methods ***/
static inline HRESULT IVssExamineWriterMetadataEx2_GetIdentityEx(IVssExamineWriterMetadataEx2* This,VSS_ID *pidInstance,VSS_ID *pidWriter,BSTR *pbstrWriterName,BSTR *pbstrInstanceName,VSS_USAGE_TYPE *pUsage,VSS_SOURCE_TYPE *pSource) {
    return This->lpVtbl->GetIdentityEx(This,pidInstance,pidWriter,pbstrWriterName,pbstrInstanceName,pUsage,pSource);
}
/*** IVssExamineWriterMetadataEx2 methods ***/
static inline HRESULT IVssExamineWriterMetadataEx2_GetVersion(IVssExamineWriterMetadataEx2* This,DWORD *pdwMajorVersion,DWORD *pdwMinorVersion) {
    return This->lpVtbl->GetVersion(This,pdwMajorVersion,pdwMinorVersion);
}
static inline HRESULT IVssExamineWriterMetadataEx2_GetExcludeFromSnapshotCount(IVssExamineWriterMetadataEx2* This,UINT *pcExcludedFromSnapshot) {
    return This->lpVtbl->GetExcludeFromSnapshotCount(This,pcExcludedFromSnapshot);
}
static inline HRESULT IVssExamineWriterMetadataEx2_GetExcludeFromSnapshotFile(IVssExamineWriterMetadataEx2* This,UINT iFile,IVssWMFiledesc **ppFiledesc) {
    return This->lpVtbl->GetExcludeFromSnapshotFile(This,iFile,ppFiledesc);
}
#endif
#endif

#endif


#endif  /* __IVssExamineWriterMetadataEx2_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IVssWriterComponentsExt interface
 */
#ifndef __IVssWriterComponentsExt_INTERFACE_DEFINED__
#define __IVssWriterComponentsExt_INTERFACE_DEFINED__

DEFINE_GUID(IID_IVssWriterComponentsExt, 0x00000000, 0x0000, 0x0000, 0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("00000000-0000-0000-0000-000000000000")
IVssWriterComponentsExt : public IVssWriterComponents
{
};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IVssWriterComponentsExt, 0x00000000, 0x0000, 0x0000, 0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00)
#endif
#else
typedef struct IVssWriterComponentsExtVtbl {
    BEGIN_INTERFACE

    /*** IVssWriterComponents methods ***/
    HRESULT (STDMETHODCALLTYPE *GetComponentCount)(
        IVssWriterComponentsExt *This,
        UINT *pcComponents);

    HRESULT (STDMETHODCALLTYPE *GetWriterInfo)(
        IVssWriterComponentsExt *This,
        VSS_ID *pidInstance,
        VSS_ID *pidWriter);

    HRESULT (STDMETHODCALLTYPE *GetComponent)(
        IVssWriterComponentsExt *This,
        UINT iComponent,
        IVssComponent **ppComponent);

    END_INTERFACE
} IVssWriterComponentsExtVtbl;

interface IVssWriterComponentsExt {
    CONST_VTBL IVssWriterComponentsExtVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IVssWriterComponents methods ***/
#define IVssWriterComponentsExt_GetComponentCount(This,pcComponents) (This)->lpVtbl->GetComponentCount(This,pcComponents)
#define IVssWriterComponentsExt_GetWriterInfo(This,pidInstance,pidWriter) (This)->lpVtbl->GetWriterInfo(This,pidInstance,pidWriter)
#define IVssWriterComponentsExt_GetComponent(This,iComponent,ppComponent) (This)->lpVtbl->GetComponent(This,iComponent,ppComponent)
#else
/*** IVssWriterComponents methods ***/
static inline HRESULT IVssWriterComponentsExt_GetComponentCount(IVssWriterComponentsExt* This,UINT *pcComponents) {
    return This->lpVtbl->GetComponentCount(This,pcComponents);
}
static inline HRESULT IVssWriterComponentsExt_GetWriterInfo(IVssWriterComponentsExt* This,VSS_ID *pidInstance,VSS_ID *pidWriter) {
    return This->lpVtbl->GetWriterInfo(This,pidInstance,pidWriter);
}
static inline HRESULT IVssWriterComponentsExt_GetComponent(IVssWriterComponentsExt* This,UINT iComponent,IVssComponent **ppComponent) {
    return This->lpVtbl->GetComponent(This,iComponent,ppComponent);
}
#endif
#endif

#endif


#endif  /* __IVssWriterComponentsExt_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IVssBackupComponents interface
 */
#ifndef __IVssBackupComponents_INTERFACE_DEFINED__
#define __IVssBackupComponents_INTERFACE_DEFINED__

DEFINE_GUID(IID_IVssBackupComponents, 0x665c1d5f, 0xc218, 0x414d, 0xa0,0x5d, 0x7f,0xef,0x5f,0x9d,0x5c,0x86);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("665c1d5f-c218-414d-a05d-7fef5f9d5c86")
IVssBackupComponents : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetWriterComponentsCount(
        UINT *pcComponents) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetWriterComponents(
        UINT iWriter,
        IVssWriterComponentsExt **ppWriter) = 0;

    virtual HRESULT STDMETHODCALLTYPE InitializeForBackup(
        BSTR bstrXML = 0) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetBackupState(
        boolean bSelectComponents,
        boolean bBackupBootableSystemState,
        VSS_BACKUP_TYPE backupType,
        boolean bPartialFileSupport = 0) = 0;

    virtual HRESULT STDMETHODCALLTYPE InitializeForRestore(
        BSTR bstrXML) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetRestoreState(
        VSS_RESTORE_TYPE restoreType) = 0;

    virtual HRESULT STDMETHODCALLTYPE GatherWriterMetadata(
        IVssAsync **pAsync) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetWriterMetadataCount(
        UINT *pcWriters) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetWriterMetadata(
        UINT iWriter,
        VSS_ID *pidInstance,
        IVssExamineWriterMetadata **ppMetadata) = 0;

    virtual HRESULT STDMETHODCALLTYPE FreeWriterMetadata(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddComponent(
        VSS_ID instanceId,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName) = 0;

    virtual HRESULT STDMETHODCALLTYPE PrepareForBackup(
        IVssAsync **ppAsync) = 0;

    virtual HRESULT STDMETHODCALLTYPE AbortBackup(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GatherWriterStatus(
        IVssAsync **pAsync) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetWriterStatusCount(
        UINT *pcWriters) = 0;

    virtual HRESULT STDMETHODCALLTYPE FreeWriterStatus(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetWriterStatus(
        UINT iWriter,
        VSS_ID *pidInstance,
        VSS_ID *pidWriter,
        BSTR *pbstrWriter,
        VSS_WRITER_STATE *pnStatus,
        HRESULT *phResultFailure) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetBackupSucceeded(
        VSS_ID instanceId,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        boolean bSucceded) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetBackupOptions(
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszBackupOptions) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetSelectedForRestore(
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        boolean bSelectedForRestore) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetRestoreOptions(
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszRestoreOptions) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetAdditionalRestores(
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        boolean bAdditionalRestores) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetPreviousBackupStamp(
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszPreviousBackupStamp) = 0;

    virtual HRESULT STDMETHODCALLTYPE SaveAsXML(
        BSTR *pbstrXML) = 0;

    virtual HRESULT STDMETHODCALLTYPE BackupComplete(
        IVssAsync **ppAsync) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddAlternativeLocationMapping(
        VSS_ID writerId,
        VSS_COMPONENT_TYPE componentType,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszPath,
        LPCWSTR wszFilespec,
        boolean bRecursive,
        LPCWSTR wszDestination) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddRestoreSubcomponent(
        VSS_ID writerId,
        VSS_COMPONENT_TYPE componentType,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszSubComponentLogicalPath,
        LPCWSTR wszSubComponentName,
        boolean bRepair) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetFileRestoreStatus(
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        VSS_FILE_RESTORE_STATUS status) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddNewTarget(
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszPath,
        LPCWSTR wszFileName,
        boolean bRecursive,
        LPCWSTR wszAlternatePath) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetRangesFilePath(
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        UINT iPartialFile,
        LPCWSTR wszRangesFile) = 0;

    virtual HRESULT STDMETHODCALLTYPE PreRestore(
        IVssAsync **ppAsync) = 0;

    virtual HRESULT STDMETHODCALLTYPE PostRestore(
        IVssAsync **ppAsync) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetContext(
        LONG lContext) = 0;

    virtual HRESULT STDMETHODCALLTYPE StartSnapshotSet(
        VSS_ID *pSnapshotSetId) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddToSnapshotSet(
        VSS_PWSZ pwszVolumeName,
        VSS_ID ProviderId,
        VSS_ID *pidSnapshot) = 0;

    virtual HRESULT STDMETHODCALLTYPE DoSnapshotSet(
        IVssAsync **ppAsync) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteSnapshots(
        VSS_ID SourceObjectId,
        VSS_OBJECT_TYPE eSourceObjectType,
        WINBOOL bForceDelete,
        LONG *plDeletedSnapshots,
        VSS_ID *pNondeletedSnapshotID) = 0;

    virtual HRESULT STDMETHODCALLTYPE ImportSnapshots(
        IVssAsync **ppAsync) = 0;

    virtual HRESULT STDMETHODCALLTYPE BreakSnapshotSet(
        VSS_ID SnapshotSetId) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSnapshotProperties(
        VSS_ID SnapshotId,
        VSS_SNAPSHOT_PROP *pProp) = 0;

    virtual HRESULT STDMETHODCALLTYPE Query(
        VSS_ID QueriedObjectId,
        VSS_OBJECT_TYPE eQueriedObjectType,
        VSS_OBJECT_TYPE eReturnedObjectsType,
        IVssEnumObject **ppEnum) = 0;

    virtual HRESULT STDMETHODCALLTYPE IsVolumeSupported(
        VSS_ID ProviderId,
        VSS_PWSZ pwszVolumeName,
        WINBOOL *pbSupportedByThisProvider) = 0;

    virtual HRESULT STDMETHODCALLTYPE DisableWriterClasses(
        const VSS_ID *rgWriterClassId,
        UINT cClassId) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnableWriterClasses(
        const VSS_ID *rgWriterClassId,
        UINT cClassId) = 0;

    virtual HRESULT STDMETHODCALLTYPE DisableWriterInstances(
        const VSS_ID *rgWriterInstanceId,
        UINT cInstanceId) = 0;

    virtual HRESULT STDMETHODCALLTYPE ExposeSnapshot(
        VSS_ID SnapshotId,
        VSS_PWSZ wszPathFromRoot,
        LONG lAttributes,
        VSS_PWSZ wszExpose,
        VSS_PWSZ *pwszExposed) = 0;

    virtual HRESULT STDMETHODCALLTYPE RevertToSnapshot(
        VSS_ID SnapshotId,
        WINBOOL bForceDismount) = 0;

    virtual HRESULT STDMETHODCALLTYPE QueryRevertStatus(
        VSS_PWSZ pwszVolume,
        IVssAsync **ppAsync) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IVssBackupComponents, 0x665c1d5f, 0xc218, 0x414d, 0xa0,0x5d, 0x7f,0xef,0x5f,0x9d,0x5c,0x86)
#endif
#else
typedef struct IVssBackupComponentsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IVssBackupComponents *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IVssBackupComponents *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IVssBackupComponents *This);

    /*** IVssBackupComponents methods ***/
    HRESULT (STDMETHODCALLTYPE *GetWriterComponentsCount)(
        IVssBackupComponents *This,
        UINT *pcComponents);

    HRESULT (STDMETHODCALLTYPE *GetWriterComponents)(
        IVssBackupComponents *This,
        UINT iWriter,
        IVssWriterComponentsExt **ppWriter);

    HRESULT (STDMETHODCALLTYPE *InitializeForBackup)(
        IVssBackupComponents *This,
        BSTR bstrXML);

    HRESULT (STDMETHODCALLTYPE *SetBackupState)(
        IVssBackupComponents *This,
        boolean bSelectComponents,
        boolean bBackupBootableSystemState,
        VSS_BACKUP_TYPE backupType,
        boolean bPartialFileSupport);

    HRESULT (STDMETHODCALLTYPE *InitializeForRestore)(
        IVssBackupComponents *This,
        BSTR bstrXML);

    HRESULT (STDMETHODCALLTYPE *SetRestoreState)(
        IVssBackupComponents *This,
        VSS_RESTORE_TYPE restoreType);

    HRESULT (STDMETHODCALLTYPE *GatherWriterMetadata)(
        IVssBackupComponents *This,
        IVssAsync **pAsync);

    HRESULT (STDMETHODCALLTYPE *GetWriterMetadataCount)(
        IVssBackupComponents *This,
        UINT *pcWriters);

    HRESULT (STDMETHODCALLTYPE *GetWriterMetadata)(
        IVssBackupComponents *This,
        UINT iWriter,
        VSS_ID *pidInstance,
        IVssExamineWriterMetadata **ppMetadata);

    HRESULT (STDMETHODCALLTYPE *FreeWriterMetadata)(
        IVssBackupComponents *This);

    HRESULT (STDMETHODCALLTYPE *AddComponent)(
        IVssBackupComponents *This,
        VSS_ID instanceId,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName);

    HRESULT (STDMETHODCALLTYPE *PrepareForBackup)(
        IVssBackupComponents *This,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *AbortBackup)(
        IVssBackupComponents *This);

    HRESULT (STDMETHODCALLTYPE *GatherWriterStatus)(
        IVssBackupComponents *This,
        IVssAsync **pAsync);

    HRESULT (STDMETHODCALLTYPE *GetWriterStatusCount)(
        IVssBackupComponents *This,
        UINT *pcWriters);

    HRESULT (STDMETHODCALLTYPE *FreeWriterStatus)(
        IVssBackupComponents *This);

    HRESULT (STDMETHODCALLTYPE *GetWriterStatus)(
        IVssBackupComponents *This,
        UINT iWriter,
        VSS_ID *pidInstance,
        VSS_ID *pidWriter,
        BSTR *pbstrWriter,
        VSS_WRITER_STATE *pnStatus,
        HRESULT *phResultFailure);

    HRESULT (STDMETHODCALLTYPE *SetBackupSucceeded)(
        IVssBackupComponents *This,
        VSS_ID instanceId,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        boolean bSucceded);

    HRESULT (STDMETHODCALLTYPE *SetBackupOptions)(
        IVssBackupComponents *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszBackupOptions);

    HRESULT (STDMETHODCALLTYPE *SetSelectedForRestore)(
        IVssBackupComponents *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        boolean bSelectedForRestore);

    HRESULT (STDMETHODCALLTYPE *SetRestoreOptions)(
        IVssBackupComponents *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszRestoreOptions);

    HRESULT (STDMETHODCALLTYPE *SetAdditionalRestores)(
        IVssBackupComponents *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        boolean bAdditionalRestores);

    HRESULT (STDMETHODCALLTYPE *SetPreviousBackupStamp)(
        IVssBackupComponents *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszPreviousBackupStamp);

    HRESULT (STDMETHODCALLTYPE *SaveAsXML)(
        IVssBackupComponents *This,
        BSTR *pbstrXML);

    HRESULT (STDMETHODCALLTYPE *BackupComplete)(
        IVssBackupComponents *This,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *AddAlternativeLocationMapping)(
        IVssBackupComponents *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE componentType,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszPath,
        LPCWSTR wszFilespec,
        boolean bRecursive,
        LPCWSTR wszDestination);

    HRESULT (STDMETHODCALLTYPE *AddRestoreSubcomponent)(
        IVssBackupComponents *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE componentType,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszSubComponentLogicalPath,
        LPCWSTR wszSubComponentName,
        boolean bRepair);

    HRESULT (STDMETHODCALLTYPE *SetFileRestoreStatus)(
        IVssBackupComponents *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        VSS_FILE_RESTORE_STATUS status);

    HRESULT (STDMETHODCALLTYPE *AddNewTarget)(
        IVssBackupComponents *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszPath,
        LPCWSTR wszFileName,
        boolean bRecursive,
        LPCWSTR wszAlternatePath);

    HRESULT (STDMETHODCALLTYPE *SetRangesFilePath)(
        IVssBackupComponents *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        UINT iPartialFile,
        LPCWSTR wszRangesFile);

    HRESULT (STDMETHODCALLTYPE *PreRestore)(
        IVssBackupComponents *This,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *PostRestore)(
        IVssBackupComponents *This,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *SetContext)(
        IVssBackupComponents *This,
        LONG lContext);

    HRESULT (STDMETHODCALLTYPE *StartSnapshotSet)(
        IVssBackupComponents *This,
        VSS_ID *pSnapshotSetId);

    HRESULT (STDMETHODCALLTYPE *AddToSnapshotSet)(
        IVssBackupComponents *This,
        VSS_PWSZ pwszVolumeName,
        VSS_ID ProviderId,
        VSS_ID *pidSnapshot);

    HRESULT (STDMETHODCALLTYPE *DoSnapshotSet)(
        IVssBackupComponents *This,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *DeleteSnapshots)(
        IVssBackupComponents *This,
        VSS_ID SourceObjectId,
        VSS_OBJECT_TYPE eSourceObjectType,
        WINBOOL bForceDelete,
        LONG *plDeletedSnapshots,
        VSS_ID *pNondeletedSnapshotID);

    HRESULT (STDMETHODCALLTYPE *ImportSnapshots)(
        IVssBackupComponents *This,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *BreakSnapshotSet)(
        IVssBackupComponents *This,
        VSS_ID SnapshotSetId);

    HRESULT (STDMETHODCALLTYPE *GetSnapshotProperties)(
        IVssBackupComponents *This,
        VSS_ID SnapshotId,
        VSS_SNAPSHOT_PROP *pProp);

    HRESULT (STDMETHODCALLTYPE *Query)(
        IVssBackupComponents *This,
        VSS_ID QueriedObjectId,
        VSS_OBJECT_TYPE eQueriedObjectType,
        VSS_OBJECT_TYPE eReturnedObjectsType,
        IVssEnumObject **ppEnum);

    HRESULT (STDMETHODCALLTYPE *IsVolumeSupported)(
        IVssBackupComponents *This,
        VSS_ID ProviderId,
        VSS_PWSZ pwszVolumeName,
        WINBOOL *pbSupportedByThisProvider);

    HRESULT (STDMETHODCALLTYPE *DisableWriterClasses)(
        IVssBackupComponents *This,
        const VSS_ID *rgWriterClassId,
        UINT cClassId);

    HRESULT (STDMETHODCALLTYPE *EnableWriterClasses)(
        IVssBackupComponents *This,
        const VSS_ID *rgWriterClassId,
        UINT cClassId);

    HRESULT (STDMETHODCALLTYPE *DisableWriterInstances)(
        IVssBackupComponents *This,
        const VSS_ID *rgWriterInstanceId,
        UINT cInstanceId);

    HRESULT (STDMETHODCALLTYPE *ExposeSnapshot)(
        IVssBackupComponents *This,
        VSS_ID SnapshotId,
        VSS_PWSZ wszPathFromRoot,
        LONG lAttributes,
        VSS_PWSZ wszExpose,
        VSS_PWSZ *pwszExposed);

    HRESULT (STDMETHODCALLTYPE *RevertToSnapshot)(
        IVssBackupComponents *This,
        VSS_ID SnapshotId,
        WINBOOL bForceDismount);

    HRESULT (STDMETHODCALLTYPE *QueryRevertStatus)(
        IVssBackupComponents *This,
        VSS_PWSZ pwszVolume,
        IVssAsync **ppAsync);

    END_INTERFACE
} IVssBackupComponentsVtbl;

interface IVssBackupComponents {
    CONST_VTBL IVssBackupComponentsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IVssBackupComponents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVssBackupComponents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVssBackupComponents_Release(This) (This)->lpVtbl->Release(This)
/*** IVssBackupComponents methods ***/
#define IVssBackupComponents_GetWriterComponentsCount(This,pcComponents) (This)->lpVtbl->GetWriterComponentsCount(This,pcComponents)
#define IVssBackupComponents_GetWriterComponents(This,iWriter,ppWriter) (This)->lpVtbl->GetWriterComponents(This,iWriter,ppWriter)
#define IVssBackupComponents_InitializeForBackup(This,bstrXML) (This)->lpVtbl->InitializeForBackup(This,bstrXML)
#define IVssBackupComponents_SetBackupState(This,bSelectComponents,bBackupBootableSystemState,backupType,bPartialFileSupport) (This)->lpVtbl->SetBackupState(This,bSelectComponents,bBackupBootableSystemState,backupType,bPartialFileSupport)
#define IVssBackupComponents_InitializeForRestore(This,bstrXML) (This)->lpVtbl->InitializeForRestore(This,bstrXML)
#define IVssBackupComponents_SetRestoreState(This,restoreType) (This)->lpVtbl->SetRestoreState(This,restoreType)
#define IVssBackupComponents_GatherWriterMetadata(This,pAsync) (This)->lpVtbl->GatherWriterMetadata(This,pAsync)
#define IVssBackupComponents_GetWriterMetadataCount(This,pcWriters) (This)->lpVtbl->GetWriterMetadataCount(This,pcWriters)
#define IVssBackupComponents_GetWriterMetadata(This,iWriter,pidInstance,ppMetadata) (This)->lpVtbl->GetWriterMetadata(This,iWriter,pidInstance,ppMetadata)
#define IVssBackupComponents_FreeWriterMetadata(This) (This)->lpVtbl->FreeWriterMetadata(This)
#define IVssBackupComponents_AddComponent(This,instanceId,writerId,ct,wszLogicalPath,wszComponentName) (This)->lpVtbl->AddComponent(This,instanceId,writerId,ct,wszLogicalPath,wszComponentName)
#define IVssBackupComponents_PrepareForBackup(This,ppAsync) (This)->lpVtbl->PrepareForBackup(This,ppAsync)
#define IVssBackupComponents_AbortBackup(This) (This)->lpVtbl->AbortBackup(This)
#define IVssBackupComponents_GatherWriterStatus(This,pAsync) (This)->lpVtbl->GatherWriterStatus(This,pAsync)
#define IVssBackupComponents_GetWriterStatusCount(This,pcWriters) (This)->lpVtbl->GetWriterStatusCount(This,pcWriters)
#define IVssBackupComponents_FreeWriterStatus(This) (This)->lpVtbl->FreeWriterStatus(This)
#define IVssBackupComponents_GetWriterStatus(This,iWriter,pidInstance,pidWriter,pbstrWriter,pnStatus,phResultFailure) (This)->lpVtbl->GetWriterStatus(This,iWriter,pidInstance,pidWriter,pbstrWriter,pnStatus,phResultFailure)
#define IVssBackupComponents_SetBackupSucceeded(This,instanceId,writerId,ct,wszLogicalPath,wszComponentName,bSucceded) (This)->lpVtbl->SetBackupSucceeded(This,instanceId,writerId,ct,wszLogicalPath,wszComponentName,bSucceded)
#define IVssBackupComponents_SetBackupOptions(This,writerId,ct,wszLogicalPath,wszComponentName,wszBackupOptions) (This)->lpVtbl->SetBackupOptions(This,writerId,ct,wszLogicalPath,wszComponentName,wszBackupOptions)
#define IVssBackupComponents_SetSelectedForRestore(This,writerId,ct,wszLogicalPath,wszComponentName,bSelectedForRestore) (This)->lpVtbl->SetSelectedForRestore(This,writerId,ct,wszLogicalPath,wszComponentName,bSelectedForRestore)
#define IVssBackupComponents_SetRestoreOptions(This,writerId,ct,wszLogicalPath,wszComponentName,wszRestoreOptions) (This)->lpVtbl->SetRestoreOptions(This,writerId,ct,wszLogicalPath,wszComponentName,wszRestoreOptions)
#define IVssBackupComponents_SetAdditionalRestores(This,writerId,ct,wszLogicalPath,wszComponentName,bAdditionalRestores) (This)->lpVtbl->SetAdditionalRestores(This,writerId,ct,wszLogicalPath,wszComponentName,bAdditionalRestores)
#define IVssBackupComponents_SetPreviousBackupStamp(This,writerId,ct,wszLogicalPath,wszComponentName,wszPreviousBackupStamp) (This)->lpVtbl->SetPreviousBackupStamp(This,writerId,ct,wszLogicalPath,wszComponentName,wszPreviousBackupStamp)
#define IVssBackupComponents_SaveAsXML(This,pbstrXML) (This)->lpVtbl->SaveAsXML(This,pbstrXML)
#define IVssBackupComponents_BackupComplete(This,ppAsync) (This)->lpVtbl->BackupComplete(This,ppAsync)
#define IVssBackupComponents_AddAlternativeLocationMapping(This,writerId,componentType,wszLogicalPath,wszComponentName,wszPath,wszFilespec,bRecursive,wszDestination) (This)->lpVtbl->AddAlternativeLocationMapping(This,writerId,componentType,wszLogicalPath,wszComponentName,wszPath,wszFilespec,bRecursive,wszDestination)
#define IVssBackupComponents_AddRestoreSubcomponent(This,writerId,componentType,wszLogicalPath,wszComponentName,wszSubComponentLogicalPath,wszSubComponentName,bRepair) (This)->lpVtbl->AddRestoreSubcomponent(This,writerId,componentType,wszLogicalPath,wszComponentName,wszSubComponentLogicalPath,wszSubComponentName,bRepair)
#define IVssBackupComponents_SetFileRestoreStatus(This,writerId,ct,wszLogicalPath,wszComponentName,status) (This)->lpVtbl->SetFileRestoreStatus(This,writerId,ct,wszLogicalPath,wszComponentName,status)
#define IVssBackupComponents_AddNewTarget(This,writerId,ct,wszLogicalPath,wszComponentName,wszPath,wszFileName,bRecursive,wszAlternatePath) (This)->lpVtbl->AddNewTarget(This,writerId,ct,wszLogicalPath,wszComponentName,wszPath,wszFileName,bRecursive,wszAlternatePath)
#define IVssBackupComponents_SetRangesFilePath(This,writerId,ct,wszLogicalPath,wszComponentName,iPartialFile,wszRangesFile) (This)->lpVtbl->SetRangesFilePath(This,writerId,ct,wszLogicalPath,wszComponentName,iPartialFile,wszRangesFile)
#define IVssBackupComponents_PreRestore(This,ppAsync) (This)->lpVtbl->PreRestore(This,ppAsync)
#define IVssBackupComponents_PostRestore(This,ppAsync) (This)->lpVtbl->PostRestore(This,ppAsync)
#define IVssBackupComponents_SetContext(This,lContext) (This)->lpVtbl->SetContext(This,lContext)
#define IVssBackupComponents_StartSnapshotSet(This,pSnapshotSetId) (This)->lpVtbl->StartSnapshotSet(This,pSnapshotSetId)
#define IVssBackupComponents_AddToSnapshotSet(This,pwszVolumeName,ProviderId,pidSnapshot) (This)->lpVtbl->AddToSnapshotSet(This,pwszVolumeName,ProviderId,pidSnapshot)
#define IVssBackupComponents_DoSnapshotSet(This,ppAsync) (This)->lpVtbl->DoSnapshotSet(This,ppAsync)
#define IVssBackupComponents_DeleteSnapshots(This,SourceObjectId,eSourceObjectType,bForceDelete,plDeletedSnapshots,pNondeletedSnapshotID) (This)->lpVtbl->DeleteSnapshots(This,SourceObjectId,eSourceObjectType,bForceDelete,plDeletedSnapshots,pNondeletedSnapshotID)
#define IVssBackupComponents_ImportSnapshots(This,ppAsync) (This)->lpVtbl->ImportSnapshots(This,ppAsync)
#define IVssBackupComponents_BreakSnapshotSet(This,SnapshotSetId) (This)->lpVtbl->BreakSnapshotSet(This,SnapshotSetId)
#define IVssBackupComponents_GetSnapshotProperties(This,SnapshotId,pProp) (This)->lpVtbl->GetSnapshotProperties(This,SnapshotId,pProp)
#define IVssBackupComponents_Query(This,QueriedObjectId,eQueriedObjectType,eReturnedObjectsType,ppEnum) (This)->lpVtbl->Query(This,QueriedObjectId,eQueriedObjectType,eReturnedObjectsType,ppEnum)
#define IVssBackupComponents_IsVolumeSupported(This,ProviderId,pwszVolumeName,pbSupportedByThisProvider) (This)->lpVtbl->IsVolumeSupported(This,ProviderId,pwszVolumeName,pbSupportedByThisProvider)
#define IVssBackupComponents_DisableWriterClasses(This,rgWriterClassId,cClassId) (This)->lpVtbl->DisableWriterClasses(This,rgWriterClassId,cClassId)
#define IVssBackupComponents_EnableWriterClasses(This,rgWriterClassId,cClassId) (This)->lpVtbl->EnableWriterClasses(This,rgWriterClassId,cClassId)
#define IVssBackupComponents_DisableWriterInstances(This,rgWriterInstanceId,cInstanceId) (This)->lpVtbl->DisableWriterInstances(This,rgWriterInstanceId,cInstanceId)
#define IVssBackupComponents_ExposeSnapshot(This,SnapshotId,wszPathFromRoot,lAttributes,wszExpose,pwszExposed) (This)->lpVtbl->ExposeSnapshot(This,SnapshotId,wszPathFromRoot,lAttributes,wszExpose,pwszExposed)
#define IVssBackupComponents_RevertToSnapshot(This,SnapshotId,bForceDismount) (This)->lpVtbl->RevertToSnapshot(This,SnapshotId,bForceDismount)
#define IVssBackupComponents_QueryRevertStatus(This,pwszVolume,ppAsync) (This)->lpVtbl->QueryRevertStatus(This,pwszVolume,ppAsync)
#else
/*** IUnknown methods ***/
static inline HRESULT IVssBackupComponents_QueryInterface(IVssBackupComponents* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IVssBackupComponents_AddRef(IVssBackupComponents* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IVssBackupComponents_Release(IVssBackupComponents* This) {
    return This->lpVtbl->Release(This);
}
/*** IVssBackupComponents methods ***/
static inline HRESULT IVssBackupComponents_GetWriterComponentsCount(IVssBackupComponents* This,UINT *pcComponents) {
    return This->lpVtbl->GetWriterComponentsCount(This,pcComponents);
}
static inline HRESULT IVssBackupComponents_GetWriterComponents(IVssBackupComponents* This,UINT iWriter,IVssWriterComponentsExt **ppWriter) {
    return This->lpVtbl->GetWriterComponents(This,iWriter,ppWriter);
}
static inline HRESULT IVssBackupComponents_InitializeForBackup(IVssBackupComponents* This,BSTR bstrXML) {
    return This->lpVtbl->InitializeForBackup(This,bstrXML);
}
static inline HRESULT IVssBackupComponents_SetBackupState(IVssBackupComponents* This,boolean bSelectComponents,boolean bBackupBootableSystemState,VSS_BACKUP_TYPE backupType,boolean bPartialFileSupport) {
    return This->lpVtbl->SetBackupState(This,bSelectComponents,bBackupBootableSystemState,backupType,bPartialFileSupport);
}
static inline HRESULT IVssBackupComponents_InitializeForRestore(IVssBackupComponents* This,BSTR bstrXML) {
    return This->lpVtbl->InitializeForRestore(This,bstrXML);
}
static inline HRESULT IVssBackupComponents_SetRestoreState(IVssBackupComponents* This,VSS_RESTORE_TYPE restoreType) {
    return This->lpVtbl->SetRestoreState(This,restoreType);
}
static inline HRESULT IVssBackupComponents_GatherWriterMetadata(IVssBackupComponents* This,IVssAsync **pAsync) {
    return This->lpVtbl->GatherWriterMetadata(This,pAsync);
}
static inline HRESULT IVssBackupComponents_GetWriterMetadataCount(IVssBackupComponents* This,UINT *pcWriters) {
    return This->lpVtbl->GetWriterMetadataCount(This,pcWriters);
}
static inline HRESULT IVssBackupComponents_GetWriterMetadata(IVssBackupComponents* This,UINT iWriter,VSS_ID *pidInstance,IVssExamineWriterMetadata **ppMetadata) {
    return This->lpVtbl->GetWriterMetadata(This,iWriter,pidInstance,ppMetadata);
}
static inline HRESULT IVssBackupComponents_FreeWriterMetadata(IVssBackupComponents* This) {
    return This->lpVtbl->FreeWriterMetadata(This);
}
static inline HRESULT IVssBackupComponents_AddComponent(IVssBackupComponents* This,VSS_ID instanceId,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName) {
    return This->lpVtbl->AddComponent(This,instanceId,writerId,ct,wszLogicalPath,wszComponentName);
}
static inline HRESULT IVssBackupComponents_PrepareForBackup(IVssBackupComponents* This,IVssAsync **ppAsync) {
    return This->lpVtbl->PrepareForBackup(This,ppAsync);
}
static inline HRESULT IVssBackupComponents_AbortBackup(IVssBackupComponents* This) {
    return This->lpVtbl->AbortBackup(This);
}
static inline HRESULT IVssBackupComponents_GatherWriterStatus(IVssBackupComponents* This,IVssAsync **pAsync) {
    return This->lpVtbl->GatherWriterStatus(This,pAsync);
}
static inline HRESULT IVssBackupComponents_GetWriterStatusCount(IVssBackupComponents* This,UINT *pcWriters) {
    return This->lpVtbl->GetWriterStatusCount(This,pcWriters);
}
static inline HRESULT IVssBackupComponents_FreeWriterStatus(IVssBackupComponents* This) {
    return This->lpVtbl->FreeWriterStatus(This);
}
static inline HRESULT IVssBackupComponents_GetWriterStatus(IVssBackupComponents* This,UINT iWriter,VSS_ID *pidInstance,VSS_ID *pidWriter,BSTR *pbstrWriter,VSS_WRITER_STATE *pnStatus,HRESULT *phResultFailure) {
    return This->lpVtbl->GetWriterStatus(This,iWriter,pidInstance,pidWriter,pbstrWriter,pnStatus,phResultFailure);
}
static inline HRESULT IVssBackupComponents_SetBackupSucceeded(IVssBackupComponents* This,VSS_ID instanceId,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,boolean bSucceded) {
    return This->lpVtbl->SetBackupSucceeded(This,instanceId,writerId,ct,wszLogicalPath,wszComponentName,bSucceded);
}
static inline HRESULT IVssBackupComponents_SetBackupOptions(IVssBackupComponents* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszBackupOptions) {
    return This->lpVtbl->SetBackupOptions(This,writerId,ct,wszLogicalPath,wszComponentName,wszBackupOptions);
}
static inline HRESULT IVssBackupComponents_SetSelectedForRestore(IVssBackupComponents* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,boolean bSelectedForRestore) {
    return This->lpVtbl->SetSelectedForRestore(This,writerId,ct,wszLogicalPath,wszComponentName,bSelectedForRestore);
}
static inline HRESULT IVssBackupComponents_SetRestoreOptions(IVssBackupComponents* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszRestoreOptions) {
    return This->lpVtbl->SetRestoreOptions(This,writerId,ct,wszLogicalPath,wszComponentName,wszRestoreOptions);
}
static inline HRESULT IVssBackupComponents_SetAdditionalRestores(IVssBackupComponents* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,boolean bAdditionalRestores) {
    return This->lpVtbl->SetAdditionalRestores(This,writerId,ct,wszLogicalPath,wszComponentName,bAdditionalRestores);
}
static inline HRESULT IVssBackupComponents_SetPreviousBackupStamp(IVssBackupComponents* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszPreviousBackupStamp) {
    return This->lpVtbl->SetPreviousBackupStamp(This,writerId,ct,wszLogicalPath,wszComponentName,wszPreviousBackupStamp);
}
static inline HRESULT IVssBackupComponents_SaveAsXML(IVssBackupComponents* This,BSTR *pbstrXML) {
    return This->lpVtbl->SaveAsXML(This,pbstrXML);
}
static inline HRESULT IVssBackupComponents_BackupComplete(IVssBackupComponents* This,IVssAsync **ppAsync) {
    return This->lpVtbl->BackupComplete(This,ppAsync);
}
static inline HRESULT IVssBackupComponents_AddAlternativeLocationMapping(IVssBackupComponents* This,VSS_ID writerId,VSS_COMPONENT_TYPE componentType,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszPath,LPCWSTR wszFilespec,boolean bRecursive,LPCWSTR wszDestination) {
    return This->lpVtbl->AddAlternativeLocationMapping(This,writerId,componentType,wszLogicalPath,wszComponentName,wszPath,wszFilespec,bRecursive,wszDestination);
}
static inline HRESULT IVssBackupComponents_AddRestoreSubcomponent(IVssBackupComponents* This,VSS_ID writerId,VSS_COMPONENT_TYPE componentType,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszSubComponentLogicalPath,LPCWSTR wszSubComponentName,boolean bRepair) {
    return This->lpVtbl->AddRestoreSubcomponent(This,writerId,componentType,wszLogicalPath,wszComponentName,wszSubComponentLogicalPath,wszSubComponentName,bRepair);
}
static inline HRESULT IVssBackupComponents_SetFileRestoreStatus(IVssBackupComponents* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,VSS_FILE_RESTORE_STATUS status) {
    return This->lpVtbl->SetFileRestoreStatus(This,writerId,ct,wszLogicalPath,wszComponentName,status);
}
static inline HRESULT IVssBackupComponents_AddNewTarget(IVssBackupComponents* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszPath,LPCWSTR wszFileName,boolean bRecursive,LPCWSTR wszAlternatePath) {
    return This->lpVtbl->AddNewTarget(This,writerId,ct,wszLogicalPath,wszComponentName,wszPath,wszFileName,bRecursive,wszAlternatePath);
}
static inline HRESULT IVssBackupComponents_SetRangesFilePath(IVssBackupComponents* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,UINT iPartialFile,LPCWSTR wszRangesFile) {
    return This->lpVtbl->SetRangesFilePath(This,writerId,ct,wszLogicalPath,wszComponentName,iPartialFile,wszRangesFile);
}
static inline HRESULT IVssBackupComponents_PreRestore(IVssBackupComponents* This,IVssAsync **ppAsync) {
    return This->lpVtbl->PreRestore(This,ppAsync);
}
static inline HRESULT IVssBackupComponents_PostRestore(IVssBackupComponents* This,IVssAsync **ppAsync) {
    return This->lpVtbl->PostRestore(This,ppAsync);
}
static inline HRESULT IVssBackupComponents_SetContext(IVssBackupComponents* This,LONG lContext) {
    return This->lpVtbl->SetContext(This,lContext);
}
static inline HRESULT IVssBackupComponents_StartSnapshotSet(IVssBackupComponents* This,VSS_ID *pSnapshotSetId) {
    return This->lpVtbl->StartSnapshotSet(This,pSnapshotSetId);
}
static inline HRESULT IVssBackupComponents_AddToSnapshotSet(IVssBackupComponents* This,VSS_PWSZ pwszVolumeName,VSS_ID ProviderId,VSS_ID *pidSnapshot) {
    return This->lpVtbl->AddToSnapshotSet(This,pwszVolumeName,ProviderId,pidSnapshot);
}
static inline HRESULT IVssBackupComponents_DoSnapshotSet(IVssBackupComponents* This,IVssAsync **ppAsync) {
    return This->lpVtbl->DoSnapshotSet(This,ppAsync);
}
static inline HRESULT IVssBackupComponents_DeleteSnapshots(IVssBackupComponents* This,VSS_ID SourceObjectId,VSS_OBJECT_TYPE eSourceObjectType,WINBOOL bForceDelete,LONG *plDeletedSnapshots,VSS_ID *pNondeletedSnapshotID) {
    return This->lpVtbl->DeleteSnapshots(This,SourceObjectId,eSourceObjectType,bForceDelete,plDeletedSnapshots,pNondeletedSnapshotID);
}
static inline HRESULT IVssBackupComponents_ImportSnapshots(IVssBackupComponents* This,IVssAsync **ppAsync) {
    return This->lpVtbl->ImportSnapshots(This,ppAsync);
}
static inline HRESULT IVssBackupComponents_BreakSnapshotSet(IVssBackupComponents* This,VSS_ID SnapshotSetId) {
    return This->lpVtbl->BreakSnapshotSet(This,SnapshotSetId);
}
static inline HRESULT IVssBackupComponents_GetSnapshotProperties(IVssBackupComponents* This,VSS_ID SnapshotId,VSS_SNAPSHOT_PROP *pProp) {
    return This->lpVtbl->GetSnapshotProperties(This,SnapshotId,pProp);
}
static inline HRESULT IVssBackupComponents_Query(IVssBackupComponents* This,VSS_ID QueriedObjectId,VSS_OBJECT_TYPE eQueriedObjectType,VSS_OBJECT_TYPE eReturnedObjectsType,IVssEnumObject **ppEnum) {
    return This->lpVtbl->Query(This,QueriedObjectId,eQueriedObjectType,eReturnedObjectsType,ppEnum);
}
static inline HRESULT IVssBackupComponents_IsVolumeSupported(IVssBackupComponents* This,VSS_ID ProviderId,VSS_PWSZ pwszVolumeName,WINBOOL *pbSupportedByThisProvider) {
    return This->lpVtbl->IsVolumeSupported(This,ProviderId,pwszVolumeName,pbSupportedByThisProvider);
}
static inline HRESULT IVssBackupComponents_DisableWriterClasses(IVssBackupComponents* This,const VSS_ID *rgWriterClassId,UINT cClassId) {
    return This->lpVtbl->DisableWriterClasses(This,rgWriterClassId,cClassId);
}
static inline HRESULT IVssBackupComponents_EnableWriterClasses(IVssBackupComponents* This,const VSS_ID *rgWriterClassId,UINT cClassId) {
    return This->lpVtbl->EnableWriterClasses(This,rgWriterClassId,cClassId);
}
static inline HRESULT IVssBackupComponents_DisableWriterInstances(IVssBackupComponents* This,const VSS_ID *rgWriterInstanceId,UINT cInstanceId) {
    return This->lpVtbl->DisableWriterInstances(This,rgWriterInstanceId,cInstanceId);
}
static inline HRESULT IVssBackupComponents_ExposeSnapshot(IVssBackupComponents* This,VSS_ID SnapshotId,VSS_PWSZ wszPathFromRoot,LONG lAttributes,VSS_PWSZ wszExpose,VSS_PWSZ *pwszExposed) {
    return This->lpVtbl->ExposeSnapshot(This,SnapshotId,wszPathFromRoot,lAttributes,wszExpose,pwszExposed);
}
static inline HRESULT IVssBackupComponents_RevertToSnapshot(IVssBackupComponents* This,VSS_ID SnapshotId,WINBOOL bForceDismount) {
    return This->lpVtbl->RevertToSnapshot(This,SnapshotId,bForceDismount);
}
static inline HRESULT IVssBackupComponents_QueryRevertStatus(IVssBackupComponents* This,VSS_PWSZ pwszVolume,IVssAsync **ppAsync) {
    return This->lpVtbl->QueryRevertStatus(This,pwszVolume,ppAsync);
}
#endif
#endif

#endif


#endif  /* __IVssBackupComponents_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IVssBackupComponentsEx interface
 */
#ifndef __IVssBackupComponentsEx_INTERFACE_DEFINED__
#define __IVssBackupComponentsEx_INTERFACE_DEFINED__

DEFINE_GUID(IID_IVssBackupComponentsEx, 0x963f03ad, 0x9e4c, 0x4a34, 0xac,0x15, 0xe4,0xb6,0x17,0x4e,0x50,0x36);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("963f03ad-9e4c-4a34-ac15-e4b6174e5036")
IVssBackupComponentsEx : public IVssBackupComponents
{
    virtual HRESULT STDMETHODCALLTYPE GetWriterMetadataEx(
        UINT iWriter,
        VSS_ID *pidInstance,
        IVssExamineWriterMetadataEx **ppMetadata) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetSelectedForRestoreEx(
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        boolean bSelectedForRestore,
        VSS_ID instanceId) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IVssBackupComponentsEx, 0x963f03ad, 0x9e4c, 0x4a34, 0xac,0x15, 0xe4,0xb6,0x17,0x4e,0x50,0x36)
#endif
#else
typedef struct IVssBackupComponentsExVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IVssBackupComponentsEx *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IVssBackupComponentsEx *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IVssBackupComponentsEx *This);

    /*** IVssBackupComponents methods ***/
    HRESULT (STDMETHODCALLTYPE *GetWriterComponentsCount)(
        IVssBackupComponentsEx *This,
        UINT *pcComponents);

    HRESULT (STDMETHODCALLTYPE *GetWriterComponents)(
        IVssBackupComponentsEx *This,
        UINT iWriter,
        IVssWriterComponentsExt **ppWriter);

    HRESULT (STDMETHODCALLTYPE *InitializeForBackup)(
        IVssBackupComponentsEx *This,
        BSTR bstrXML);

    HRESULT (STDMETHODCALLTYPE *SetBackupState)(
        IVssBackupComponentsEx *This,
        boolean bSelectComponents,
        boolean bBackupBootableSystemState,
        VSS_BACKUP_TYPE backupType,
        boolean bPartialFileSupport);

    HRESULT (STDMETHODCALLTYPE *InitializeForRestore)(
        IVssBackupComponentsEx *This,
        BSTR bstrXML);

    HRESULT (STDMETHODCALLTYPE *SetRestoreState)(
        IVssBackupComponentsEx *This,
        VSS_RESTORE_TYPE restoreType);

    HRESULT (STDMETHODCALLTYPE *GatherWriterMetadata)(
        IVssBackupComponentsEx *This,
        IVssAsync **pAsync);

    HRESULT (STDMETHODCALLTYPE *GetWriterMetadataCount)(
        IVssBackupComponentsEx *This,
        UINT *pcWriters);

    HRESULT (STDMETHODCALLTYPE *GetWriterMetadata)(
        IVssBackupComponentsEx *This,
        UINT iWriter,
        VSS_ID *pidInstance,
        IVssExamineWriterMetadata **ppMetadata);

    HRESULT (STDMETHODCALLTYPE *FreeWriterMetadata)(
        IVssBackupComponentsEx *This);

    HRESULT (STDMETHODCALLTYPE *AddComponent)(
        IVssBackupComponentsEx *This,
        VSS_ID instanceId,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName);

    HRESULT (STDMETHODCALLTYPE *PrepareForBackup)(
        IVssBackupComponentsEx *This,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *AbortBackup)(
        IVssBackupComponentsEx *This);

    HRESULT (STDMETHODCALLTYPE *GatherWriterStatus)(
        IVssBackupComponentsEx *This,
        IVssAsync **pAsync);

    HRESULT (STDMETHODCALLTYPE *GetWriterStatusCount)(
        IVssBackupComponentsEx *This,
        UINT *pcWriters);

    HRESULT (STDMETHODCALLTYPE *FreeWriterStatus)(
        IVssBackupComponentsEx *This);

    HRESULT (STDMETHODCALLTYPE *GetWriterStatus)(
        IVssBackupComponentsEx *This,
        UINT iWriter,
        VSS_ID *pidInstance,
        VSS_ID *pidWriter,
        BSTR *pbstrWriter,
        VSS_WRITER_STATE *pnStatus,
        HRESULT *phResultFailure);

    HRESULT (STDMETHODCALLTYPE *SetBackupSucceeded)(
        IVssBackupComponentsEx *This,
        VSS_ID instanceId,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        boolean bSucceded);

    HRESULT (STDMETHODCALLTYPE *SetBackupOptions)(
        IVssBackupComponentsEx *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszBackupOptions);

    HRESULT (STDMETHODCALLTYPE *SetSelectedForRestore)(
        IVssBackupComponentsEx *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        boolean bSelectedForRestore);

    HRESULT (STDMETHODCALLTYPE *SetRestoreOptions)(
        IVssBackupComponentsEx *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszRestoreOptions);

    HRESULT (STDMETHODCALLTYPE *SetAdditionalRestores)(
        IVssBackupComponentsEx *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        boolean bAdditionalRestores);

    HRESULT (STDMETHODCALLTYPE *SetPreviousBackupStamp)(
        IVssBackupComponentsEx *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszPreviousBackupStamp);

    HRESULT (STDMETHODCALLTYPE *SaveAsXML)(
        IVssBackupComponentsEx *This,
        BSTR *pbstrXML);

    HRESULT (STDMETHODCALLTYPE *BackupComplete)(
        IVssBackupComponentsEx *This,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *AddAlternativeLocationMapping)(
        IVssBackupComponentsEx *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE componentType,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszPath,
        LPCWSTR wszFilespec,
        boolean bRecursive,
        LPCWSTR wszDestination);

    HRESULT (STDMETHODCALLTYPE *AddRestoreSubcomponent)(
        IVssBackupComponentsEx *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE componentType,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszSubComponentLogicalPath,
        LPCWSTR wszSubComponentName,
        boolean bRepair);

    HRESULT (STDMETHODCALLTYPE *SetFileRestoreStatus)(
        IVssBackupComponentsEx *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        VSS_FILE_RESTORE_STATUS status);

    HRESULT (STDMETHODCALLTYPE *AddNewTarget)(
        IVssBackupComponentsEx *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszPath,
        LPCWSTR wszFileName,
        boolean bRecursive,
        LPCWSTR wszAlternatePath);

    HRESULT (STDMETHODCALLTYPE *SetRangesFilePath)(
        IVssBackupComponentsEx *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        UINT iPartialFile,
        LPCWSTR wszRangesFile);

    HRESULT (STDMETHODCALLTYPE *PreRestore)(
        IVssBackupComponentsEx *This,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *PostRestore)(
        IVssBackupComponentsEx *This,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *SetContext)(
        IVssBackupComponentsEx *This,
        LONG lContext);

    HRESULT (STDMETHODCALLTYPE *StartSnapshotSet)(
        IVssBackupComponentsEx *This,
        VSS_ID *pSnapshotSetId);

    HRESULT (STDMETHODCALLTYPE *AddToSnapshotSet)(
        IVssBackupComponentsEx *This,
        VSS_PWSZ pwszVolumeName,
        VSS_ID ProviderId,
        VSS_ID *pidSnapshot);

    HRESULT (STDMETHODCALLTYPE *DoSnapshotSet)(
        IVssBackupComponentsEx *This,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *DeleteSnapshots)(
        IVssBackupComponentsEx *This,
        VSS_ID SourceObjectId,
        VSS_OBJECT_TYPE eSourceObjectType,
        WINBOOL bForceDelete,
        LONG *plDeletedSnapshots,
        VSS_ID *pNondeletedSnapshotID);

    HRESULT (STDMETHODCALLTYPE *ImportSnapshots)(
        IVssBackupComponentsEx *This,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *BreakSnapshotSet)(
        IVssBackupComponentsEx *This,
        VSS_ID SnapshotSetId);

    HRESULT (STDMETHODCALLTYPE *GetSnapshotProperties)(
        IVssBackupComponentsEx *This,
        VSS_ID SnapshotId,
        VSS_SNAPSHOT_PROP *pProp);

    HRESULT (STDMETHODCALLTYPE *Query)(
        IVssBackupComponentsEx *This,
        VSS_ID QueriedObjectId,
        VSS_OBJECT_TYPE eQueriedObjectType,
        VSS_OBJECT_TYPE eReturnedObjectsType,
        IVssEnumObject **ppEnum);

    HRESULT (STDMETHODCALLTYPE *IsVolumeSupported)(
        IVssBackupComponentsEx *This,
        VSS_ID ProviderId,
        VSS_PWSZ pwszVolumeName,
        WINBOOL *pbSupportedByThisProvider);

    HRESULT (STDMETHODCALLTYPE *DisableWriterClasses)(
        IVssBackupComponentsEx *This,
        const VSS_ID *rgWriterClassId,
        UINT cClassId);

    HRESULT (STDMETHODCALLTYPE *EnableWriterClasses)(
        IVssBackupComponentsEx *This,
        const VSS_ID *rgWriterClassId,
        UINT cClassId);

    HRESULT (STDMETHODCALLTYPE *DisableWriterInstances)(
        IVssBackupComponentsEx *This,
        const VSS_ID *rgWriterInstanceId,
        UINT cInstanceId);

    HRESULT (STDMETHODCALLTYPE *ExposeSnapshot)(
        IVssBackupComponentsEx *This,
        VSS_ID SnapshotId,
        VSS_PWSZ wszPathFromRoot,
        LONG lAttributes,
        VSS_PWSZ wszExpose,
        VSS_PWSZ *pwszExposed);

    HRESULT (STDMETHODCALLTYPE *RevertToSnapshot)(
        IVssBackupComponentsEx *This,
        VSS_ID SnapshotId,
        WINBOOL bForceDismount);

    HRESULT (STDMETHODCALLTYPE *QueryRevertStatus)(
        IVssBackupComponentsEx *This,
        VSS_PWSZ pwszVolume,
        IVssAsync **ppAsync);

    /*** IVssBackupComponentsEx methods ***/
    HRESULT (STDMETHODCALLTYPE *GetWriterMetadataEx)(
        IVssBackupComponentsEx *This,
        UINT iWriter,
        VSS_ID *pidInstance,
        IVssExamineWriterMetadataEx **ppMetadata);

    HRESULT (STDMETHODCALLTYPE *SetSelectedForRestoreEx)(
        IVssBackupComponentsEx *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        boolean bSelectedForRestore,
        VSS_ID instanceId);

    END_INTERFACE
} IVssBackupComponentsExVtbl;

interface IVssBackupComponentsEx {
    CONST_VTBL IVssBackupComponentsExVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IVssBackupComponentsEx_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVssBackupComponentsEx_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVssBackupComponentsEx_Release(This) (This)->lpVtbl->Release(This)
/*** IVssBackupComponents methods ***/
#define IVssBackupComponentsEx_GetWriterComponentsCount(This,pcComponents) (This)->lpVtbl->GetWriterComponentsCount(This,pcComponents)
#define IVssBackupComponentsEx_GetWriterComponents(This,iWriter,ppWriter) (This)->lpVtbl->GetWriterComponents(This,iWriter,ppWriter)
#define IVssBackupComponentsEx_InitializeForBackup(This,bstrXML) (This)->lpVtbl->InitializeForBackup(This,bstrXML)
#define IVssBackupComponentsEx_SetBackupState(This,bSelectComponents,bBackupBootableSystemState,backupType,bPartialFileSupport) (This)->lpVtbl->SetBackupState(This,bSelectComponents,bBackupBootableSystemState,backupType,bPartialFileSupport)
#define IVssBackupComponentsEx_InitializeForRestore(This,bstrXML) (This)->lpVtbl->InitializeForRestore(This,bstrXML)
#define IVssBackupComponentsEx_SetRestoreState(This,restoreType) (This)->lpVtbl->SetRestoreState(This,restoreType)
#define IVssBackupComponentsEx_GatherWriterMetadata(This,pAsync) (This)->lpVtbl->GatherWriterMetadata(This,pAsync)
#define IVssBackupComponentsEx_GetWriterMetadataCount(This,pcWriters) (This)->lpVtbl->GetWriterMetadataCount(This,pcWriters)
#define IVssBackupComponentsEx_GetWriterMetadata(This,iWriter,pidInstance,ppMetadata) (This)->lpVtbl->GetWriterMetadata(This,iWriter,pidInstance,ppMetadata)
#define IVssBackupComponentsEx_FreeWriterMetadata(This) (This)->lpVtbl->FreeWriterMetadata(This)
#define IVssBackupComponentsEx_AddComponent(This,instanceId,writerId,ct,wszLogicalPath,wszComponentName) (This)->lpVtbl->AddComponent(This,instanceId,writerId,ct,wszLogicalPath,wszComponentName)
#define IVssBackupComponentsEx_PrepareForBackup(This,ppAsync) (This)->lpVtbl->PrepareForBackup(This,ppAsync)
#define IVssBackupComponentsEx_AbortBackup(This) (This)->lpVtbl->AbortBackup(This)
#define IVssBackupComponentsEx_GatherWriterStatus(This,pAsync) (This)->lpVtbl->GatherWriterStatus(This,pAsync)
#define IVssBackupComponentsEx_GetWriterStatusCount(This,pcWriters) (This)->lpVtbl->GetWriterStatusCount(This,pcWriters)
#define IVssBackupComponentsEx_FreeWriterStatus(This) (This)->lpVtbl->FreeWriterStatus(This)
#define IVssBackupComponentsEx_GetWriterStatus(This,iWriter,pidInstance,pidWriter,pbstrWriter,pnStatus,phResultFailure) (This)->lpVtbl->GetWriterStatus(This,iWriter,pidInstance,pidWriter,pbstrWriter,pnStatus,phResultFailure)
#define IVssBackupComponentsEx_SetBackupSucceeded(This,instanceId,writerId,ct,wszLogicalPath,wszComponentName,bSucceded) (This)->lpVtbl->SetBackupSucceeded(This,instanceId,writerId,ct,wszLogicalPath,wszComponentName,bSucceded)
#define IVssBackupComponentsEx_SetBackupOptions(This,writerId,ct,wszLogicalPath,wszComponentName,wszBackupOptions) (This)->lpVtbl->SetBackupOptions(This,writerId,ct,wszLogicalPath,wszComponentName,wszBackupOptions)
#define IVssBackupComponentsEx_SetSelectedForRestore(This,writerId,ct,wszLogicalPath,wszComponentName,bSelectedForRestore) (This)->lpVtbl->SetSelectedForRestore(This,writerId,ct,wszLogicalPath,wszComponentName,bSelectedForRestore)
#define IVssBackupComponentsEx_SetRestoreOptions(This,writerId,ct,wszLogicalPath,wszComponentName,wszRestoreOptions) (This)->lpVtbl->SetRestoreOptions(This,writerId,ct,wszLogicalPath,wszComponentName,wszRestoreOptions)
#define IVssBackupComponentsEx_SetAdditionalRestores(This,writerId,ct,wszLogicalPath,wszComponentName,bAdditionalRestores) (This)->lpVtbl->SetAdditionalRestores(This,writerId,ct,wszLogicalPath,wszComponentName,bAdditionalRestores)
#define IVssBackupComponentsEx_SetPreviousBackupStamp(This,writerId,ct,wszLogicalPath,wszComponentName,wszPreviousBackupStamp) (This)->lpVtbl->SetPreviousBackupStamp(This,writerId,ct,wszLogicalPath,wszComponentName,wszPreviousBackupStamp)
#define IVssBackupComponentsEx_SaveAsXML(This,pbstrXML) (This)->lpVtbl->SaveAsXML(This,pbstrXML)
#define IVssBackupComponentsEx_BackupComplete(This,ppAsync) (This)->lpVtbl->BackupComplete(This,ppAsync)
#define IVssBackupComponentsEx_AddAlternativeLocationMapping(This,writerId,componentType,wszLogicalPath,wszComponentName,wszPath,wszFilespec,bRecursive,wszDestination) (This)->lpVtbl->AddAlternativeLocationMapping(This,writerId,componentType,wszLogicalPath,wszComponentName,wszPath,wszFilespec,bRecursive,wszDestination)
#define IVssBackupComponentsEx_AddRestoreSubcomponent(This,writerId,componentType,wszLogicalPath,wszComponentName,wszSubComponentLogicalPath,wszSubComponentName,bRepair) (This)->lpVtbl->AddRestoreSubcomponent(This,writerId,componentType,wszLogicalPath,wszComponentName,wszSubComponentLogicalPath,wszSubComponentName,bRepair)
#define IVssBackupComponentsEx_SetFileRestoreStatus(This,writerId,ct,wszLogicalPath,wszComponentName,status) (This)->lpVtbl->SetFileRestoreStatus(This,writerId,ct,wszLogicalPath,wszComponentName,status)
#define IVssBackupComponentsEx_AddNewTarget(This,writerId,ct,wszLogicalPath,wszComponentName,wszPath,wszFileName,bRecursive,wszAlternatePath) (This)->lpVtbl->AddNewTarget(This,writerId,ct,wszLogicalPath,wszComponentName,wszPath,wszFileName,bRecursive,wszAlternatePath)
#define IVssBackupComponentsEx_SetRangesFilePath(This,writerId,ct,wszLogicalPath,wszComponentName,iPartialFile,wszRangesFile) (This)->lpVtbl->SetRangesFilePath(This,writerId,ct,wszLogicalPath,wszComponentName,iPartialFile,wszRangesFile)
#define IVssBackupComponentsEx_PreRestore(This,ppAsync) (This)->lpVtbl->PreRestore(This,ppAsync)
#define IVssBackupComponentsEx_PostRestore(This,ppAsync) (This)->lpVtbl->PostRestore(This,ppAsync)
#define IVssBackupComponentsEx_SetContext(This,lContext) (This)->lpVtbl->SetContext(This,lContext)
#define IVssBackupComponentsEx_StartSnapshotSet(This,pSnapshotSetId) (This)->lpVtbl->StartSnapshotSet(This,pSnapshotSetId)
#define IVssBackupComponentsEx_AddToSnapshotSet(This,pwszVolumeName,ProviderId,pidSnapshot) (This)->lpVtbl->AddToSnapshotSet(This,pwszVolumeName,ProviderId,pidSnapshot)
#define IVssBackupComponentsEx_DoSnapshotSet(This,ppAsync) (This)->lpVtbl->DoSnapshotSet(This,ppAsync)
#define IVssBackupComponentsEx_DeleteSnapshots(This,SourceObjectId,eSourceObjectType,bForceDelete,plDeletedSnapshots,pNondeletedSnapshotID) (This)->lpVtbl->DeleteSnapshots(This,SourceObjectId,eSourceObjectType,bForceDelete,plDeletedSnapshots,pNondeletedSnapshotID)
#define IVssBackupComponentsEx_ImportSnapshots(This,ppAsync) (This)->lpVtbl->ImportSnapshots(This,ppAsync)
#define IVssBackupComponentsEx_BreakSnapshotSet(This,SnapshotSetId) (This)->lpVtbl->BreakSnapshotSet(This,SnapshotSetId)
#define IVssBackupComponentsEx_GetSnapshotProperties(This,SnapshotId,pProp) (This)->lpVtbl->GetSnapshotProperties(This,SnapshotId,pProp)
#define IVssBackupComponentsEx_Query(This,QueriedObjectId,eQueriedObjectType,eReturnedObjectsType,ppEnum) (This)->lpVtbl->Query(This,QueriedObjectId,eQueriedObjectType,eReturnedObjectsType,ppEnum)
#define IVssBackupComponentsEx_IsVolumeSupported(This,ProviderId,pwszVolumeName,pbSupportedByThisProvider) (This)->lpVtbl->IsVolumeSupported(This,ProviderId,pwszVolumeName,pbSupportedByThisProvider)
#define IVssBackupComponentsEx_DisableWriterClasses(This,rgWriterClassId,cClassId) (This)->lpVtbl->DisableWriterClasses(This,rgWriterClassId,cClassId)
#define IVssBackupComponentsEx_EnableWriterClasses(This,rgWriterClassId,cClassId) (This)->lpVtbl->EnableWriterClasses(This,rgWriterClassId,cClassId)
#define IVssBackupComponentsEx_DisableWriterInstances(This,rgWriterInstanceId,cInstanceId) (This)->lpVtbl->DisableWriterInstances(This,rgWriterInstanceId,cInstanceId)
#define IVssBackupComponentsEx_ExposeSnapshot(This,SnapshotId,wszPathFromRoot,lAttributes,wszExpose,pwszExposed) (This)->lpVtbl->ExposeSnapshot(This,SnapshotId,wszPathFromRoot,lAttributes,wszExpose,pwszExposed)
#define IVssBackupComponentsEx_RevertToSnapshot(This,SnapshotId,bForceDismount) (This)->lpVtbl->RevertToSnapshot(This,SnapshotId,bForceDismount)
#define IVssBackupComponentsEx_QueryRevertStatus(This,pwszVolume,ppAsync) (This)->lpVtbl->QueryRevertStatus(This,pwszVolume,ppAsync)
/*** IVssBackupComponentsEx methods ***/
#define IVssBackupComponentsEx_GetWriterMetadataEx(This,iWriter,pidInstance,ppMetadata) (This)->lpVtbl->GetWriterMetadataEx(This,iWriter,pidInstance,ppMetadata)
#define IVssBackupComponentsEx_SetSelectedForRestoreEx(This,writerId,ct,wszLogicalPath,wszComponentName,bSelectedForRestore,instanceId) (This)->lpVtbl->SetSelectedForRestoreEx(This,writerId,ct,wszLogicalPath,wszComponentName,bSelectedForRestore,instanceId)
#else
/*** IUnknown methods ***/
static inline HRESULT IVssBackupComponentsEx_QueryInterface(IVssBackupComponentsEx* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IVssBackupComponentsEx_AddRef(IVssBackupComponentsEx* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IVssBackupComponentsEx_Release(IVssBackupComponentsEx* This) {
    return This->lpVtbl->Release(This);
}
/*** IVssBackupComponents methods ***/
static inline HRESULT IVssBackupComponentsEx_GetWriterComponentsCount(IVssBackupComponentsEx* This,UINT *pcComponents) {
    return This->lpVtbl->GetWriterComponentsCount(This,pcComponents);
}
static inline HRESULT IVssBackupComponentsEx_GetWriterComponents(IVssBackupComponentsEx* This,UINT iWriter,IVssWriterComponentsExt **ppWriter) {
    return This->lpVtbl->GetWriterComponents(This,iWriter,ppWriter);
}
static inline HRESULT IVssBackupComponentsEx_InitializeForBackup(IVssBackupComponentsEx* This,BSTR bstrXML) {
    return This->lpVtbl->InitializeForBackup(This,bstrXML);
}
static inline HRESULT IVssBackupComponentsEx_SetBackupState(IVssBackupComponentsEx* This,boolean bSelectComponents,boolean bBackupBootableSystemState,VSS_BACKUP_TYPE backupType,boolean bPartialFileSupport) {
    return This->lpVtbl->SetBackupState(This,bSelectComponents,bBackupBootableSystemState,backupType,bPartialFileSupport);
}
static inline HRESULT IVssBackupComponentsEx_InitializeForRestore(IVssBackupComponentsEx* This,BSTR bstrXML) {
    return This->lpVtbl->InitializeForRestore(This,bstrXML);
}
static inline HRESULT IVssBackupComponentsEx_SetRestoreState(IVssBackupComponentsEx* This,VSS_RESTORE_TYPE restoreType) {
    return This->lpVtbl->SetRestoreState(This,restoreType);
}
static inline HRESULT IVssBackupComponentsEx_GatherWriterMetadata(IVssBackupComponentsEx* This,IVssAsync **pAsync) {
    return This->lpVtbl->GatherWriterMetadata(This,pAsync);
}
static inline HRESULT IVssBackupComponentsEx_GetWriterMetadataCount(IVssBackupComponentsEx* This,UINT *pcWriters) {
    return This->lpVtbl->GetWriterMetadataCount(This,pcWriters);
}
static inline HRESULT IVssBackupComponentsEx_GetWriterMetadata(IVssBackupComponentsEx* This,UINT iWriter,VSS_ID *pidInstance,IVssExamineWriterMetadata **ppMetadata) {
    return This->lpVtbl->GetWriterMetadata(This,iWriter,pidInstance,ppMetadata);
}
static inline HRESULT IVssBackupComponentsEx_FreeWriterMetadata(IVssBackupComponentsEx* This) {
    return This->lpVtbl->FreeWriterMetadata(This);
}
static inline HRESULT IVssBackupComponentsEx_AddComponent(IVssBackupComponentsEx* This,VSS_ID instanceId,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName) {
    return This->lpVtbl->AddComponent(This,instanceId,writerId,ct,wszLogicalPath,wszComponentName);
}
static inline HRESULT IVssBackupComponentsEx_PrepareForBackup(IVssBackupComponentsEx* This,IVssAsync **ppAsync) {
    return This->lpVtbl->PrepareForBackup(This,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx_AbortBackup(IVssBackupComponentsEx* This) {
    return This->lpVtbl->AbortBackup(This);
}
static inline HRESULT IVssBackupComponentsEx_GatherWriterStatus(IVssBackupComponentsEx* This,IVssAsync **pAsync) {
    return This->lpVtbl->GatherWriterStatus(This,pAsync);
}
static inline HRESULT IVssBackupComponentsEx_GetWriterStatusCount(IVssBackupComponentsEx* This,UINT *pcWriters) {
    return This->lpVtbl->GetWriterStatusCount(This,pcWriters);
}
static inline HRESULT IVssBackupComponentsEx_FreeWriterStatus(IVssBackupComponentsEx* This) {
    return This->lpVtbl->FreeWriterStatus(This);
}
static inline HRESULT IVssBackupComponentsEx_GetWriterStatus(IVssBackupComponentsEx* This,UINT iWriter,VSS_ID *pidInstance,VSS_ID *pidWriter,BSTR *pbstrWriter,VSS_WRITER_STATE *pnStatus,HRESULT *phResultFailure) {
    return This->lpVtbl->GetWriterStatus(This,iWriter,pidInstance,pidWriter,pbstrWriter,pnStatus,phResultFailure);
}
static inline HRESULT IVssBackupComponentsEx_SetBackupSucceeded(IVssBackupComponentsEx* This,VSS_ID instanceId,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,boolean bSucceded) {
    return This->lpVtbl->SetBackupSucceeded(This,instanceId,writerId,ct,wszLogicalPath,wszComponentName,bSucceded);
}
static inline HRESULT IVssBackupComponentsEx_SetBackupOptions(IVssBackupComponentsEx* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszBackupOptions) {
    return This->lpVtbl->SetBackupOptions(This,writerId,ct,wszLogicalPath,wszComponentName,wszBackupOptions);
}
static inline HRESULT IVssBackupComponentsEx_SetSelectedForRestore(IVssBackupComponentsEx* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,boolean bSelectedForRestore) {
    return This->lpVtbl->SetSelectedForRestore(This,writerId,ct,wszLogicalPath,wszComponentName,bSelectedForRestore);
}
static inline HRESULT IVssBackupComponentsEx_SetRestoreOptions(IVssBackupComponentsEx* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszRestoreOptions) {
    return This->lpVtbl->SetRestoreOptions(This,writerId,ct,wszLogicalPath,wszComponentName,wszRestoreOptions);
}
static inline HRESULT IVssBackupComponentsEx_SetAdditionalRestores(IVssBackupComponentsEx* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,boolean bAdditionalRestores) {
    return This->lpVtbl->SetAdditionalRestores(This,writerId,ct,wszLogicalPath,wszComponentName,bAdditionalRestores);
}
static inline HRESULT IVssBackupComponentsEx_SetPreviousBackupStamp(IVssBackupComponentsEx* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszPreviousBackupStamp) {
    return This->lpVtbl->SetPreviousBackupStamp(This,writerId,ct,wszLogicalPath,wszComponentName,wszPreviousBackupStamp);
}
static inline HRESULT IVssBackupComponentsEx_SaveAsXML(IVssBackupComponentsEx* This,BSTR *pbstrXML) {
    return This->lpVtbl->SaveAsXML(This,pbstrXML);
}
static inline HRESULT IVssBackupComponentsEx_BackupComplete(IVssBackupComponentsEx* This,IVssAsync **ppAsync) {
    return This->lpVtbl->BackupComplete(This,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx_AddAlternativeLocationMapping(IVssBackupComponentsEx* This,VSS_ID writerId,VSS_COMPONENT_TYPE componentType,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszPath,LPCWSTR wszFilespec,boolean bRecursive,LPCWSTR wszDestination) {
    return This->lpVtbl->AddAlternativeLocationMapping(This,writerId,componentType,wszLogicalPath,wszComponentName,wszPath,wszFilespec,bRecursive,wszDestination);
}
static inline HRESULT IVssBackupComponentsEx_AddRestoreSubcomponent(IVssBackupComponentsEx* This,VSS_ID writerId,VSS_COMPONENT_TYPE componentType,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszSubComponentLogicalPath,LPCWSTR wszSubComponentName,boolean bRepair) {
    return This->lpVtbl->AddRestoreSubcomponent(This,writerId,componentType,wszLogicalPath,wszComponentName,wszSubComponentLogicalPath,wszSubComponentName,bRepair);
}
static inline HRESULT IVssBackupComponentsEx_SetFileRestoreStatus(IVssBackupComponentsEx* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,VSS_FILE_RESTORE_STATUS status) {
    return This->lpVtbl->SetFileRestoreStatus(This,writerId,ct,wszLogicalPath,wszComponentName,status);
}
static inline HRESULT IVssBackupComponentsEx_AddNewTarget(IVssBackupComponentsEx* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszPath,LPCWSTR wszFileName,boolean bRecursive,LPCWSTR wszAlternatePath) {
    return This->lpVtbl->AddNewTarget(This,writerId,ct,wszLogicalPath,wszComponentName,wszPath,wszFileName,bRecursive,wszAlternatePath);
}
static inline HRESULT IVssBackupComponentsEx_SetRangesFilePath(IVssBackupComponentsEx* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,UINT iPartialFile,LPCWSTR wszRangesFile) {
    return This->lpVtbl->SetRangesFilePath(This,writerId,ct,wszLogicalPath,wszComponentName,iPartialFile,wszRangesFile);
}
static inline HRESULT IVssBackupComponentsEx_PreRestore(IVssBackupComponentsEx* This,IVssAsync **ppAsync) {
    return This->lpVtbl->PreRestore(This,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx_PostRestore(IVssBackupComponentsEx* This,IVssAsync **ppAsync) {
    return This->lpVtbl->PostRestore(This,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx_SetContext(IVssBackupComponentsEx* This,LONG lContext) {
    return This->lpVtbl->SetContext(This,lContext);
}
static inline HRESULT IVssBackupComponentsEx_StartSnapshotSet(IVssBackupComponentsEx* This,VSS_ID *pSnapshotSetId) {
    return This->lpVtbl->StartSnapshotSet(This,pSnapshotSetId);
}
static inline HRESULT IVssBackupComponentsEx_AddToSnapshotSet(IVssBackupComponentsEx* This,VSS_PWSZ pwszVolumeName,VSS_ID ProviderId,VSS_ID *pidSnapshot) {
    return This->lpVtbl->AddToSnapshotSet(This,pwszVolumeName,ProviderId,pidSnapshot);
}
static inline HRESULT IVssBackupComponentsEx_DoSnapshotSet(IVssBackupComponentsEx* This,IVssAsync **ppAsync) {
    return This->lpVtbl->DoSnapshotSet(This,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx_DeleteSnapshots(IVssBackupComponentsEx* This,VSS_ID SourceObjectId,VSS_OBJECT_TYPE eSourceObjectType,WINBOOL bForceDelete,LONG *plDeletedSnapshots,VSS_ID *pNondeletedSnapshotID) {
    return This->lpVtbl->DeleteSnapshots(This,SourceObjectId,eSourceObjectType,bForceDelete,plDeletedSnapshots,pNondeletedSnapshotID);
}
static inline HRESULT IVssBackupComponentsEx_ImportSnapshots(IVssBackupComponentsEx* This,IVssAsync **ppAsync) {
    return This->lpVtbl->ImportSnapshots(This,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx_BreakSnapshotSet(IVssBackupComponentsEx* This,VSS_ID SnapshotSetId) {
    return This->lpVtbl->BreakSnapshotSet(This,SnapshotSetId);
}
static inline HRESULT IVssBackupComponentsEx_GetSnapshotProperties(IVssBackupComponentsEx* This,VSS_ID SnapshotId,VSS_SNAPSHOT_PROP *pProp) {
    return This->lpVtbl->GetSnapshotProperties(This,SnapshotId,pProp);
}
static inline HRESULT IVssBackupComponentsEx_Query(IVssBackupComponentsEx* This,VSS_ID QueriedObjectId,VSS_OBJECT_TYPE eQueriedObjectType,VSS_OBJECT_TYPE eReturnedObjectsType,IVssEnumObject **ppEnum) {
    return This->lpVtbl->Query(This,QueriedObjectId,eQueriedObjectType,eReturnedObjectsType,ppEnum);
}
static inline HRESULT IVssBackupComponentsEx_IsVolumeSupported(IVssBackupComponentsEx* This,VSS_ID ProviderId,VSS_PWSZ pwszVolumeName,WINBOOL *pbSupportedByThisProvider) {
    return This->lpVtbl->IsVolumeSupported(This,ProviderId,pwszVolumeName,pbSupportedByThisProvider);
}
static inline HRESULT IVssBackupComponentsEx_DisableWriterClasses(IVssBackupComponentsEx* This,const VSS_ID *rgWriterClassId,UINT cClassId) {
    return This->lpVtbl->DisableWriterClasses(This,rgWriterClassId,cClassId);
}
static inline HRESULT IVssBackupComponentsEx_EnableWriterClasses(IVssBackupComponentsEx* This,const VSS_ID *rgWriterClassId,UINT cClassId) {
    return This->lpVtbl->EnableWriterClasses(This,rgWriterClassId,cClassId);
}
static inline HRESULT IVssBackupComponentsEx_DisableWriterInstances(IVssBackupComponentsEx* This,const VSS_ID *rgWriterInstanceId,UINT cInstanceId) {
    return This->lpVtbl->DisableWriterInstances(This,rgWriterInstanceId,cInstanceId);
}
static inline HRESULT IVssBackupComponentsEx_ExposeSnapshot(IVssBackupComponentsEx* This,VSS_ID SnapshotId,VSS_PWSZ wszPathFromRoot,LONG lAttributes,VSS_PWSZ wszExpose,VSS_PWSZ *pwszExposed) {
    return This->lpVtbl->ExposeSnapshot(This,SnapshotId,wszPathFromRoot,lAttributes,wszExpose,pwszExposed);
}
static inline HRESULT IVssBackupComponentsEx_RevertToSnapshot(IVssBackupComponentsEx* This,VSS_ID SnapshotId,WINBOOL bForceDismount) {
    return This->lpVtbl->RevertToSnapshot(This,SnapshotId,bForceDismount);
}
static inline HRESULT IVssBackupComponentsEx_QueryRevertStatus(IVssBackupComponentsEx* This,VSS_PWSZ pwszVolume,IVssAsync **ppAsync) {
    return This->lpVtbl->QueryRevertStatus(This,pwszVolume,ppAsync);
}
/*** IVssBackupComponentsEx methods ***/
static inline HRESULT IVssBackupComponentsEx_GetWriterMetadataEx(IVssBackupComponentsEx* This,UINT iWriter,VSS_ID *pidInstance,IVssExamineWriterMetadataEx **ppMetadata) {
    return This->lpVtbl->GetWriterMetadataEx(This,iWriter,pidInstance,ppMetadata);
}
static inline HRESULT IVssBackupComponentsEx_SetSelectedForRestoreEx(IVssBackupComponentsEx* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,boolean bSelectedForRestore,VSS_ID instanceId) {
    return This->lpVtbl->SetSelectedForRestoreEx(This,writerId,ct,wszLogicalPath,wszComponentName,bSelectedForRestore,instanceId);
}
#endif
#endif

#endif


#endif  /* __IVssBackupComponentsEx_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IVssBackupComponentsEx2 interface
 */
#ifndef __IVssBackupComponentsEx2_INTERFACE_DEFINED__
#define __IVssBackupComponentsEx2_INTERFACE_DEFINED__

DEFINE_GUID(IID_IVssBackupComponentsEx2, 0xacfe2b3a, 0x22c9, 0x4ef8, 0xbd,0x03, 0x2f,0x9c,0xa2,0x30,0x08,0x4e);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("acfe2b3a-22c9-4ef8-bd03-2f9ca230084e")
IVssBackupComponentsEx2 : public IVssBackupComponentsEx
{
    virtual HRESULT STDMETHODCALLTYPE UnexposeSnapshot(
        VSS_ID snapshotId) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetAuthoritativeRestore(
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        boolean bAuth) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetRollForward(
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        VSS_ROLLFORWARD_TYPE rollType,
        LPCWSTR wszRollForwardPoint) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetRestoreName(
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszRestoreName) = 0;

    virtual HRESULT STDMETHODCALLTYPE BreakSnapshotSetEx(
        VSS_ID SnapshotSetID,
        DWORD dwBreakFlags,
        IVssAsync **ppAsync) = 0;

    virtual HRESULT STDMETHODCALLTYPE PreFastRecovery(
        VSS_ID SnapshotSetID,
        DWORD dwPreFastRecoveryFlags,
        IVssAsync **ppAsync) = 0;

    virtual HRESULT STDMETHODCALLTYPE FastRecovery(
        VSS_ID SnapshotSetID,
        DWORD dwFastRecoveryFlags,
        IVssAsync **ppAsync) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IVssBackupComponentsEx2, 0xacfe2b3a, 0x22c9, 0x4ef8, 0xbd,0x03, 0x2f,0x9c,0xa2,0x30,0x08,0x4e)
#endif
#else
typedef struct IVssBackupComponentsEx2Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IVssBackupComponentsEx2 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IVssBackupComponentsEx2 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IVssBackupComponentsEx2 *This);

    /*** IVssBackupComponents methods ***/
    HRESULT (STDMETHODCALLTYPE *GetWriterComponentsCount)(
        IVssBackupComponentsEx2 *This,
        UINT *pcComponents);

    HRESULT (STDMETHODCALLTYPE *GetWriterComponents)(
        IVssBackupComponentsEx2 *This,
        UINT iWriter,
        IVssWriterComponentsExt **ppWriter);

    HRESULT (STDMETHODCALLTYPE *InitializeForBackup)(
        IVssBackupComponentsEx2 *This,
        BSTR bstrXML);

    HRESULT (STDMETHODCALLTYPE *SetBackupState)(
        IVssBackupComponentsEx2 *This,
        boolean bSelectComponents,
        boolean bBackupBootableSystemState,
        VSS_BACKUP_TYPE backupType,
        boolean bPartialFileSupport);

    HRESULT (STDMETHODCALLTYPE *InitializeForRestore)(
        IVssBackupComponentsEx2 *This,
        BSTR bstrXML);

    HRESULT (STDMETHODCALLTYPE *SetRestoreState)(
        IVssBackupComponentsEx2 *This,
        VSS_RESTORE_TYPE restoreType);

    HRESULT (STDMETHODCALLTYPE *GatherWriterMetadata)(
        IVssBackupComponentsEx2 *This,
        IVssAsync **pAsync);

    HRESULT (STDMETHODCALLTYPE *GetWriterMetadataCount)(
        IVssBackupComponentsEx2 *This,
        UINT *pcWriters);

    HRESULT (STDMETHODCALLTYPE *GetWriterMetadata)(
        IVssBackupComponentsEx2 *This,
        UINT iWriter,
        VSS_ID *pidInstance,
        IVssExamineWriterMetadata **ppMetadata);

    HRESULT (STDMETHODCALLTYPE *FreeWriterMetadata)(
        IVssBackupComponentsEx2 *This);

    HRESULT (STDMETHODCALLTYPE *AddComponent)(
        IVssBackupComponentsEx2 *This,
        VSS_ID instanceId,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName);

    HRESULT (STDMETHODCALLTYPE *PrepareForBackup)(
        IVssBackupComponentsEx2 *This,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *AbortBackup)(
        IVssBackupComponentsEx2 *This);

    HRESULT (STDMETHODCALLTYPE *GatherWriterStatus)(
        IVssBackupComponentsEx2 *This,
        IVssAsync **pAsync);

    HRESULT (STDMETHODCALLTYPE *GetWriterStatusCount)(
        IVssBackupComponentsEx2 *This,
        UINT *pcWriters);

    HRESULT (STDMETHODCALLTYPE *FreeWriterStatus)(
        IVssBackupComponentsEx2 *This);

    HRESULT (STDMETHODCALLTYPE *GetWriterStatus)(
        IVssBackupComponentsEx2 *This,
        UINT iWriter,
        VSS_ID *pidInstance,
        VSS_ID *pidWriter,
        BSTR *pbstrWriter,
        VSS_WRITER_STATE *pnStatus,
        HRESULT *phResultFailure);

    HRESULT (STDMETHODCALLTYPE *SetBackupSucceeded)(
        IVssBackupComponentsEx2 *This,
        VSS_ID instanceId,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        boolean bSucceded);

    HRESULT (STDMETHODCALLTYPE *SetBackupOptions)(
        IVssBackupComponentsEx2 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszBackupOptions);

    HRESULT (STDMETHODCALLTYPE *SetSelectedForRestore)(
        IVssBackupComponentsEx2 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        boolean bSelectedForRestore);

    HRESULT (STDMETHODCALLTYPE *SetRestoreOptions)(
        IVssBackupComponentsEx2 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszRestoreOptions);

    HRESULT (STDMETHODCALLTYPE *SetAdditionalRestores)(
        IVssBackupComponentsEx2 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        boolean bAdditionalRestores);

    HRESULT (STDMETHODCALLTYPE *SetPreviousBackupStamp)(
        IVssBackupComponentsEx2 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszPreviousBackupStamp);

    HRESULT (STDMETHODCALLTYPE *SaveAsXML)(
        IVssBackupComponentsEx2 *This,
        BSTR *pbstrXML);

    HRESULT (STDMETHODCALLTYPE *BackupComplete)(
        IVssBackupComponentsEx2 *This,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *AddAlternativeLocationMapping)(
        IVssBackupComponentsEx2 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE componentType,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszPath,
        LPCWSTR wszFilespec,
        boolean bRecursive,
        LPCWSTR wszDestination);

    HRESULT (STDMETHODCALLTYPE *AddRestoreSubcomponent)(
        IVssBackupComponentsEx2 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE componentType,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszSubComponentLogicalPath,
        LPCWSTR wszSubComponentName,
        boolean bRepair);

    HRESULT (STDMETHODCALLTYPE *SetFileRestoreStatus)(
        IVssBackupComponentsEx2 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        VSS_FILE_RESTORE_STATUS status);

    HRESULT (STDMETHODCALLTYPE *AddNewTarget)(
        IVssBackupComponentsEx2 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszPath,
        LPCWSTR wszFileName,
        boolean bRecursive,
        LPCWSTR wszAlternatePath);

    HRESULT (STDMETHODCALLTYPE *SetRangesFilePath)(
        IVssBackupComponentsEx2 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        UINT iPartialFile,
        LPCWSTR wszRangesFile);

    HRESULT (STDMETHODCALLTYPE *PreRestore)(
        IVssBackupComponentsEx2 *This,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *PostRestore)(
        IVssBackupComponentsEx2 *This,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *SetContext)(
        IVssBackupComponentsEx2 *This,
        LONG lContext);

    HRESULT (STDMETHODCALLTYPE *StartSnapshotSet)(
        IVssBackupComponentsEx2 *This,
        VSS_ID *pSnapshotSetId);

    HRESULT (STDMETHODCALLTYPE *AddToSnapshotSet)(
        IVssBackupComponentsEx2 *This,
        VSS_PWSZ pwszVolumeName,
        VSS_ID ProviderId,
        VSS_ID *pidSnapshot);

    HRESULT (STDMETHODCALLTYPE *DoSnapshotSet)(
        IVssBackupComponentsEx2 *This,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *DeleteSnapshots)(
        IVssBackupComponentsEx2 *This,
        VSS_ID SourceObjectId,
        VSS_OBJECT_TYPE eSourceObjectType,
        WINBOOL bForceDelete,
        LONG *plDeletedSnapshots,
        VSS_ID *pNondeletedSnapshotID);

    HRESULT (STDMETHODCALLTYPE *ImportSnapshots)(
        IVssBackupComponentsEx2 *This,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *BreakSnapshotSet)(
        IVssBackupComponentsEx2 *This,
        VSS_ID SnapshotSetId);

    HRESULT (STDMETHODCALLTYPE *GetSnapshotProperties)(
        IVssBackupComponentsEx2 *This,
        VSS_ID SnapshotId,
        VSS_SNAPSHOT_PROP *pProp);

    HRESULT (STDMETHODCALLTYPE *Query)(
        IVssBackupComponentsEx2 *This,
        VSS_ID QueriedObjectId,
        VSS_OBJECT_TYPE eQueriedObjectType,
        VSS_OBJECT_TYPE eReturnedObjectsType,
        IVssEnumObject **ppEnum);

    HRESULT (STDMETHODCALLTYPE *IsVolumeSupported)(
        IVssBackupComponentsEx2 *This,
        VSS_ID ProviderId,
        VSS_PWSZ pwszVolumeName,
        WINBOOL *pbSupportedByThisProvider);

    HRESULT (STDMETHODCALLTYPE *DisableWriterClasses)(
        IVssBackupComponentsEx2 *This,
        const VSS_ID *rgWriterClassId,
        UINT cClassId);

    HRESULT (STDMETHODCALLTYPE *EnableWriterClasses)(
        IVssBackupComponentsEx2 *This,
        const VSS_ID *rgWriterClassId,
        UINT cClassId);

    HRESULT (STDMETHODCALLTYPE *DisableWriterInstances)(
        IVssBackupComponentsEx2 *This,
        const VSS_ID *rgWriterInstanceId,
        UINT cInstanceId);

    HRESULT (STDMETHODCALLTYPE *ExposeSnapshot)(
        IVssBackupComponentsEx2 *This,
        VSS_ID SnapshotId,
        VSS_PWSZ wszPathFromRoot,
        LONG lAttributes,
        VSS_PWSZ wszExpose,
        VSS_PWSZ *pwszExposed);

    HRESULT (STDMETHODCALLTYPE *RevertToSnapshot)(
        IVssBackupComponentsEx2 *This,
        VSS_ID SnapshotId,
        WINBOOL bForceDismount);

    HRESULT (STDMETHODCALLTYPE *QueryRevertStatus)(
        IVssBackupComponentsEx2 *This,
        VSS_PWSZ pwszVolume,
        IVssAsync **ppAsync);

    /*** IVssBackupComponentsEx methods ***/
    HRESULT (STDMETHODCALLTYPE *GetWriterMetadataEx)(
        IVssBackupComponentsEx2 *This,
        UINT iWriter,
        VSS_ID *pidInstance,
        IVssExamineWriterMetadataEx **ppMetadata);

    HRESULT (STDMETHODCALLTYPE *SetSelectedForRestoreEx)(
        IVssBackupComponentsEx2 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        boolean bSelectedForRestore,
        VSS_ID instanceId);

    /*** IVssBackupComponentsEx2 methods ***/
    HRESULT (STDMETHODCALLTYPE *UnexposeSnapshot)(
        IVssBackupComponentsEx2 *This,
        VSS_ID snapshotId);

    HRESULT (STDMETHODCALLTYPE *SetAuthoritativeRestore)(
        IVssBackupComponentsEx2 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        boolean bAuth);

    HRESULT (STDMETHODCALLTYPE *SetRollForward)(
        IVssBackupComponentsEx2 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        VSS_ROLLFORWARD_TYPE rollType,
        LPCWSTR wszRollForwardPoint);

    HRESULT (STDMETHODCALLTYPE *SetRestoreName)(
        IVssBackupComponentsEx2 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszRestoreName);

    HRESULT (STDMETHODCALLTYPE *BreakSnapshotSetEx)(
        IVssBackupComponentsEx2 *This,
        VSS_ID SnapshotSetID,
        DWORD dwBreakFlags,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *PreFastRecovery)(
        IVssBackupComponentsEx2 *This,
        VSS_ID SnapshotSetID,
        DWORD dwPreFastRecoveryFlags,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *FastRecovery)(
        IVssBackupComponentsEx2 *This,
        VSS_ID SnapshotSetID,
        DWORD dwFastRecoveryFlags,
        IVssAsync **ppAsync);

    END_INTERFACE
} IVssBackupComponentsEx2Vtbl;

interface IVssBackupComponentsEx2 {
    CONST_VTBL IVssBackupComponentsEx2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IVssBackupComponentsEx2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVssBackupComponentsEx2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVssBackupComponentsEx2_Release(This) (This)->lpVtbl->Release(This)
/*** IVssBackupComponents methods ***/
#define IVssBackupComponentsEx2_GetWriterComponentsCount(This,pcComponents) (This)->lpVtbl->GetWriterComponentsCount(This,pcComponents)
#define IVssBackupComponentsEx2_GetWriterComponents(This,iWriter,ppWriter) (This)->lpVtbl->GetWriterComponents(This,iWriter,ppWriter)
#define IVssBackupComponentsEx2_InitializeForBackup(This,bstrXML) (This)->lpVtbl->InitializeForBackup(This,bstrXML)
#define IVssBackupComponentsEx2_SetBackupState(This,bSelectComponents,bBackupBootableSystemState,backupType,bPartialFileSupport) (This)->lpVtbl->SetBackupState(This,bSelectComponents,bBackupBootableSystemState,backupType,bPartialFileSupport)
#define IVssBackupComponentsEx2_InitializeForRestore(This,bstrXML) (This)->lpVtbl->InitializeForRestore(This,bstrXML)
#define IVssBackupComponentsEx2_SetRestoreState(This,restoreType) (This)->lpVtbl->SetRestoreState(This,restoreType)
#define IVssBackupComponentsEx2_GatherWriterMetadata(This,pAsync) (This)->lpVtbl->GatherWriterMetadata(This,pAsync)
#define IVssBackupComponentsEx2_GetWriterMetadataCount(This,pcWriters) (This)->lpVtbl->GetWriterMetadataCount(This,pcWriters)
#define IVssBackupComponentsEx2_GetWriterMetadata(This,iWriter,pidInstance,ppMetadata) (This)->lpVtbl->GetWriterMetadata(This,iWriter,pidInstance,ppMetadata)
#define IVssBackupComponentsEx2_FreeWriterMetadata(This) (This)->lpVtbl->FreeWriterMetadata(This)
#define IVssBackupComponentsEx2_AddComponent(This,instanceId,writerId,ct,wszLogicalPath,wszComponentName) (This)->lpVtbl->AddComponent(This,instanceId,writerId,ct,wszLogicalPath,wszComponentName)
#define IVssBackupComponentsEx2_PrepareForBackup(This,ppAsync) (This)->lpVtbl->PrepareForBackup(This,ppAsync)
#define IVssBackupComponentsEx2_AbortBackup(This) (This)->lpVtbl->AbortBackup(This)
#define IVssBackupComponentsEx2_GatherWriterStatus(This,pAsync) (This)->lpVtbl->GatherWriterStatus(This,pAsync)
#define IVssBackupComponentsEx2_GetWriterStatusCount(This,pcWriters) (This)->lpVtbl->GetWriterStatusCount(This,pcWriters)
#define IVssBackupComponentsEx2_FreeWriterStatus(This) (This)->lpVtbl->FreeWriterStatus(This)
#define IVssBackupComponentsEx2_GetWriterStatus(This,iWriter,pidInstance,pidWriter,pbstrWriter,pnStatus,phResultFailure) (This)->lpVtbl->GetWriterStatus(This,iWriter,pidInstance,pidWriter,pbstrWriter,pnStatus,phResultFailure)
#define IVssBackupComponentsEx2_SetBackupSucceeded(This,instanceId,writerId,ct,wszLogicalPath,wszComponentName,bSucceded) (This)->lpVtbl->SetBackupSucceeded(This,instanceId,writerId,ct,wszLogicalPath,wszComponentName,bSucceded)
#define IVssBackupComponentsEx2_SetBackupOptions(This,writerId,ct,wszLogicalPath,wszComponentName,wszBackupOptions) (This)->lpVtbl->SetBackupOptions(This,writerId,ct,wszLogicalPath,wszComponentName,wszBackupOptions)
#define IVssBackupComponentsEx2_SetSelectedForRestore(This,writerId,ct,wszLogicalPath,wszComponentName,bSelectedForRestore) (This)->lpVtbl->SetSelectedForRestore(This,writerId,ct,wszLogicalPath,wszComponentName,bSelectedForRestore)
#define IVssBackupComponentsEx2_SetRestoreOptions(This,writerId,ct,wszLogicalPath,wszComponentName,wszRestoreOptions) (This)->lpVtbl->SetRestoreOptions(This,writerId,ct,wszLogicalPath,wszComponentName,wszRestoreOptions)
#define IVssBackupComponentsEx2_SetAdditionalRestores(This,writerId,ct,wszLogicalPath,wszComponentName,bAdditionalRestores) (This)->lpVtbl->SetAdditionalRestores(This,writerId,ct,wszLogicalPath,wszComponentName,bAdditionalRestores)
#define IVssBackupComponentsEx2_SetPreviousBackupStamp(This,writerId,ct,wszLogicalPath,wszComponentName,wszPreviousBackupStamp) (This)->lpVtbl->SetPreviousBackupStamp(This,writerId,ct,wszLogicalPath,wszComponentName,wszPreviousBackupStamp)
#define IVssBackupComponentsEx2_SaveAsXML(This,pbstrXML) (This)->lpVtbl->SaveAsXML(This,pbstrXML)
#define IVssBackupComponentsEx2_BackupComplete(This,ppAsync) (This)->lpVtbl->BackupComplete(This,ppAsync)
#define IVssBackupComponentsEx2_AddAlternativeLocationMapping(This,writerId,componentType,wszLogicalPath,wszComponentName,wszPath,wszFilespec,bRecursive,wszDestination) (This)->lpVtbl->AddAlternativeLocationMapping(This,writerId,componentType,wszLogicalPath,wszComponentName,wszPath,wszFilespec,bRecursive,wszDestination)
#define IVssBackupComponentsEx2_AddRestoreSubcomponent(This,writerId,componentType,wszLogicalPath,wszComponentName,wszSubComponentLogicalPath,wszSubComponentName,bRepair) (This)->lpVtbl->AddRestoreSubcomponent(This,writerId,componentType,wszLogicalPath,wszComponentName,wszSubComponentLogicalPath,wszSubComponentName,bRepair)
#define IVssBackupComponentsEx2_SetFileRestoreStatus(This,writerId,ct,wszLogicalPath,wszComponentName,status) (This)->lpVtbl->SetFileRestoreStatus(This,writerId,ct,wszLogicalPath,wszComponentName,status)
#define IVssBackupComponentsEx2_AddNewTarget(This,writerId,ct,wszLogicalPath,wszComponentName,wszPath,wszFileName,bRecursive,wszAlternatePath) (This)->lpVtbl->AddNewTarget(This,writerId,ct,wszLogicalPath,wszComponentName,wszPath,wszFileName,bRecursive,wszAlternatePath)
#define IVssBackupComponentsEx2_SetRangesFilePath(This,writerId,ct,wszLogicalPath,wszComponentName,iPartialFile,wszRangesFile) (This)->lpVtbl->SetRangesFilePath(This,writerId,ct,wszLogicalPath,wszComponentName,iPartialFile,wszRangesFile)
#define IVssBackupComponentsEx2_PreRestore(This,ppAsync) (This)->lpVtbl->PreRestore(This,ppAsync)
#define IVssBackupComponentsEx2_PostRestore(This,ppAsync) (This)->lpVtbl->PostRestore(This,ppAsync)
#define IVssBackupComponentsEx2_SetContext(This,lContext) (This)->lpVtbl->SetContext(This,lContext)
#define IVssBackupComponentsEx2_StartSnapshotSet(This,pSnapshotSetId) (This)->lpVtbl->StartSnapshotSet(This,pSnapshotSetId)
#define IVssBackupComponentsEx2_AddToSnapshotSet(This,pwszVolumeName,ProviderId,pidSnapshot) (This)->lpVtbl->AddToSnapshotSet(This,pwszVolumeName,ProviderId,pidSnapshot)
#define IVssBackupComponentsEx2_DoSnapshotSet(This,ppAsync) (This)->lpVtbl->DoSnapshotSet(This,ppAsync)
#define IVssBackupComponentsEx2_DeleteSnapshots(This,SourceObjectId,eSourceObjectType,bForceDelete,plDeletedSnapshots,pNondeletedSnapshotID) (This)->lpVtbl->DeleteSnapshots(This,SourceObjectId,eSourceObjectType,bForceDelete,plDeletedSnapshots,pNondeletedSnapshotID)
#define IVssBackupComponentsEx2_ImportSnapshots(This,ppAsync) (This)->lpVtbl->ImportSnapshots(This,ppAsync)
#define IVssBackupComponentsEx2_BreakSnapshotSet(This,SnapshotSetId) (This)->lpVtbl->BreakSnapshotSet(This,SnapshotSetId)
#define IVssBackupComponentsEx2_GetSnapshotProperties(This,SnapshotId,pProp) (This)->lpVtbl->GetSnapshotProperties(This,SnapshotId,pProp)
#define IVssBackupComponentsEx2_Query(This,QueriedObjectId,eQueriedObjectType,eReturnedObjectsType,ppEnum) (This)->lpVtbl->Query(This,QueriedObjectId,eQueriedObjectType,eReturnedObjectsType,ppEnum)
#define IVssBackupComponentsEx2_IsVolumeSupported(This,ProviderId,pwszVolumeName,pbSupportedByThisProvider) (This)->lpVtbl->IsVolumeSupported(This,ProviderId,pwszVolumeName,pbSupportedByThisProvider)
#define IVssBackupComponentsEx2_DisableWriterClasses(This,rgWriterClassId,cClassId) (This)->lpVtbl->DisableWriterClasses(This,rgWriterClassId,cClassId)
#define IVssBackupComponentsEx2_EnableWriterClasses(This,rgWriterClassId,cClassId) (This)->lpVtbl->EnableWriterClasses(This,rgWriterClassId,cClassId)
#define IVssBackupComponentsEx2_DisableWriterInstances(This,rgWriterInstanceId,cInstanceId) (This)->lpVtbl->DisableWriterInstances(This,rgWriterInstanceId,cInstanceId)
#define IVssBackupComponentsEx2_ExposeSnapshot(This,SnapshotId,wszPathFromRoot,lAttributes,wszExpose,pwszExposed) (This)->lpVtbl->ExposeSnapshot(This,SnapshotId,wszPathFromRoot,lAttributes,wszExpose,pwszExposed)
#define IVssBackupComponentsEx2_RevertToSnapshot(This,SnapshotId,bForceDismount) (This)->lpVtbl->RevertToSnapshot(This,SnapshotId,bForceDismount)
#define IVssBackupComponentsEx2_QueryRevertStatus(This,pwszVolume,ppAsync) (This)->lpVtbl->QueryRevertStatus(This,pwszVolume,ppAsync)
/*** IVssBackupComponentsEx methods ***/
#define IVssBackupComponentsEx2_GetWriterMetadataEx(This,iWriter,pidInstance,ppMetadata) (This)->lpVtbl->GetWriterMetadataEx(This,iWriter,pidInstance,ppMetadata)
#define IVssBackupComponentsEx2_SetSelectedForRestoreEx(This,writerId,ct,wszLogicalPath,wszComponentName,bSelectedForRestore,instanceId) (This)->lpVtbl->SetSelectedForRestoreEx(This,writerId,ct,wszLogicalPath,wszComponentName,bSelectedForRestore,instanceId)
/*** IVssBackupComponentsEx2 methods ***/
#define IVssBackupComponentsEx2_UnexposeSnapshot(This,snapshotId) (This)->lpVtbl->UnexposeSnapshot(This,snapshotId)
#define IVssBackupComponentsEx2_SetAuthoritativeRestore(This,writerId,ct,wszLogicalPath,wszComponentName,bAuth) (This)->lpVtbl->SetAuthoritativeRestore(This,writerId,ct,wszLogicalPath,wszComponentName,bAuth)
#define IVssBackupComponentsEx2_SetRollForward(This,writerId,ct,wszLogicalPath,wszComponentName,rollType,wszRollForwardPoint) (This)->lpVtbl->SetRollForward(This,writerId,ct,wszLogicalPath,wszComponentName,rollType,wszRollForwardPoint)
#define IVssBackupComponentsEx2_SetRestoreName(This,writerId,ct,wszLogicalPath,wszComponentName,wszRestoreName) (This)->lpVtbl->SetRestoreName(This,writerId,ct,wszLogicalPath,wszComponentName,wszRestoreName)
#define IVssBackupComponentsEx2_BreakSnapshotSetEx(This,SnapshotSetID,dwBreakFlags,ppAsync) (This)->lpVtbl->BreakSnapshotSetEx(This,SnapshotSetID,dwBreakFlags,ppAsync)
#define IVssBackupComponentsEx2_PreFastRecovery(This,SnapshotSetID,dwPreFastRecoveryFlags,ppAsync) (This)->lpVtbl->PreFastRecovery(This,SnapshotSetID,dwPreFastRecoveryFlags,ppAsync)
#define IVssBackupComponentsEx2_FastRecovery(This,SnapshotSetID,dwFastRecoveryFlags,ppAsync) (This)->lpVtbl->FastRecovery(This,SnapshotSetID,dwFastRecoveryFlags,ppAsync)
#else
/*** IUnknown methods ***/
static inline HRESULT IVssBackupComponentsEx2_QueryInterface(IVssBackupComponentsEx2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IVssBackupComponentsEx2_AddRef(IVssBackupComponentsEx2* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IVssBackupComponentsEx2_Release(IVssBackupComponentsEx2* This) {
    return This->lpVtbl->Release(This);
}
/*** IVssBackupComponents methods ***/
static inline HRESULT IVssBackupComponentsEx2_GetWriterComponentsCount(IVssBackupComponentsEx2* This,UINT *pcComponents) {
    return This->lpVtbl->GetWriterComponentsCount(This,pcComponents);
}
static inline HRESULT IVssBackupComponentsEx2_GetWriterComponents(IVssBackupComponentsEx2* This,UINT iWriter,IVssWriterComponentsExt **ppWriter) {
    return This->lpVtbl->GetWriterComponents(This,iWriter,ppWriter);
}
static inline HRESULT IVssBackupComponentsEx2_InitializeForBackup(IVssBackupComponentsEx2* This,BSTR bstrXML) {
    return This->lpVtbl->InitializeForBackup(This,bstrXML);
}
static inline HRESULT IVssBackupComponentsEx2_SetBackupState(IVssBackupComponentsEx2* This,boolean bSelectComponents,boolean bBackupBootableSystemState,VSS_BACKUP_TYPE backupType,boolean bPartialFileSupport) {
    return This->lpVtbl->SetBackupState(This,bSelectComponents,bBackupBootableSystemState,backupType,bPartialFileSupport);
}
static inline HRESULT IVssBackupComponentsEx2_InitializeForRestore(IVssBackupComponentsEx2* This,BSTR bstrXML) {
    return This->lpVtbl->InitializeForRestore(This,bstrXML);
}
static inline HRESULT IVssBackupComponentsEx2_SetRestoreState(IVssBackupComponentsEx2* This,VSS_RESTORE_TYPE restoreType) {
    return This->lpVtbl->SetRestoreState(This,restoreType);
}
static inline HRESULT IVssBackupComponentsEx2_GatherWriterMetadata(IVssBackupComponentsEx2* This,IVssAsync **pAsync) {
    return This->lpVtbl->GatherWriterMetadata(This,pAsync);
}
static inline HRESULT IVssBackupComponentsEx2_GetWriterMetadataCount(IVssBackupComponentsEx2* This,UINT *pcWriters) {
    return This->lpVtbl->GetWriterMetadataCount(This,pcWriters);
}
static inline HRESULT IVssBackupComponentsEx2_GetWriterMetadata(IVssBackupComponentsEx2* This,UINT iWriter,VSS_ID *pidInstance,IVssExamineWriterMetadata **ppMetadata) {
    return This->lpVtbl->GetWriterMetadata(This,iWriter,pidInstance,ppMetadata);
}
static inline HRESULT IVssBackupComponentsEx2_FreeWriterMetadata(IVssBackupComponentsEx2* This) {
    return This->lpVtbl->FreeWriterMetadata(This);
}
static inline HRESULT IVssBackupComponentsEx2_AddComponent(IVssBackupComponentsEx2* This,VSS_ID instanceId,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName) {
    return This->lpVtbl->AddComponent(This,instanceId,writerId,ct,wszLogicalPath,wszComponentName);
}
static inline HRESULT IVssBackupComponentsEx2_PrepareForBackup(IVssBackupComponentsEx2* This,IVssAsync **ppAsync) {
    return This->lpVtbl->PrepareForBackup(This,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx2_AbortBackup(IVssBackupComponentsEx2* This) {
    return This->lpVtbl->AbortBackup(This);
}
static inline HRESULT IVssBackupComponentsEx2_GatherWriterStatus(IVssBackupComponentsEx2* This,IVssAsync **pAsync) {
    return This->lpVtbl->GatherWriterStatus(This,pAsync);
}
static inline HRESULT IVssBackupComponentsEx2_GetWriterStatusCount(IVssBackupComponentsEx2* This,UINT *pcWriters) {
    return This->lpVtbl->GetWriterStatusCount(This,pcWriters);
}
static inline HRESULT IVssBackupComponentsEx2_FreeWriterStatus(IVssBackupComponentsEx2* This) {
    return This->lpVtbl->FreeWriterStatus(This);
}
static inline HRESULT IVssBackupComponentsEx2_GetWriterStatus(IVssBackupComponentsEx2* This,UINT iWriter,VSS_ID *pidInstance,VSS_ID *pidWriter,BSTR *pbstrWriter,VSS_WRITER_STATE *pnStatus,HRESULT *phResultFailure) {
    return This->lpVtbl->GetWriterStatus(This,iWriter,pidInstance,pidWriter,pbstrWriter,pnStatus,phResultFailure);
}
static inline HRESULT IVssBackupComponentsEx2_SetBackupSucceeded(IVssBackupComponentsEx2* This,VSS_ID instanceId,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,boolean bSucceded) {
    return This->lpVtbl->SetBackupSucceeded(This,instanceId,writerId,ct,wszLogicalPath,wszComponentName,bSucceded);
}
static inline HRESULT IVssBackupComponentsEx2_SetBackupOptions(IVssBackupComponentsEx2* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszBackupOptions) {
    return This->lpVtbl->SetBackupOptions(This,writerId,ct,wszLogicalPath,wszComponentName,wszBackupOptions);
}
static inline HRESULT IVssBackupComponentsEx2_SetSelectedForRestore(IVssBackupComponentsEx2* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,boolean bSelectedForRestore) {
    return This->lpVtbl->SetSelectedForRestore(This,writerId,ct,wszLogicalPath,wszComponentName,bSelectedForRestore);
}
static inline HRESULT IVssBackupComponentsEx2_SetRestoreOptions(IVssBackupComponentsEx2* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszRestoreOptions) {
    return This->lpVtbl->SetRestoreOptions(This,writerId,ct,wszLogicalPath,wszComponentName,wszRestoreOptions);
}
static inline HRESULT IVssBackupComponentsEx2_SetAdditionalRestores(IVssBackupComponentsEx2* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,boolean bAdditionalRestores) {
    return This->lpVtbl->SetAdditionalRestores(This,writerId,ct,wszLogicalPath,wszComponentName,bAdditionalRestores);
}
static inline HRESULT IVssBackupComponentsEx2_SetPreviousBackupStamp(IVssBackupComponentsEx2* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszPreviousBackupStamp) {
    return This->lpVtbl->SetPreviousBackupStamp(This,writerId,ct,wszLogicalPath,wszComponentName,wszPreviousBackupStamp);
}
static inline HRESULT IVssBackupComponentsEx2_SaveAsXML(IVssBackupComponentsEx2* This,BSTR *pbstrXML) {
    return This->lpVtbl->SaveAsXML(This,pbstrXML);
}
static inline HRESULT IVssBackupComponentsEx2_BackupComplete(IVssBackupComponentsEx2* This,IVssAsync **ppAsync) {
    return This->lpVtbl->BackupComplete(This,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx2_AddAlternativeLocationMapping(IVssBackupComponentsEx2* This,VSS_ID writerId,VSS_COMPONENT_TYPE componentType,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszPath,LPCWSTR wszFilespec,boolean bRecursive,LPCWSTR wszDestination) {
    return This->lpVtbl->AddAlternativeLocationMapping(This,writerId,componentType,wszLogicalPath,wszComponentName,wszPath,wszFilespec,bRecursive,wszDestination);
}
static inline HRESULT IVssBackupComponentsEx2_AddRestoreSubcomponent(IVssBackupComponentsEx2* This,VSS_ID writerId,VSS_COMPONENT_TYPE componentType,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszSubComponentLogicalPath,LPCWSTR wszSubComponentName,boolean bRepair) {
    return This->lpVtbl->AddRestoreSubcomponent(This,writerId,componentType,wszLogicalPath,wszComponentName,wszSubComponentLogicalPath,wszSubComponentName,bRepair);
}
static inline HRESULT IVssBackupComponentsEx2_SetFileRestoreStatus(IVssBackupComponentsEx2* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,VSS_FILE_RESTORE_STATUS status) {
    return This->lpVtbl->SetFileRestoreStatus(This,writerId,ct,wszLogicalPath,wszComponentName,status);
}
static inline HRESULT IVssBackupComponentsEx2_AddNewTarget(IVssBackupComponentsEx2* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszPath,LPCWSTR wszFileName,boolean bRecursive,LPCWSTR wszAlternatePath) {
    return This->lpVtbl->AddNewTarget(This,writerId,ct,wszLogicalPath,wszComponentName,wszPath,wszFileName,bRecursive,wszAlternatePath);
}
static inline HRESULT IVssBackupComponentsEx2_SetRangesFilePath(IVssBackupComponentsEx2* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,UINT iPartialFile,LPCWSTR wszRangesFile) {
    return This->lpVtbl->SetRangesFilePath(This,writerId,ct,wszLogicalPath,wszComponentName,iPartialFile,wszRangesFile);
}
static inline HRESULT IVssBackupComponentsEx2_PreRestore(IVssBackupComponentsEx2* This,IVssAsync **ppAsync) {
    return This->lpVtbl->PreRestore(This,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx2_PostRestore(IVssBackupComponentsEx2* This,IVssAsync **ppAsync) {
    return This->lpVtbl->PostRestore(This,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx2_SetContext(IVssBackupComponentsEx2* This,LONG lContext) {
    return This->lpVtbl->SetContext(This,lContext);
}
static inline HRESULT IVssBackupComponentsEx2_StartSnapshotSet(IVssBackupComponentsEx2* This,VSS_ID *pSnapshotSetId) {
    return This->lpVtbl->StartSnapshotSet(This,pSnapshotSetId);
}
static inline HRESULT IVssBackupComponentsEx2_AddToSnapshotSet(IVssBackupComponentsEx2* This,VSS_PWSZ pwszVolumeName,VSS_ID ProviderId,VSS_ID *pidSnapshot) {
    return This->lpVtbl->AddToSnapshotSet(This,pwszVolumeName,ProviderId,pidSnapshot);
}
static inline HRESULT IVssBackupComponentsEx2_DoSnapshotSet(IVssBackupComponentsEx2* This,IVssAsync **ppAsync) {
    return This->lpVtbl->DoSnapshotSet(This,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx2_DeleteSnapshots(IVssBackupComponentsEx2* This,VSS_ID SourceObjectId,VSS_OBJECT_TYPE eSourceObjectType,WINBOOL bForceDelete,LONG *plDeletedSnapshots,VSS_ID *pNondeletedSnapshotID) {
    return This->lpVtbl->DeleteSnapshots(This,SourceObjectId,eSourceObjectType,bForceDelete,plDeletedSnapshots,pNondeletedSnapshotID);
}
static inline HRESULT IVssBackupComponentsEx2_ImportSnapshots(IVssBackupComponentsEx2* This,IVssAsync **ppAsync) {
    return This->lpVtbl->ImportSnapshots(This,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx2_BreakSnapshotSet(IVssBackupComponentsEx2* This,VSS_ID SnapshotSetId) {
    return This->lpVtbl->BreakSnapshotSet(This,SnapshotSetId);
}
static inline HRESULT IVssBackupComponentsEx2_GetSnapshotProperties(IVssBackupComponentsEx2* This,VSS_ID SnapshotId,VSS_SNAPSHOT_PROP *pProp) {
    return This->lpVtbl->GetSnapshotProperties(This,SnapshotId,pProp);
}
static inline HRESULT IVssBackupComponentsEx2_Query(IVssBackupComponentsEx2* This,VSS_ID QueriedObjectId,VSS_OBJECT_TYPE eQueriedObjectType,VSS_OBJECT_TYPE eReturnedObjectsType,IVssEnumObject **ppEnum) {
    return This->lpVtbl->Query(This,QueriedObjectId,eQueriedObjectType,eReturnedObjectsType,ppEnum);
}
static inline HRESULT IVssBackupComponentsEx2_IsVolumeSupported(IVssBackupComponentsEx2* This,VSS_ID ProviderId,VSS_PWSZ pwszVolumeName,WINBOOL *pbSupportedByThisProvider) {
    return This->lpVtbl->IsVolumeSupported(This,ProviderId,pwszVolumeName,pbSupportedByThisProvider);
}
static inline HRESULT IVssBackupComponentsEx2_DisableWriterClasses(IVssBackupComponentsEx2* This,const VSS_ID *rgWriterClassId,UINT cClassId) {
    return This->lpVtbl->DisableWriterClasses(This,rgWriterClassId,cClassId);
}
static inline HRESULT IVssBackupComponentsEx2_EnableWriterClasses(IVssBackupComponentsEx2* This,const VSS_ID *rgWriterClassId,UINT cClassId) {
    return This->lpVtbl->EnableWriterClasses(This,rgWriterClassId,cClassId);
}
static inline HRESULT IVssBackupComponentsEx2_DisableWriterInstances(IVssBackupComponentsEx2* This,const VSS_ID *rgWriterInstanceId,UINT cInstanceId) {
    return This->lpVtbl->DisableWriterInstances(This,rgWriterInstanceId,cInstanceId);
}
static inline HRESULT IVssBackupComponentsEx2_ExposeSnapshot(IVssBackupComponentsEx2* This,VSS_ID SnapshotId,VSS_PWSZ wszPathFromRoot,LONG lAttributes,VSS_PWSZ wszExpose,VSS_PWSZ *pwszExposed) {
    return This->lpVtbl->ExposeSnapshot(This,SnapshotId,wszPathFromRoot,lAttributes,wszExpose,pwszExposed);
}
static inline HRESULT IVssBackupComponentsEx2_RevertToSnapshot(IVssBackupComponentsEx2* This,VSS_ID SnapshotId,WINBOOL bForceDismount) {
    return This->lpVtbl->RevertToSnapshot(This,SnapshotId,bForceDismount);
}
static inline HRESULT IVssBackupComponentsEx2_QueryRevertStatus(IVssBackupComponentsEx2* This,VSS_PWSZ pwszVolume,IVssAsync **ppAsync) {
    return This->lpVtbl->QueryRevertStatus(This,pwszVolume,ppAsync);
}
/*** IVssBackupComponentsEx methods ***/
static inline HRESULT IVssBackupComponentsEx2_GetWriterMetadataEx(IVssBackupComponentsEx2* This,UINT iWriter,VSS_ID *pidInstance,IVssExamineWriterMetadataEx **ppMetadata) {
    return This->lpVtbl->GetWriterMetadataEx(This,iWriter,pidInstance,ppMetadata);
}
static inline HRESULT IVssBackupComponentsEx2_SetSelectedForRestoreEx(IVssBackupComponentsEx2* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,boolean bSelectedForRestore,VSS_ID instanceId) {
    return This->lpVtbl->SetSelectedForRestoreEx(This,writerId,ct,wszLogicalPath,wszComponentName,bSelectedForRestore,instanceId);
}
/*** IVssBackupComponentsEx2 methods ***/
static inline HRESULT IVssBackupComponentsEx2_UnexposeSnapshot(IVssBackupComponentsEx2* This,VSS_ID snapshotId) {
    return This->lpVtbl->UnexposeSnapshot(This,snapshotId);
}
static inline HRESULT IVssBackupComponentsEx2_SetAuthoritativeRestore(IVssBackupComponentsEx2* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,boolean bAuth) {
    return This->lpVtbl->SetAuthoritativeRestore(This,writerId,ct,wszLogicalPath,wszComponentName,bAuth);
}
static inline HRESULT IVssBackupComponentsEx2_SetRollForward(IVssBackupComponentsEx2* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,VSS_ROLLFORWARD_TYPE rollType,LPCWSTR wszRollForwardPoint) {
    return This->lpVtbl->SetRollForward(This,writerId,ct,wszLogicalPath,wszComponentName,rollType,wszRollForwardPoint);
}
static inline HRESULT IVssBackupComponentsEx2_SetRestoreName(IVssBackupComponentsEx2* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszRestoreName) {
    return This->lpVtbl->SetRestoreName(This,writerId,ct,wszLogicalPath,wszComponentName,wszRestoreName);
}
static inline HRESULT IVssBackupComponentsEx2_BreakSnapshotSetEx(IVssBackupComponentsEx2* This,VSS_ID SnapshotSetID,DWORD dwBreakFlags,IVssAsync **ppAsync) {
    return This->lpVtbl->BreakSnapshotSetEx(This,SnapshotSetID,dwBreakFlags,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx2_PreFastRecovery(IVssBackupComponentsEx2* This,VSS_ID SnapshotSetID,DWORD dwPreFastRecoveryFlags,IVssAsync **ppAsync) {
    return This->lpVtbl->PreFastRecovery(This,SnapshotSetID,dwPreFastRecoveryFlags,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx2_FastRecovery(IVssBackupComponentsEx2* This,VSS_ID SnapshotSetID,DWORD dwFastRecoveryFlags,IVssAsync **ppAsync) {
    return This->lpVtbl->FastRecovery(This,SnapshotSetID,dwFastRecoveryFlags,ppAsync);
}
#endif
#endif

#endif


#endif  /* __IVssBackupComponentsEx2_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IVssBackupComponentsEx3 interface
 */
#ifndef __IVssBackupComponentsEx3_INTERFACE_DEFINED__
#define __IVssBackupComponentsEx3_INTERFACE_DEFINED__

DEFINE_GUID(IID_IVssBackupComponentsEx3, 0xc191bfbc, 0xb602, 0x4675, 0x8b,0xd1, 0x67,0xd6,0x42,0xf5,0x29,0xd5);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("c191bfbc-b602-4675-8bd1-67d642f529d5")
IVssBackupComponentsEx3 : public IVssBackupComponentsEx2
{
    virtual HRESULT STDMETHODCALLTYPE GetWriterStatusEx(
        UINT iWriter,
        VSS_ID *pidInstance,
        VSS_ID *pidWriter,
        BSTR *pbstrWriter,
        VSS_WRITER_STATE *pnStatus,
        HRESULT *phrFailureWriter,
        HRESULT *phrApplication = 0,
        BSTR *pbstrApplicationMessage = 0) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddSnapshotToRecoverySet(
        VSS_ID snapshotId,
        DWORD dwFlags,
        VSS_PWSZ pwszDestinationVolume = 0) = 0;

    virtual HRESULT STDMETHODCALLTYPE RecoverSet(
        DWORD dwFlags,
        IVssAsync **ppAsync) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSessionId(
        VSS_ID *idSession) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IVssBackupComponentsEx3, 0xc191bfbc, 0xb602, 0x4675, 0x8b,0xd1, 0x67,0xd6,0x42,0xf5,0x29,0xd5)
#endif
#else
typedef struct IVssBackupComponentsEx3Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IVssBackupComponentsEx3 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IVssBackupComponentsEx3 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IVssBackupComponentsEx3 *This);

    /*** IVssBackupComponents methods ***/
    HRESULT (STDMETHODCALLTYPE *GetWriterComponentsCount)(
        IVssBackupComponentsEx3 *This,
        UINT *pcComponents);

    HRESULT (STDMETHODCALLTYPE *GetWriterComponents)(
        IVssBackupComponentsEx3 *This,
        UINT iWriter,
        IVssWriterComponentsExt **ppWriter);

    HRESULT (STDMETHODCALLTYPE *InitializeForBackup)(
        IVssBackupComponentsEx3 *This,
        BSTR bstrXML);

    HRESULT (STDMETHODCALLTYPE *SetBackupState)(
        IVssBackupComponentsEx3 *This,
        boolean bSelectComponents,
        boolean bBackupBootableSystemState,
        VSS_BACKUP_TYPE backupType,
        boolean bPartialFileSupport);

    HRESULT (STDMETHODCALLTYPE *InitializeForRestore)(
        IVssBackupComponentsEx3 *This,
        BSTR bstrXML);

    HRESULT (STDMETHODCALLTYPE *SetRestoreState)(
        IVssBackupComponentsEx3 *This,
        VSS_RESTORE_TYPE restoreType);

    HRESULT (STDMETHODCALLTYPE *GatherWriterMetadata)(
        IVssBackupComponentsEx3 *This,
        IVssAsync **pAsync);

    HRESULT (STDMETHODCALLTYPE *GetWriterMetadataCount)(
        IVssBackupComponentsEx3 *This,
        UINT *pcWriters);

    HRESULT (STDMETHODCALLTYPE *GetWriterMetadata)(
        IVssBackupComponentsEx3 *This,
        UINT iWriter,
        VSS_ID *pidInstance,
        IVssExamineWriterMetadata **ppMetadata);

    HRESULT (STDMETHODCALLTYPE *FreeWriterMetadata)(
        IVssBackupComponentsEx3 *This);

    HRESULT (STDMETHODCALLTYPE *AddComponent)(
        IVssBackupComponentsEx3 *This,
        VSS_ID instanceId,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName);

    HRESULT (STDMETHODCALLTYPE *PrepareForBackup)(
        IVssBackupComponentsEx3 *This,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *AbortBackup)(
        IVssBackupComponentsEx3 *This);

    HRESULT (STDMETHODCALLTYPE *GatherWriterStatus)(
        IVssBackupComponentsEx3 *This,
        IVssAsync **pAsync);

    HRESULT (STDMETHODCALLTYPE *GetWriterStatusCount)(
        IVssBackupComponentsEx3 *This,
        UINT *pcWriters);

    HRESULT (STDMETHODCALLTYPE *FreeWriterStatus)(
        IVssBackupComponentsEx3 *This);

    HRESULT (STDMETHODCALLTYPE *GetWriterStatus)(
        IVssBackupComponentsEx3 *This,
        UINT iWriter,
        VSS_ID *pidInstance,
        VSS_ID *pidWriter,
        BSTR *pbstrWriter,
        VSS_WRITER_STATE *pnStatus,
        HRESULT *phResultFailure);

    HRESULT (STDMETHODCALLTYPE *SetBackupSucceeded)(
        IVssBackupComponentsEx3 *This,
        VSS_ID instanceId,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        boolean bSucceded);

    HRESULT (STDMETHODCALLTYPE *SetBackupOptions)(
        IVssBackupComponentsEx3 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszBackupOptions);

    HRESULT (STDMETHODCALLTYPE *SetSelectedForRestore)(
        IVssBackupComponentsEx3 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        boolean bSelectedForRestore);

    HRESULT (STDMETHODCALLTYPE *SetRestoreOptions)(
        IVssBackupComponentsEx3 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszRestoreOptions);

    HRESULT (STDMETHODCALLTYPE *SetAdditionalRestores)(
        IVssBackupComponentsEx3 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        boolean bAdditionalRestores);

    HRESULT (STDMETHODCALLTYPE *SetPreviousBackupStamp)(
        IVssBackupComponentsEx3 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszPreviousBackupStamp);

    HRESULT (STDMETHODCALLTYPE *SaveAsXML)(
        IVssBackupComponentsEx3 *This,
        BSTR *pbstrXML);

    HRESULT (STDMETHODCALLTYPE *BackupComplete)(
        IVssBackupComponentsEx3 *This,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *AddAlternativeLocationMapping)(
        IVssBackupComponentsEx3 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE componentType,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszPath,
        LPCWSTR wszFilespec,
        boolean bRecursive,
        LPCWSTR wszDestination);

    HRESULT (STDMETHODCALLTYPE *AddRestoreSubcomponent)(
        IVssBackupComponentsEx3 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE componentType,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszSubComponentLogicalPath,
        LPCWSTR wszSubComponentName,
        boolean bRepair);

    HRESULT (STDMETHODCALLTYPE *SetFileRestoreStatus)(
        IVssBackupComponentsEx3 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        VSS_FILE_RESTORE_STATUS status);

    HRESULT (STDMETHODCALLTYPE *AddNewTarget)(
        IVssBackupComponentsEx3 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszPath,
        LPCWSTR wszFileName,
        boolean bRecursive,
        LPCWSTR wszAlternatePath);

    HRESULT (STDMETHODCALLTYPE *SetRangesFilePath)(
        IVssBackupComponentsEx3 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        UINT iPartialFile,
        LPCWSTR wszRangesFile);

    HRESULT (STDMETHODCALLTYPE *PreRestore)(
        IVssBackupComponentsEx3 *This,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *PostRestore)(
        IVssBackupComponentsEx3 *This,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *SetContext)(
        IVssBackupComponentsEx3 *This,
        LONG lContext);

    HRESULT (STDMETHODCALLTYPE *StartSnapshotSet)(
        IVssBackupComponentsEx3 *This,
        VSS_ID *pSnapshotSetId);

    HRESULT (STDMETHODCALLTYPE *AddToSnapshotSet)(
        IVssBackupComponentsEx3 *This,
        VSS_PWSZ pwszVolumeName,
        VSS_ID ProviderId,
        VSS_ID *pidSnapshot);

    HRESULT (STDMETHODCALLTYPE *DoSnapshotSet)(
        IVssBackupComponentsEx3 *This,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *DeleteSnapshots)(
        IVssBackupComponentsEx3 *This,
        VSS_ID SourceObjectId,
        VSS_OBJECT_TYPE eSourceObjectType,
        WINBOOL bForceDelete,
        LONG *plDeletedSnapshots,
        VSS_ID *pNondeletedSnapshotID);

    HRESULT (STDMETHODCALLTYPE *ImportSnapshots)(
        IVssBackupComponentsEx3 *This,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *BreakSnapshotSet)(
        IVssBackupComponentsEx3 *This,
        VSS_ID SnapshotSetId);

    HRESULT (STDMETHODCALLTYPE *GetSnapshotProperties)(
        IVssBackupComponentsEx3 *This,
        VSS_ID SnapshotId,
        VSS_SNAPSHOT_PROP *pProp);

    HRESULT (STDMETHODCALLTYPE *Query)(
        IVssBackupComponentsEx3 *This,
        VSS_ID QueriedObjectId,
        VSS_OBJECT_TYPE eQueriedObjectType,
        VSS_OBJECT_TYPE eReturnedObjectsType,
        IVssEnumObject **ppEnum);

    HRESULT (STDMETHODCALLTYPE *IsVolumeSupported)(
        IVssBackupComponentsEx3 *This,
        VSS_ID ProviderId,
        VSS_PWSZ pwszVolumeName,
        WINBOOL *pbSupportedByThisProvider);

    HRESULT (STDMETHODCALLTYPE *DisableWriterClasses)(
        IVssBackupComponentsEx3 *This,
        const VSS_ID *rgWriterClassId,
        UINT cClassId);

    HRESULT (STDMETHODCALLTYPE *EnableWriterClasses)(
        IVssBackupComponentsEx3 *This,
        const VSS_ID *rgWriterClassId,
        UINT cClassId);

    HRESULT (STDMETHODCALLTYPE *DisableWriterInstances)(
        IVssBackupComponentsEx3 *This,
        const VSS_ID *rgWriterInstanceId,
        UINT cInstanceId);

    HRESULT (STDMETHODCALLTYPE *ExposeSnapshot)(
        IVssBackupComponentsEx3 *This,
        VSS_ID SnapshotId,
        VSS_PWSZ wszPathFromRoot,
        LONG lAttributes,
        VSS_PWSZ wszExpose,
        VSS_PWSZ *pwszExposed);

    HRESULT (STDMETHODCALLTYPE *RevertToSnapshot)(
        IVssBackupComponentsEx3 *This,
        VSS_ID SnapshotId,
        WINBOOL bForceDismount);

    HRESULT (STDMETHODCALLTYPE *QueryRevertStatus)(
        IVssBackupComponentsEx3 *This,
        VSS_PWSZ pwszVolume,
        IVssAsync **ppAsync);

    /*** IVssBackupComponentsEx methods ***/
    HRESULT (STDMETHODCALLTYPE *GetWriterMetadataEx)(
        IVssBackupComponentsEx3 *This,
        UINT iWriter,
        VSS_ID *pidInstance,
        IVssExamineWriterMetadataEx **ppMetadata);

    HRESULT (STDMETHODCALLTYPE *SetSelectedForRestoreEx)(
        IVssBackupComponentsEx3 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        boolean bSelectedForRestore,
        VSS_ID instanceId);

    /*** IVssBackupComponentsEx2 methods ***/
    HRESULT (STDMETHODCALLTYPE *UnexposeSnapshot)(
        IVssBackupComponentsEx3 *This,
        VSS_ID snapshotId);

    HRESULT (STDMETHODCALLTYPE *SetAuthoritativeRestore)(
        IVssBackupComponentsEx3 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        boolean bAuth);

    HRESULT (STDMETHODCALLTYPE *SetRollForward)(
        IVssBackupComponentsEx3 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        VSS_ROLLFORWARD_TYPE rollType,
        LPCWSTR wszRollForwardPoint);

    HRESULT (STDMETHODCALLTYPE *SetRestoreName)(
        IVssBackupComponentsEx3 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszRestoreName);

    HRESULT (STDMETHODCALLTYPE *BreakSnapshotSetEx)(
        IVssBackupComponentsEx3 *This,
        VSS_ID SnapshotSetID,
        DWORD dwBreakFlags,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *PreFastRecovery)(
        IVssBackupComponentsEx3 *This,
        VSS_ID SnapshotSetID,
        DWORD dwPreFastRecoveryFlags,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *FastRecovery)(
        IVssBackupComponentsEx3 *This,
        VSS_ID SnapshotSetID,
        DWORD dwFastRecoveryFlags,
        IVssAsync **ppAsync);

    /*** IVssBackupComponentsEx3 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetWriterStatusEx)(
        IVssBackupComponentsEx3 *This,
        UINT iWriter,
        VSS_ID *pidInstance,
        VSS_ID *pidWriter,
        BSTR *pbstrWriter,
        VSS_WRITER_STATE *pnStatus,
        HRESULT *phrFailureWriter,
        HRESULT *phrApplication,
        BSTR *pbstrApplicationMessage);

    HRESULT (STDMETHODCALLTYPE *AddSnapshotToRecoverySet)(
        IVssBackupComponentsEx3 *This,
        VSS_ID snapshotId,
        DWORD dwFlags,
        VSS_PWSZ pwszDestinationVolume);

    HRESULT (STDMETHODCALLTYPE *RecoverSet)(
        IVssBackupComponentsEx3 *This,
        DWORD dwFlags,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *GetSessionId)(
        IVssBackupComponentsEx3 *This,
        VSS_ID *idSession);

    END_INTERFACE
} IVssBackupComponentsEx3Vtbl;

interface IVssBackupComponentsEx3 {
    CONST_VTBL IVssBackupComponentsEx3Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IVssBackupComponentsEx3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVssBackupComponentsEx3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVssBackupComponentsEx3_Release(This) (This)->lpVtbl->Release(This)
/*** IVssBackupComponents methods ***/
#define IVssBackupComponentsEx3_GetWriterComponentsCount(This,pcComponents) (This)->lpVtbl->GetWriterComponentsCount(This,pcComponents)
#define IVssBackupComponentsEx3_GetWriterComponents(This,iWriter,ppWriter) (This)->lpVtbl->GetWriterComponents(This,iWriter,ppWriter)
#define IVssBackupComponentsEx3_InitializeForBackup(This,bstrXML) (This)->lpVtbl->InitializeForBackup(This,bstrXML)
#define IVssBackupComponentsEx3_SetBackupState(This,bSelectComponents,bBackupBootableSystemState,backupType,bPartialFileSupport) (This)->lpVtbl->SetBackupState(This,bSelectComponents,bBackupBootableSystemState,backupType,bPartialFileSupport)
#define IVssBackupComponentsEx3_InitializeForRestore(This,bstrXML) (This)->lpVtbl->InitializeForRestore(This,bstrXML)
#define IVssBackupComponentsEx3_SetRestoreState(This,restoreType) (This)->lpVtbl->SetRestoreState(This,restoreType)
#define IVssBackupComponentsEx3_GatherWriterMetadata(This,pAsync) (This)->lpVtbl->GatherWriterMetadata(This,pAsync)
#define IVssBackupComponentsEx3_GetWriterMetadataCount(This,pcWriters) (This)->lpVtbl->GetWriterMetadataCount(This,pcWriters)
#define IVssBackupComponentsEx3_GetWriterMetadata(This,iWriter,pidInstance,ppMetadata) (This)->lpVtbl->GetWriterMetadata(This,iWriter,pidInstance,ppMetadata)
#define IVssBackupComponentsEx3_FreeWriterMetadata(This) (This)->lpVtbl->FreeWriterMetadata(This)
#define IVssBackupComponentsEx3_AddComponent(This,instanceId,writerId,ct,wszLogicalPath,wszComponentName) (This)->lpVtbl->AddComponent(This,instanceId,writerId,ct,wszLogicalPath,wszComponentName)
#define IVssBackupComponentsEx3_PrepareForBackup(This,ppAsync) (This)->lpVtbl->PrepareForBackup(This,ppAsync)
#define IVssBackupComponentsEx3_AbortBackup(This) (This)->lpVtbl->AbortBackup(This)
#define IVssBackupComponentsEx3_GatherWriterStatus(This,pAsync) (This)->lpVtbl->GatherWriterStatus(This,pAsync)
#define IVssBackupComponentsEx3_GetWriterStatusCount(This,pcWriters) (This)->lpVtbl->GetWriterStatusCount(This,pcWriters)
#define IVssBackupComponentsEx3_FreeWriterStatus(This) (This)->lpVtbl->FreeWriterStatus(This)
#define IVssBackupComponentsEx3_GetWriterStatus(This,iWriter,pidInstance,pidWriter,pbstrWriter,pnStatus,phResultFailure) (This)->lpVtbl->GetWriterStatus(This,iWriter,pidInstance,pidWriter,pbstrWriter,pnStatus,phResultFailure)
#define IVssBackupComponentsEx3_SetBackupSucceeded(This,instanceId,writerId,ct,wszLogicalPath,wszComponentName,bSucceded) (This)->lpVtbl->SetBackupSucceeded(This,instanceId,writerId,ct,wszLogicalPath,wszComponentName,bSucceded)
#define IVssBackupComponentsEx3_SetBackupOptions(This,writerId,ct,wszLogicalPath,wszComponentName,wszBackupOptions) (This)->lpVtbl->SetBackupOptions(This,writerId,ct,wszLogicalPath,wszComponentName,wszBackupOptions)
#define IVssBackupComponentsEx3_SetSelectedForRestore(This,writerId,ct,wszLogicalPath,wszComponentName,bSelectedForRestore) (This)->lpVtbl->SetSelectedForRestore(This,writerId,ct,wszLogicalPath,wszComponentName,bSelectedForRestore)
#define IVssBackupComponentsEx3_SetRestoreOptions(This,writerId,ct,wszLogicalPath,wszComponentName,wszRestoreOptions) (This)->lpVtbl->SetRestoreOptions(This,writerId,ct,wszLogicalPath,wszComponentName,wszRestoreOptions)
#define IVssBackupComponentsEx3_SetAdditionalRestores(This,writerId,ct,wszLogicalPath,wszComponentName,bAdditionalRestores) (This)->lpVtbl->SetAdditionalRestores(This,writerId,ct,wszLogicalPath,wszComponentName,bAdditionalRestores)
#define IVssBackupComponentsEx3_SetPreviousBackupStamp(This,writerId,ct,wszLogicalPath,wszComponentName,wszPreviousBackupStamp) (This)->lpVtbl->SetPreviousBackupStamp(This,writerId,ct,wszLogicalPath,wszComponentName,wszPreviousBackupStamp)
#define IVssBackupComponentsEx3_SaveAsXML(This,pbstrXML) (This)->lpVtbl->SaveAsXML(This,pbstrXML)
#define IVssBackupComponentsEx3_BackupComplete(This,ppAsync) (This)->lpVtbl->BackupComplete(This,ppAsync)
#define IVssBackupComponentsEx3_AddAlternativeLocationMapping(This,writerId,componentType,wszLogicalPath,wszComponentName,wszPath,wszFilespec,bRecursive,wszDestination) (This)->lpVtbl->AddAlternativeLocationMapping(This,writerId,componentType,wszLogicalPath,wszComponentName,wszPath,wszFilespec,bRecursive,wszDestination)
#define IVssBackupComponentsEx3_AddRestoreSubcomponent(This,writerId,componentType,wszLogicalPath,wszComponentName,wszSubComponentLogicalPath,wszSubComponentName,bRepair) (This)->lpVtbl->AddRestoreSubcomponent(This,writerId,componentType,wszLogicalPath,wszComponentName,wszSubComponentLogicalPath,wszSubComponentName,bRepair)
#define IVssBackupComponentsEx3_SetFileRestoreStatus(This,writerId,ct,wszLogicalPath,wszComponentName,status) (This)->lpVtbl->SetFileRestoreStatus(This,writerId,ct,wszLogicalPath,wszComponentName,status)
#define IVssBackupComponentsEx3_AddNewTarget(This,writerId,ct,wszLogicalPath,wszComponentName,wszPath,wszFileName,bRecursive,wszAlternatePath) (This)->lpVtbl->AddNewTarget(This,writerId,ct,wszLogicalPath,wszComponentName,wszPath,wszFileName,bRecursive,wszAlternatePath)
#define IVssBackupComponentsEx3_SetRangesFilePath(This,writerId,ct,wszLogicalPath,wszComponentName,iPartialFile,wszRangesFile) (This)->lpVtbl->SetRangesFilePath(This,writerId,ct,wszLogicalPath,wszComponentName,iPartialFile,wszRangesFile)
#define IVssBackupComponentsEx3_PreRestore(This,ppAsync) (This)->lpVtbl->PreRestore(This,ppAsync)
#define IVssBackupComponentsEx3_PostRestore(This,ppAsync) (This)->lpVtbl->PostRestore(This,ppAsync)
#define IVssBackupComponentsEx3_SetContext(This,lContext) (This)->lpVtbl->SetContext(This,lContext)
#define IVssBackupComponentsEx3_StartSnapshotSet(This,pSnapshotSetId) (This)->lpVtbl->StartSnapshotSet(This,pSnapshotSetId)
#define IVssBackupComponentsEx3_AddToSnapshotSet(This,pwszVolumeName,ProviderId,pidSnapshot) (This)->lpVtbl->AddToSnapshotSet(This,pwszVolumeName,ProviderId,pidSnapshot)
#define IVssBackupComponentsEx3_DoSnapshotSet(This,ppAsync) (This)->lpVtbl->DoSnapshotSet(This,ppAsync)
#define IVssBackupComponentsEx3_DeleteSnapshots(This,SourceObjectId,eSourceObjectType,bForceDelete,plDeletedSnapshots,pNondeletedSnapshotID) (This)->lpVtbl->DeleteSnapshots(This,SourceObjectId,eSourceObjectType,bForceDelete,plDeletedSnapshots,pNondeletedSnapshotID)
#define IVssBackupComponentsEx3_ImportSnapshots(This,ppAsync) (This)->lpVtbl->ImportSnapshots(This,ppAsync)
#define IVssBackupComponentsEx3_BreakSnapshotSet(This,SnapshotSetId) (This)->lpVtbl->BreakSnapshotSet(This,SnapshotSetId)
#define IVssBackupComponentsEx3_GetSnapshotProperties(This,SnapshotId,pProp) (This)->lpVtbl->GetSnapshotProperties(This,SnapshotId,pProp)
#define IVssBackupComponentsEx3_Query(This,QueriedObjectId,eQueriedObjectType,eReturnedObjectsType,ppEnum) (This)->lpVtbl->Query(This,QueriedObjectId,eQueriedObjectType,eReturnedObjectsType,ppEnum)
#define IVssBackupComponentsEx3_IsVolumeSupported(This,ProviderId,pwszVolumeName,pbSupportedByThisProvider) (This)->lpVtbl->IsVolumeSupported(This,ProviderId,pwszVolumeName,pbSupportedByThisProvider)
#define IVssBackupComponentsEx3_DisableWriterClasses(This,rgWriterClassId,cClassId) (This)->lpVtbl->DisableWriterClasses(This,rgWriterClassId,cClassId)
#define IVssBackupComponentsEx3_EnableWriterClasses(This,rgWriterClassId,cClassId) (This)->lpVtbl->EnableWriterClasses(This,rgWriterClassId,cClassId)
#define IVssBackupComponentsEx3_DisableWriterInstances(This,rgWriterInstanceId,cInstanceId) (This)->lpVtbl->DisableWriterInstances(This,rgWriterInstanceId,cInstanceId)
#define IVssBackupComponentsEx3_ExposeSnapshot(This,SnapshotId,wszPathFromRoot,lAttributes,wszExpose,pwszExposed) (This)->lpVtbl->ExposeSnapshot(This,SnapshotId,wszPathFromRoot,lAttributes,wszExpose,pwszExposed)
#define IVssBackupComponentsEx3_RevertToSnapshot(This,SnapshotId,bForceDismount) (This)->lpVtbl->RevertToSnapshot(This,SnapshotId,bForceDismount)
#define IVssBackupComponentsEx3_QueryRevertStatus(This,pwszVolume,ppAsync) (This)->lpVtbl->QueryRevertStatus(This,pwszVolume,ppAsync)
/*** IVssBackupComponentsEx methods ***/
#define IVssBackupComponentsEx3_GetWriterMetadataEx(This,iWriter,pidInstance,ppMetadata) (This)->lpVtbl->GetWriterMetadataEx(This,iWriter,pidInstance,ppMetadata)
#define IVssBackupComponentsEx3_SetSelectedForRestoreEx(This,writerId,ct,wszLogicalPath,wszComponentName,bSelectedForRestore,instanceId) (This)->lpVtbl->SetSelectedForRestoreEx(This,writerId,ct,wszLogicalPath,wszComponentName,bSelectedForRestore,instanceId)
/*** IVssBackupComponentsEx2 methods ***/
#define IVssBackupComponentsEx3_UnexposeSnapshot(This,snapshotId) (This)->lpVtbl->UnexposeSnapshot(This,snapshotId)
#define IVssBackupComponentsEx3_SetAuthoritativeRestore(This,writerId,ct,wszLogicalPath,wszComponentName,bAuth) (This)->lpVtbl->SetAuthoritativeRestore(This,writerId,ct,wszLogicalPath,wszComponentName,bAuth)
#define IVssBackupComponentsEx3_SetRollForward(This,writerId,ct,wszLogicalPath,wszComponentName,rollType,wszRollForwardPoint) (This)->lpVtbl->SetRollForward(This,writerId,ct,wszLogicalPath,wszComponentName,rollType,wszRollForwardPoint)
#define IVssBackupComponentsEx3_SetRestoreName(This,writerId,ct,wszLogicalPath,wszComponentName,wszRestoreName) (This)->lpVtbl->SetRestoreName(This,writerId,ct,wszLogicalPath,wszComponentName,wszRestoreName)
#define IVssBackupComponentsEx3_BreakSnapshotSetEx(This,SnapshotSetID,dwBreakFlags,ppAsync) (This)->lpVtbl->BreakSnapshotSetEx(This,SnapshotSetID,dwBreakFlags,ppAsync)
#define IVssBackupComponentsEx3_PreFastRecovery(This,SnapshotSetID,dwPreFastRecoveryFlags,ppAsync) (This)->lpVtbl->PreFastRecovery(This,SnapshotSetID,dwPreFastRecoveryFlags,ppAsync)
#define IVssBackupComponentsEx3_FastRecovery(This,SnapshotSetID,dwFastRecoveryFlags,ppAsync) (This)->lpVtbl->FastRecovery(This,SnapshotSetID,dwFastRecoveryFlags,ppAsync)
/*** IVssBackupComponentsEx3 methods ***/
#define IVssBackupComponentsEx3_GetWriterStatusEx(This,iWriter,pidInstance,pidWriter,pbstrWriter,pnStatus,phrFailureWriter,phrApplication,pbstrApplicationMessage) (This)->lpVtbl->GetWriterStatusEx(This,iWriter,pidInstance,pidWriter,pbstrWriter,pnStatus,phrFailureWriter,phrApplication,pbstrApplicationMessage)
#define IVssBackupComponentsEx3_AddSnapshotToRecoverySet(This,snapshotId,dwFlags,pwszDestinationVolume) (This)->lpVtbl->AddSnapshotToRecoverySet(This,snapshotId,dwFlags,pwszDestinationVolume)
#define IVssBackupComponentsEx3_RecoverSet(This,dwFlags,ppAsync) (This)->lpVtbl->RecoverSet(This,dwFlags,ppAsync)
#define IVssBackupComponentsEx3_GetSessionId(This,idSession) (This)->lpVtbl->GetSessionId(This,idSession)
#else
/*** IUnknown methods ***/
static inline HRESULT IVssBackupComponentsEx3_QueryInterface(IVssBackupComponentsEx3* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IVssBackupComponentsEx3_AddRef(IVssBackupComponentsEx3* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IVssBackupComponentsEx3_Release(IVssBackupComponentsEx3* This) {
    return This->lpVtbl->Release(This);
}
/*** IVssBackupComponents methods ***/
static inline HRESULT IVssBackupComponentsEx3_GetWriterComponentsCount(IVssBackupComponentsEx3* This,UINT *pcComponents) {
    return This->lpVtbl->GetWriterComponentsCount(This,pcComponents);
}
static inline HRESULT IVssBackupComponentsEx3_GetWriterComponents(IVssBackupComponentsEx3* This,UINT iWriter,IVssWriterComponentsExt **ppWriter) {
    return This->lpVtbl->GetWriterComponents(This,iWriter,ppWriter);
}
static inline HRESULT IVssBackupComponentsEx3_InitializeForBackup(IVssBackupComponentsEx3* This,BSTR bstrXML) {
    return This->lpVtbl->InitializeForBackup(This,bstrXML);
}
static inline HRESULT IVssBackupComponentsEx3_SetBackupState(IVssBackupComponentsEx3* This,boolean bSelectComponents,boolean bBackupBootableSystemState,VSS_BACKUP_TYPE backupType,boolean bPartialFileSupport) {
    return This->lpVtbl->SetBackupState(This,bSelectComponents,bBackupBootableSystemState,backupType,bPartialFileSupport);
}
static inline HRESULT IVssBackupComponentsEx3_InitializeForRestore(IVssBackupComponentsEx3* This,BSTR bstrXML) {
    return This->lpVtbl->InitializeForRestore(This,bstrXML);
}
static inline HRESULT IVssBackupComponentsEx3_SetRestoreState(IVssBackupComponentsEx3* This,VSS_RESTORE_TYPE restoreType) {
    return This->lpVtbl->SetRestoreState(This,restoreType);
}
static inline HRESULT IVssBackupComponentsEx3_GatherWriterMetadata(IVssBackupComponentsEx3* This,IVssAsync **pAsync) {
    return This->lpVtbl->GatherWriterMetadata(This,pAsync);
}
static inline HRESULT IVssBackupComponentsEx3_GetWriterMetadataCount(IVssBackupComponentsEx3* This,UINT *pcWriters) {
    return This->lpVtbl->GetWriterMetadataCount(This,pcWriters);
}
static inline HRESULT IVssBackupComponentsEx3_GetWriterMetadata(IVssBackupComponentsEx3* This,UINT iWriter,VSS_ID *pidInstance,IVssExamineWriterMetadata **ppMetadata) {
    return This->lpVtbl->GetWriterMetadata(This,iWriter,pidInstance,ppMetadata);
}
static inline HRESULT IVssBackupComponentsEx3_FreeWriterMetadata(IVssBackupComponentsEx3* This) {
    return This->lpVtbl->FreeWriterMetadata(This);
}
static inline HRESULT IVssBackupComponentsEx3_AddComponent(IVssBackupComponentsEx3* This,VSS_ID instanceId,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName) {
    return This->lpVtbl->AddComponent(This,instanceId,writerId,ct,wszLogicalPath,wszComponentName);
}
static inline HRESULT IVssBackupComponentsEx3_PrepareForBackup(IVssBackupComponentsEx3* This,IVssAsync **ppAsync) {
    return This->lpVtbl->PrepareForBackup(This,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx3_AbortBackup(IVssBackupComponentsEx3* This) {
    return This->lpVtbl->AbortBackup(This);
}
static inline HRESULT IVssBackupComponentsEx3_GatherWriterStatus(IVssBackupComponentsEx3* This,IVssAsync **pAsync) {
    return This->lpVtbl->GatherWriterStatus(This,pAsync);
}
static inline HRESULT IVssBackupComponentsEx3_GetWriterStatusCount(IVssBackupComponentsEx3* This,UINT *pcWriters) {
    return This->lpVtbl->GetWriterStatusCount(This,pcWriters);
}
static inline HRESULT IVssBackupComponentsEx3_FreeWriterStatus(IVssBackupComponentsEx3* This) {
    return This->lpVtbl->FreeWriterStatus(This);
}
static inline HRESULT IVssBackupComponentsEx3_GetWriterStatus(IVssBackupComponentsEx3* This,UINT iWriter,VSS_ID *pidInstance,VSS_ID *pidWriter,BSTR *pbstrWriter,VSS_WRITER_STATE *pnStatus,HRESULT *phResultFailure) {
    return This->lpVtbl->GetWriterStatus(This,iWriter,pidInstance,pidWriter,pbstrWriter,pnStatus,phResultFailure);
}
static inline HRESULT IVssBackupComponentsEx3_SetBackupSucceeded(IVssBackupComponentsEx3* This,VSS_ID instanceId,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,boolean bSucceded) {
    return This->lpVtbl->SetBackupSucceeded(This,instanceId,writerId,ct,wszLogicalPath,wszComponentName,bSucceded);
}
static inline HRESULT IVssBackupComponentsEx3_SetBackupOptions(IVssBackupComponentsEx3* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszBackupOptions) {
    return This->lpVtbl->SetBackupOptions(This,writerId,ct,wszLogicalPath,wszComponentName,wszBackupOptions);
}
static inline HRESULT IVssBackupComponentsEx3_SetSelectedForRestore(IVssBackupComponentsEx3* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,boolean bSelectedForRestore) {
    return This->lpVtbl->SetSelectedForRestore(This,writerId,ct,wszLogicalPath,wszComponentName,bSelectedForRestore);
}
static inline HRESULT IVssBackupComponentsEx3_SetRestoreOptions(IVssBackupComponentsEx3* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszRestoreOptions) {
    return This->lpVtbl->SetRestoreOptions(This,writerId,ct,wszLogicalPath,wszComponentName,wszRestoreOptions);
}
static inline HRESULT IVssBackupComponentsEx3_SetAdditionalRestores(IVssBackupComponentsEx3* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,boolean bAdditionalRestores) {
    return This->lpVtbl->SetAdditionalRestores(This,writerId,ct,wszLogicalPath,wszComponentName,bAdditionalRestores);
}
static inline HRESULT IVssBackupComponentsEx3_SetPreviousBackupStamp(IVssBackupComponentsEx3* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszPreviousBackupStamp) {
    return This->lpVtbl->SetPreviousBackupStamp(This,writerId,ct,wszLogicalPath,wszComponentName,wszPreviousBackupStamp);
}
static inline HRESULT IVssBackupComponentsEx3_SaveAsXML(IVssBackupComponentsEx3* This,BSTR *pbstrXML) {
    return This->lpVtbl->SaveAsXML(This,pbstrXML);
}
static inline HRESULT IVssBackupComponentsEx3_BackupComplete(IVssBackupComponentsEx3* This,IVssAsync **ppAsync) {
    return This->lpVtbl->BackupComplete(This,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx3_AddAlternativeLocationMapping(IVssBackupComponentsEx3* This,VSS_ID writerId,VSS_COMPONENT_TYPE componentType,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszPath,LPCWSTR wszFilespec,boolean bRecursive,LPCWSTR wszDestination) {
    return This->lpVtbl->AddAlternativeLocationMapping(This,writerId,componentType,wszLogicalPath,wszComponentName,wszPath,wszFilespec,bRecursive,wszDestination);
}
static inline HRESULT IVssBackupComponentsEx3_AddRestoreSubcomponent(IVssBackupComponentsEx3* This,VSS_ID writerId,VSS_COMPONENT_TYPE componentType,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszSubComponentLogicalPath,LPCWSTR wszSubComponentName,boolean bRepair) {
    return This->lpVtbl->AddRestoreSubcomponent(This,writerId,componentType,wszLogicalPath,wszComponentName,wszSubComponentLogicalPath,wszSubComponentName,bRepair);
}
static inline HRESULT IVssBackupComponentsEx3_SetFileRestoreStatus(IVssBackupComponentsEx3* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,VSS_FILE_RESTORE_STATUS status) {
    return This->lpVtbl->SetFileRestoreStatus(This,writerId,ct,wszLogicalPath,wszComponentName,status);
}
static inline HRESULT IVssBackupComponentsEx3_AddNewTarget(IVssBackupComponentsEx3* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszPath,LPCWSTR wszFileName,boolean bRecursive,LPCWSTR wszAlternatePath) {
    return This->lpVtbl->AddNewTarget(This,writerId,ct,wszLogicalPath,wszComponentName,wszPath,wszFileName,bRecursive,wszAlternatePath);
}
static inline HRESULT IVssBackupComponentsEx3_SetRangesFilePath(IVssBackupComponentsEx3* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,UINT iPartialFile,LPCWSTR wszRangesFile) {
    return This->lpVtbl->SetRangesFilePath(This,writerId,ct,wszLogicalPath,wszComponentName,iPartialFile,wszRangesFile);
}
static inline HRESULT IVssBackupComponentsEx3_PreRestore(IVssBackupComponentsEx3* This,IVssAsync **ppAsync) {
    return This->lpVtbl->PreRestore(This,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx3_PostRestore(IVssBackupComponentsEx3* This,IVssAsync **ppAsync) {
    return This->lpVtbl->PostRestore(This,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx3_SetContext(IVssBackupComponentsEx3* This,LONG lContext) {
    return This->lpVtbl->SetContext(This,lContext);
}
static inline HRESULT IVssBackupComponentsEx3_StartSnapshotSet(IVssBackupComponentsEx3* This,VSS_ID *pSnapshotSetId) {
    return This->lpVtbl->StartSnapshotSet(This,pSnapshotSetId);
}
static inline HRESULT IVssBackupComponentsEx3_AddToSnapshotSet(IVssBackupComponentsEx3* This,VSS_PWSZ pwszVolumeName,VSS_ID ProviderId,VSS_ID *pidSnapshot) {
    return This->lpVtbl->AddToSnapshotSet(This,pwszVolumeName,ProviderId,pidSnapshot);
}
static inline HRESULT IVssBackupComponentsEx3_DoSnapshotSet(IVssBackupComponentsEx3* This,IVssAsync **ppAsync) {
    return This->lpVtbl->DoSnapshotSet(This,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx3_DeleteSnapshots(IVssBackupComponentsEx3* This,VSS_ID SourceObjectId,VSS_OBJECT_TYPE eSourceObjectType,WINBOOL bForceDelete,LONG *plDeletedSnapshots,VSS_ID *pNondeletedSnapshotID) {
    return This->lpVtbl->DeleteSnapshots(This,SourceObjectId,eSourceObjectType,bForceDelete,plDeletedSnapshots,pNondeletedSnapshotID);
}
static inline HRESULT IVssBackupComponentsEx3_ImportSnapshots(IVssBackupComponentsEx3* This,IVssAsync **ppAsync) {
    return This->lpVtbl->ImportSnapshots(This,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx3_BreakSnapshotSet(IVssBackupComponentsEx3* This,VSS_ID SnapshotSetId) {
    return This->lpVtbl->BreakSnapshotSet(This,SnapshotSetId);
}
static inline HRESULT IVssBackupComponentsEx3_GetSnapshotProperties(IVssBackupComponentsEx3* This,VSS_ID SnapshotId,VSS_SNAPSHOT_PROP *pProp) {
    return This->lpVtbl->GetSnapshotProperties(This,SnapshotId,pProp);
}
static inline HRESULT IVssBackupComponentsEx3_Query(IVssBackupComponentsEx3* This,VSS_ID QueriedObjectId,VSS_OBJECT_TYPE eQueriedObjectType,VSS_OBJECT_TYPE eReturnedObjectsType,IVssEnumObject **ppEnum) {
    return This->lpVtbl->Query(This,QueriedObjectId,eQueriedObjectType,eReturnedObjectsType,ppEnum);
}
static inline HRESULT IVssBackupComponentsEx3_IsVolumeSupported(IVssBackupComponentsEx3* This,VSS_ID ProviderId,VSS_PWSZ pwszVolumeName,WINBOOL *pbSupportedByThisProvider) {
    return This->lpVtbl->IsVolumeSupported(This,ProviderId,pwszVolumeName,pbSupportedByThisProvider);
}
static inline HRESULT IVssBackupComponentsEx3_DisableWriterClasses(IVssBackupComponentsEx3* This,const VSS_ID *rgWriterClassId,UINT cClassId) {
    return This->lpVtbl->DisableWriterClasses(This,rgWriterClassId,cClassId);
}
static inline HRESULT IVssBackupComponentsEx3_EnableWriterClasses(IVssBackupComponentsEx3* This,const VSS_ID *rgWriterClassId,UINT cClassId) {
    return This->lpVtbl->EnableWriterClasses(This,rgWriterClassId,cClassId);
}
static inline HRESULT IVssBackupComponentsEx3_DisableWriterInstances(IVssBackupComponentsEx3* This,const VSS_ID *rgWriterInstanceId,UINT cInstanceId) {
    return This->lpVtbl->DisableWriterInstances(This,rgWriterInstanceId,cInstanceId);
}
static inline HRESULT IVssBackupComponentsEx3_ExposeSnapshot(IVssBackupComponentsEx3* This,VSS_ID SnapshotId,VSS_PWSZ wszPathFromRoot,LONG lAttributes,VSS_PWSZ wszExpose,VSS_PWSZ *pwszExposed) {
    return This->lpVtbl->ExposeSnapshot(This,SnapshotId,wszPathFromRoot,lAttributes,wszExpose,pwszExposed);
}
static inline HRESULT IVssBackupComponentsEx3_RevertToSnapshot(IVssBackupComponentsEx3* This,VSS_ID SnapshotId,WINBOOL bForceDismount) {
    return This->lpVtbl->RevertToSnapshot(This,SnapshotId,bForceDismount);
}
static inline HRESULT IVssBackupComponentsEx3_QueryRevertStatus(IVssBackupComponentsEx3* This,VSS_PWSZ pwszVolume,IVssAsync **ppAsync) {
    return This->lpVtbl->QueryRevertStatus(This,pwszVolume,ppAsync);
}
/*** IVssBackupComponentsEx methods ***/
static inline HRESULT IVssBackupComponentsEx3_GetWriterMetadataEx(IVssBackupComponentsEx3* This,UINT iWriter,VSS_ID *pidInstance,IVssExamineWriterMetadataEx **ppMetadata) {
    return This->lpVtbl->GetWriterMetadataEx(This,iWriter,pidInstance,ppMetadata);
}
static inline HRESULT IVssBackupComponentsEx3_SetSelectedForRestoreEx(IVssBackupComponentsEx3* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,boolean bSelectedForRestore,VSS_ID instanceId) {
    return This->lpVtbl->SetSelectedForRestoreEx(This,writerId,ct,wszLogicalPath,wszComponentName,bSelectedForRestore,instanceId);
}
/*** IVssBackupComponentsEx2 methods ***/
static inline HRESULT IVssBackupComponentsEx3_UnexposeSnapshot(IVssBackupComponentsEx3* This,VSS_ID snapshotId) {
    return This->lpVtbl->UnexposeSnapshot(This,snapshotId);
}
static inline HRESULT IVssBackupComponentsEx3_SetAuthoritativeRestore(IVssBackupComponentsEx3* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,boolean bAuth) {
    return This->lpVtbl->SetAuthoritativeRestore(This,writerId,ct,wszLogicalPath,wszComponentName,bAuth);
}
static inline HRESULT IVssBackupComponentsEx3_SetRollForward(IVssBackupComponentsEx3* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,VSS_ROLLFORWARD_TYPE rollType,LPCWSTR wszRollForwardPoint) {
    return This->lpVtbl->SetRollForward(This,writerId,ct,wszLogicalPath,wszComponentName,rollType,wszRollForwardPoint);
}
static inline HRESULT IVssBackupComponentsEx3_SetRestoreName(IVssBackupComponentsEx3* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszRestoreName) {
    return This->lpVtbl->SetRestoreName(This,writerId,ct,wszLogicalPath,wszComponentName,wszRestoreName);
}
static inline HRESULT IVssBackupComponentsEx3_BreakSnapshotSetEx(IVssBackupComponentsEx3* This,VSS_ID SnapshotSetID,DWORD dwBreakFlags,IVssAsync **ppAsync) {
    return This->lpVtbl->BreakSnapshotSetEx(This,SnapshotSetID,dwBreakFlags,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx3_PreFastRecovery(IVssBackupComponentsEx3* This,VSS_ID SnapshotSetID,DWORD dwPreFastRecoveryFlags,IVssAsync **ppAsync) {
    return This->lpVtbl->PreFastRecovery(This,SnapshotSetID,dwPreFastRecoveryFlags,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx3_FastRecovery(IVssBackupComponentsEx3* This,VSS_ID SnapshotSetID,DWORD dwFastRecoveryFlags,IVssAsync **ppAsync) {
    return This->lpVtbl->FastRecovery(This,SnapshotSetID,dwFastRecoveryFlags,ppAsync);
}
/*** IVssBackupComponentsEx3 methods ***/
static inline HRESULT IVssBackupComponentsEx3_GetWriterStatusEx(IVssBackupComponentsEx3* This,UINT iWriter,VSS_ID *pidInstance,VSS_ID *pidWriter,BSTR *pbstrWriter,VSS_WRITER_STATE *pnStatus,HRESULT *phrFailureWriter,HRESULT *phrApplication,BSTR *pbstrApplicationMessage) {
    return This->lpVtbl->GetWriterStatusEx(This,iWriter,pidInstance,pidWriter,pbstrWriter,pnStatus,phrFailureWriter,phrApplication,pbstrApplicationMessage);
}
static inline HRESULT IVssBackupComponentsEx3_AddSnapshotToRecoverySet(IVssBackupComponentsEx3* This,VSS_ID snapshotId,DWORD dwFlags,VSS_PWSZ pwszDestinationVolume) {
    return This->lpVtbl->AddSnapshotToRecoverySet(This,snapshotId,dwFlags,pwszDestinationVolume);
}
static inline HRESULT IVssBackupComponentsEx3_RecoverSet(IVssBackupComponentsEx3* This,DWORD dwFlags,IVssAsync **ppAsync) {
    return This->lpVtbl->RecoverSet(This,dwFlags,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx3_GetSessionId(IVssBackupComponentsEx3* This,VSS_ID *idSession) {
    return This->lpVtbl->GetSessionId(This,idSession);
}
#endif
#endif

#endif


#endif  /* __IVssBackupComponentsEx3_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IVssBackupComponentsEx4 interface
 */
#ifndef __IVssBackupComponentsEx4_INTERFACE_DEFINED__
#define __IVssBackupComponentsEx4_INTERFACE_DEFINED__

DEFINE_GUID(IID_IVssBackupComponentsEx4, 0xf434c2fd, 0xb553, 0x4961, 0xa9,0xf9, 0xa8,0xe9,0x0b,0x67,0x3e,0x53);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("f434c2fd-b553-4961-a9f9-a8e90b673e53")
IVssBackupComponentsEx4 : public IVssBackupComponentsEx3
{
    virtual HRESULT STDMETHODCALLTYPE GetRootAndLogicalPrefixPaths(
        VSS_PWSZ pwszFilePath,
        VSS_PWSZ *ppwszRootPath,
        VSS_PWSZ *ppwszLogicalPrefix,
        WINBOOL bNormalizeFQDNforRootPath = FALSE) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IVssBackupComponentsEx4, 0xf434c2fd, 0xb553, 0x4961, 0xa9,0xf9, 0xa8,0xe9,0x0b,0x67,0x3e,0x53)
#endif
#else
typedef struct IVssBackupComponentsEx4Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IVssBackupComponentsEx4 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IVssBackupComponentsEx4 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IVssBackupComponentsEx4 *This);

    /*** IVssBackupComponents methods ***/
    HRESULT (STDMETHODCALLTYPE *GetWriterComponentsCount)(
        IVssBackupComponentsEx4 *This,
        UINT *pcComponents);

    HRESULT (STDMETHODCALLTYPE *GetWriterComponents)(
        IVssBackupComponentsEx4 *This,
        UINT iWriter,
        IVssWriterComponentsExt **ppWriter);

    HRESULT (STDMETHODCALLTYPE *InitializeForBackup)(
        IVssBackupComponentsEx4 *This,
        BSTR bstrXML);

    HRESULT (STDMETHODCALLTYPE *SetBackupState)(
        IVssBackupComponentsEx4 *This,
        boolean bSelectComponents,
        boolean bBackupBootableSystemState,
        VSS_BACKUP_TYPE backupType,
        boolean bPartialFileSupport);

    HRESULT (STDMETHODCALLTYPE *InitializeForRestore)(
        IVssBackupComponentsEx4 *This,
        BSTR bstrXML);

    HRESULT (STDMETHODCALLTYPE *SetRestoreState)(
        IVssBackupComponentsEx4 *This,
        VSS_RESTORE_TYPE restoreType);

    HRESULT (STDMETHODCALLTYPE *GatherWriterMetadata)(
        IVssBackupComponentsEx4 *This,
        IVssAsync **pAsync);

    HRESULT (STDMETHODCALLTYPE *GetWriterMetadataCount)(
        IVssBackupComponentsEx4 *This,
        UINT *pcWriters);

    HRESULT (STDMETHODCALLTYPE *GetWriterMetadata)(
        IVssBackupComponentsEx4 *This,
        UINT iWriter,
        VSS_ID *pidInstance,
        IVssExamineWriterMetadata **ppMetadata);

    HRESULT (STDMETHODCALLTYPE *FreeWriterMetadata)(
        IVssBackupComponentsEx4 *This);

    HRESULT (STDMETHODCALLTYPE *AddComponent)(
        IVssBackupComponentsEx4 *This,
        VSS_ID instanceId,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName);

    HRESULT (STDMETHODCALLTYPE *PrepareForBackup)(
        IVssBackupComponentsEx4 *This,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *AbortBackup)(
        IVssBackupComponentsEx4 *This);

    HRESULT (STDMETHODCALLTYPE *GatherWriterStatus)(
        IVssBackupComponentsEx4 *This,
        IVssAsync **pAsync);

    HRESULT (STDMETHODCALLTYPE *GetWriterStatusCount)(
        IVssBackupComponentsEx4 *This,
        UINT *pcWriters);

    HRESULT (STDMETHODCALLTYPE *FreeWriterStatus)(
        IVssBackupComponentsEx4 *This);

    HRESULT (STDMETHODCALLTYPE *GetWriterStatus)(
        IVssBackupComponentsEx4 *This,
        UINT iWriter,
        VSS_ID *pidInstance,
        VSS_ID *pidWriter,
        BSTR *pbstrWriter,
        VSS_WRITER_STATE *pnStatus,
        HRESULT *phResultFailure);

    HRESULT (STDMETHODCALLTYPE *SetBackupSucceeded)(
        IVssBackupComponentsEx4 *This,
        VSS_ID instanceId,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        boolean bSucceded);

    HRESULT (STDMETHODCALLTYPE *SetBackupOptions)(
        IVssBackupComponentsEx4 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszBackupOptions);

    HRESULT (STDMETHODCALLTYPE *SetSelectedForRestore)(
        IVssBackupComponentsEx4 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        boolean bSelectedForRestore);

    HRESULT (STDMETHODCALLTYPE *SetRestoreOptions)(
        IVssBackupComponentsEx4 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszRestoreOptions);

    HRESULT (STDMETHODCALLTYPE *SetAdditionalRestores)(
        IVssBackupComponentsEx4 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        boolean bAdditionalRestores);

    HRESULT (STDMETHODCALLTYPE *SetPreviousBackupStamp)(
        IVssBackupComponentsEx4 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszPreviousBackupStamp);

    HRESULT (STDMETHODCALLTYPE *SaveAsXML)(
        IVssBackupComponentsEx4 *This,
        BSTR *pbstrXML);

    HRESULT (STDMETHODCALLTYPE *BackupComplete)(
        IVssBackupComponentsEx4 *This,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *AddAlternativeLocationMapping)(
        IVssBackupComponentsEx4 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE componentType,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszPath,
        LPCWSTR wszFilespec,
        boolean bRecursive,
        LPCWSTR wszDestination);

    HRESULT (STDMETHODCALLTYPE *AddRestoreSubcomponent)(
        IVssBackupComponentsEx4 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE componentType,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszSubComponentLogicalPath,
        LPCWSTR wszSubComponentName,
        boolean bRepair);

    HRESULT (STDMETHODCALLTYPE *SetFileRestoreStatus)(
        IVssBackupComponentsEx4 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        VSS_FILE_RESTORE_STATUS status);

    HRESULT (STDMETHODCALLTYPE *AddNewTarget)(
        IVssBackupComponentsEx4 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszPath,
        LPCWSTR wszFileName,
        boolean bRecursive,
        LPCWSTR wszAlternatePath);

    HRESULT (STDMETHODCALLTYPE *SetRangesFilePath)(
        IVssBackupComponentsEx4 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        UINT iPartialFile,
        LPCWSTR wszRangesFile);

    HRESULT (STDMETHODCALLTYPE *PreRestore)(
        IVssBackupComponentsEx4 *This,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *PostRestore)(
        IVssBackupComponentsEx4 *This,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *SetContext)(
        IVssBackupComponentsEx4 *This,
        LONG lContext);

    HRESULT (STDMETHODCALLTYPE *StartSnapshotSet)(
        IVssBackupComponentsEx4 *This,
        VSS_ID *pSnapshotSetId);

    HRESULT (STDMETHODCALLTYPE *AddToSnapshotSet)(
        IVssBackupComponentsEx4 *This,
        VSS_PWSZ pwszVolumeName,
        VSS_ID ProviderId,
        VSS_ID *pidSnapshot);

    HRESULT (STDMETHODCALLTYPE *DoSnapshotSet)(
        IVssBackupComponentsEx4 *This,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *DeleteSnapshots)(
        IVssBackupComponentsEx4 *This,
        VSS_ID SourceObjectId,
        VSS_OBJECT_TYPE eSourceObjectType,
        WINBOOL bForceDelete,
        LONG *plDeletedSnapshots,
        VSS_ID *pNondeletedSnapshotID);

    HRESULT (STDMETHODCALLTYPE *ImportSnapshots)(
        IVssBackupComponentsEx4 *This,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *BreakSnapshotSet)(
        IVssBackupComponentsEx4 *This,
        VSS_ID SnapshotSetId);

    HRESULT (STDMETHODCALLTYPE *GetSnapshotProperties)(
        IVssBackupComponentsEx4 *This,
        VSS_ID SnapshotId,
        VSS_SNAPSHOT_PROP *pProp);

    HRESULT (STDMETHODCALLTYPE *Query)(
        IVssBackupComponentsEx4 *This,
        VSS_ID QueriedObjectId,
        VSS_OBJECT_TYPE eQueriedObjectType,
        VSS_OBJECT_TYPE eReturnedObjectsType,
        IVssEnumObject **ppEnum);

    HRESULT (STDMETHODCALLTYPE *IsVolumeSupported)(
        IVssBackupComponentsEx4 *This,
        VSS_ID ProviderId,
        VSS_PWSZ pwszVolumeName,
        WINBOOL *pbSupportedByThisProvider);

    HRESULT (STDMETHODCALLTYPE *DisableWriterClasses)(
        IVssBackupComponentsEx4 *This,
        const VSS_ID *rgWriterClassId,
        UINT cClassId);

    HRESULT (STDMETHODCALLTYPE *EnableWriterClasses)(
        IVssBackupComponentsEx4 *This,
        const VSS_ID *rgWriterClassId,
        UINT cClassId);

    HRESULT (STDMETHODCALLTYPE *DisableWriterInstances)(
        IVssBackupComponentsEx4 *This,
        const VSS_ID *rgWriterInstanceId,
        UINT cInstanceId);

    HRESULT (STDMETHODCALLTYPE *ExposeSnapshot)(
        IVssBackupComponentsEx4 *This,
        VSS_ID SnapshotId,
        VSS_PWSZ wszPathFromRoot,
        LONG lAttributes,
        VSS_PWSZ wszExpose,
        VSS_PWSZ *pwszExposed);

    HRESULT (STDMETHODCALLTYPE *RevertToSnapshot)(
        IVssBackupComponentsEx4 *This,
        VSS_ID SnapshotId,
        WINBOOL bForceDismount);

    HRESULT (STDMETHODCALLTYPE *QueryRevertStatus)(
        IVssBackupComponentsEx4 *This,
        VSS_PWSZ pwszVolume,
        IVssAsync **ppAsync);

    /*** IVssBackupComponentsEx methods ***/
    HRESULT (STDMETHODCALLTYPE *GetWriterMetadataEx)(
        IVssBackupComponentsEx4 *This,
        UINT iWriter,
        VSS_ID *pidInstance,
        IVssExamineWriterMetadataEx **ppMetadata);

    HRESULT (STDMETHODCALLTYPE *SetSelectedForRestoreEx)(
        IVssBackupComponentsEx4 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        boolean bSelectedForRestore,
        VSS_ID instanceId);

    /*** IVssBackupComponentsEx2 methods ***/
    HRESULT (STDMETHODCALLTYPE *UnexposeSnapshot)(
        IVssBackupComponentsEx4 *This,
        VSS_ID snapshotId);

    HRESULT (STDMETHODCALLTYPE *SetAuthoritativeRestore)(
        IVssBackupComponentsEx4 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        boolean bAuth);

    HRESULT (STDMETHODCALLTYPE *SetRollForward)(
        IVssBackupComponentsEx4 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        VSS_ROLLFORWARD_TYPE rollType,
        LPCWSTR wszRollForwardPoint);

    HRESULT (STDMETHODCALLTYPE *SetRestoreName)(
        IVssBackupComponentsEx4 *This,
        VSS_ID writerId,
        VSS_COMPONENT_TYPE ct,
        LPCWSTR wszLogicalPath,
        LPCWSTR wszComponentName,
        LPCWSTR wszRestoreName);

    HRESULT (STDMETHODCALLTYPE *BreakSnapshotSetEx)(
        IVssBackupComponentsEx4 *This,
        VSS_ID SnapshotSetID,
        DWORD dwBreakFlags,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *PreFastRecovery)(
        IVssBackupComponentsEx4 *This,
        VSS_ID SnapshotSetID,
        DWORD dwPreFastRecoveryFlags,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *FastRecovery)(
        IVssBackupComponentsEx4 *This,
        VSS_ID SnapshotSetID,
        DWORD dwFastRecoveryFlags,
        IVssAsync **ppAsync);

    /*** IVssBackupComponentsEx3 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetWriterStatusEx)(
        IVssBackupComponentsEx4 *This,
        UINT iWriter,
        VSS_ID *pidInstance,
        VSS_ID *pidWriter,
        BSTR *pbstrWriter,
        VSS_WRITER_STATE *pnStatus,
        HRESULT *phrFailureWriter,
        HRESULT *phrApplication,
        BSTR *pbstrApplicationMessage);

    HRESULT (STDMETHODCALLTYPE *AddSnapshotToRecoverySet)(
        IVssBackupComponentsEx4 *This,
        VSS_ID snapshotId,
        DWORD dwFlags,
        VSS_PWSZ pwszDestinationVolume);

    HRESULT (STDMETHODCALLTYPE *RecoverSet)(
        IVssBackupComponentsEx4 *This,
        DWORD dwFlags,
        IVssAsync **ppAsync);

    HRESULT (STDMETHODCALLTYPE *GetSessionId)(
        IVssBackupComponentsEx4 *This,
        VSS_ID *idSession);

    /*** IVssBackupComponentsEx4 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetRootAndLogicalPrefixPaths)(
        IVssBackupComponentsEx4 *This,
        VSS_PWSZ pwszFilePath,
        VSS_PWSZ *ppwszRootPath,
        VSS_PWSZ *ppwszLogicalPrefix,
        WINBOOL bNormalizeFQDNforRootPath);

    END_INTERFACE
} IVssBackupComponentsEx4Vtbl;

interface IVssBackupComponentsEx4 {
    CONST_VTBL IVssBackupComponentsEx4Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IVssBackupComponentsEx4_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IVssBackupComponentsEx4_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IVssBackupComponentsEx4_Release(This) (This)->lpVtbl->Release(This)
/*** IVssBackupComponents methods ***/
#define IVssBackupComponentsEx4_GetWriterComponentsCount(This,pcComponents) (This)->lpVtbl->GetWriterComponentsCount(This,pcComponents)
#define IVssBackupComponentsEx4_GetWriterComponents(This,iWriter,ppWriter) (This)->lpVtbl->GetWriterComponents(This,iWriter,ppWriter)
#define IVssBackupComponentsEx4_InitializeForBackup(This,bstrXML) (This)->lpVtbl->InitializeForBackup(This,bstrXML)
#define IVssBackupComponentsEx4_SetBackupState(This,bSelectComponents,bBackupBootableSystemState,backupType,bPartialFileSupport) (This)->lpVtbl->SetBackupState(This,bSelectComponents,bBackupBootableSystemState,backupType,bPartialFileSupport)
#define IVssBackupComponentsEx4_InitializeForRestore(This,bstrXML) (This)->lpVtbl->InitializeForRestore(This,bstrXML)
#define IVssBackupComponentsEx4_SetRestoreState(This,restoreType) (This)->lpVtbl->SetRestoreState(This,restoreType)
#define IVssBackupComponentsEx4_GatherWriterMetadata(This,pAsync) (This)->lpVtbl->GatherWriterMetadata(This,pAsync)
#define IVssBackupComponentsEx4_GetWriterMetadataCount(This,pcWriters) (This)->lpVtbl->GetWriterMetadataCount(This,pcWriters)
#define IVssBackupComponentsEx4_GetWriterMetadata(This,iWriter,pidInstance,ppMetadata) (This)->lpVtbl->GetWriterMetadata(This,iWriter,pidInstance,ppMetadata)
#define IVssBackupComponentsEx4_FreeWriterMetadata(This) (This)->lpVtbl->FreeWriterMetadata(This)
#define IVssBackupComponentsEx4_AddComponent(This,instanceId,writerId,ct,wszLogicalPath,wszComponentName) (This)->lpVtbl->AddComponent(This,instanceId,writerId,ct,wszLogicalPath,wszComponentName)
#define IVssBackupComponentsEx4_PrepareForBackup(This,ppAsync) (This)->lpVtbl->PrepareForBackup(This,ppAsync)
#define IVssBackupComponentsEx4_AbortBackup(This) (This)->lpVtbl->AbortBackup(This)
#define IVssBackupComponentsEx4_GatherWriterStatus(This,pAsync) (This)->lpVtbl->GatherWriterStatus(This,pAsync)
#define IVssBackupComponentsEx4_GetWriterStatusCount(This,pcWriters) (This)->lpVtbl->GetWriterStatusCount(This,pcWriters)
#define IVssBackupComponentsEx4_FreeWriterStatus(This) (This)->lpVtbl->FreeWriterStatus(This)
#define IVssBackupComponentsEx4_GetWriterStatus(This,iWriter,pidInstance,pidWriter,pbstrWriter,pnStatus,phResultFailure) (This)->lpVtbl->GetWriterStatus(This,iWriter,pidInstance,pidWriter,pbstrWriter,pnStatus,phResultFailure)
#define IVssBackupComponentsEx4_SetBackupSucceeded(This,instanceId,writerId,ct,wszLogicalPath,wszComponentName,bSucceded) (This)->lpVtbl->SetBackupSucceeded(This,instanceId,writerId,ct,wszLogicalPath,wszComponentName,bSucceded)
#define IVssBackupComponentsEx4_SetBackupOptions(This,writerId,ct,wszLogicalPath,wszComponentName,wszBackupOptions) (This)->lpVtbl->SetBackupOptions(This,writerId,ct,wszLogicalPath,wszComponentName,wszBackupOptions)
#define IVssBackupComponentsEx4_SetSelectedForRestore(This,writerId,ct,wszLogicalPath,wszComponentName,bSelectedForRestore) (This)->lpVtbl->SetSelectedForRestore(This,writerId,ct,wszLogicalPath,wszComponentName,bSelectedForRestore)
#define IVssBackupComponentsEx4_SetRestoreOptions(This,writerId,ct,wszLogicalPath,wszComponentName,wszRestoreOptions) (This)->lpVtbl->SetRestoreOptions(This,writerId,ct,wszLogicalPath,wszComponentName,wszRestoreOptions)
#define IVssBackupComponentsEx4_SetAdditionalRestores(This,writerId,ct,wszLogicalPath,wszComponentName,bAdditionalRestores) (This)->lpVtbl->SetAdditionalRestores(This,writerId,ct,wszLogicalPath,wszComponentName,bAdditionalRestores)
#define IVssBackupComponentsEx4_SetPreviousBackupStamp(This,writerId,ct,wszLogicalPath,wszComponentName,wszPreviousBackupStamp) (This)->lpVtbl->SetPreviousBackupStamp(This,writerId,ct,wszLogicalPath,wszComponentName,wszPreviousBackupStamp)
#define IVssBackupComponentsEx4_SaveAsXML(This,pbstrXML) (This)->lpVtbl->SaveAsXML(This,pbstrXML)
#define IVssBackupComponentsEx4_BackupComplete(This,ppAsync) (This)->lpVtbl->BackupComplete(This,ppAsync)
#define IVssBackupComponentsEx4_AddAlternativeLocationMapping(This,writerId,componentType,wszLogicalPath,wszComponentName,wszPath,wszFilespec,bRecursive,wszDestination) (This)->lpVtbl->AddAlternativeLocationMapping(This,writerId,componentType,wszLogicalPath,wszComponentName,wszPath,wszFilespec,bRecursive,wszDestination)
#define IVssBackupComponentsEx4_AddRestoreSubcomponent(This,writerId,componentType,wszLogicalPath,wszComponentName,wszSubComponentLogicalPath,wszSubComponentName,bRepair) (This)->lpVtbl->AddRestoreSubcomponent(This,writerId,componentType,wszLogicalPath,wszComponentName,wszSubComponentLogicalPath,wszSubComponentName,bRepair)
#define IVssBackupComponentsEx4_SetFileRestoreStatus(This,writerId,ct,wszLogicalPath,wszComponentName,status) (This)->lpVtbl->SetFileRestoreStatus(This,writerId,ct,wszLogicalPath,wszComponentName,status)
#define IVssBackupComponentsEx4_AddNewTarget(This,writerId,ct,wszLogicalPath,wszComponentName,wszPath,wszFileName,bRecursive,wszAlternatePath) (This)->lpVtbl->AddNewTarget(This,writerId,ct,wszLogicalPath,wszComponentName,wszPath,wszFileName,bRecursive,wszAlternatePath)
#define IVssBackupComponentsEx4_SetRangesFilePath(This,writerId,ct,wszLogicalPath,wszComponentName,iPartialFile,wszRangesFile) (This)->lpVtbl->SetRangesFilePath(This,writerId,ct,wszLogicalPath,wszComponentName,iPartialFile,wszRangesFile)
#define IVssBackupComponentsEx4_PreRestore(This,ppAsync) (This)->lpVtbl->PreRestore(This,ppAsync)
#define IVssBackupComponentsEx4_PostRestore(This,ppAsync) (This)->lpVtbl->PostRestore(This,ppAsync)
#define IVssBackupComponentsEx4_SetContext(This,lContext) (This)->lpVtbl->SetContext(This,lContext)
#define IVssBackupComponentsEx4_StartSnapshotSet(This,pSnapshotSetId) (This)->lpVtbl->StartSnapshotSet(This,pSnapshotSetId)
#define IVssBackupComponentsEx4_AddToSnapshotSet(This,pwszVolumeName,ProviderId,pidSnapshot) (This)->lpVtbl->AddToSnapshotSet(This,pwszVolumeName,ProviderId,pidSnapshot)
#define IVssBackupComponentsEx4_DoSnapshotSet(This,ppAsync) (This)->lpVtbl->DoSnapshotSet(This,ppAsync)
#define IVssBackupComponentsEx4_DeleteSnapshots(This,SourceObjectId,eSourceObjectType,bForceDelete,plDeletedSnapshots,pNondeletedSnapshotID) (This)->lpVtbl->DeleteSnapshots(This,SourceObjectId,eSourceObjectType,bForceDelete,plDeletedSnapshots,pNondeletedSnapshotID)
#define IVssBackupComponentsEx4_ImportSnapshots(This,ppAsync) (This)->lpVtbl->ImportSnapshots(This,ppAsync)
#define IVssBackupComponentsEx4_BreakSnapshotSet(This,SnapshotSetId) (This)->lpVtbl->BreakSnapshotSet(This,SnapshotSetId)
#define IVssBackupComponentsEx4_GetSnapshotProperties(This,SnapshotId,pProp) (This)->lpVtbl->GetSnapshotProperties(This,SnapshotId,pProp)
#define IVssBackupComponentsEx4_Query(This,QueriedObjectId,eQueriedObjectType,eReturnedObjectsType,ppEnum) (This)->lpVtbl->Query(This,QueriedObjectId,eQueriedObjectType,eReturnedObjectsType,ppEnum)
#define IVssBackupComponentsEx4_IsVolumeSupported(This,ProviderId,pwszVolumeName,pbSupportedByThisProvider) (This)->lpVtbl->IsVolumeSupported(This,ProviderId,pwszVolumeName,pbSupportedByThisProvider)
#define IVssBackupComponentsEx4_DisableWriterClasses(This,rgWriterClassId,cClassId) (This)->lpVtbl->DisableWriterClasses(This,rgWriterClassId,cClassId)
#define IVssBackupComponentsEx4_EnableWriterClasses(This,rgWriterClassId,cClassId) (This)->lpVtbl->EnableWriterClasses(This,rgWriterClassId,cClassId)
#define IVssBackupComponentsEx4_DisableWriterInstances(This,rgWriterInstanceId,cInstanceId) (This)->lpVtbl->DisableWriterInstances(This,rgWriterInstanceId,cInstanceId)
#define IVssBackupComponentsEx4_ExposeSnapshot(This,SnapshotId,wszPathFromRoot,lAttributes,wszExpose,pwszExposed) (This)->lpVtbl->ExposeSnapshot(This,SnapshotId,wszPathFromRoot,lAttributes,wszExpose,pwszExposed)
#define IVssBackupComponentsEx4_RevertToSnapshot(This,SnapshotId,bForceDismount) (This)->lpVtbl->RevertToSnapshot(This,SnapshotId,bForceDismount)
#define IVssBackupComponentsEx4_QueryRevertStatus(This,pwszVolume,ppAsync) (This)->lpVtbl->QueryRevertStatus(This,pwszVolume,ppAsync)
/*** IVssBackupComponentsEx methods ***/
#define IVssBackupComponentsEx4_GetWriterMetadataEx(This,iWriter,pidInstance,ppMetadata) (This)->lpVtbl->GetWriterMetadataEx(This,iWriter,pidInstance,ppMetadata)
#define IVssBackupComponentsEx4_SetSelectedForRestoreEx(This,writerId,ct,wszLogicalPath,wszComponentName,bSelectedForRestore,instanceId) (This)->lpVtbl->SetSelectedForRestoreEx(This,writerId,ct,wszLogicalPath,wszComponentName,bSelectedForRestore,instanceId)
/*** IVssBackupComponentsEx2 methods ***/
#define IVssBackupComponentsEx4_UnexposeSnapshot(This,snapshotId) (This)->lpVtbl->UnexposeSnapshot(This,snapshotId)
#define IVssBackupComponentsEx4_SetAuthoritativeRestore(This,writerId,ct,wszLogicalPath,wszComponentName,bAuth) (This)->lpVtbl->SetAuthoritativeRestore(This,writerId,ct,wszLogicalPath,wszComponentName,bAuth)
#define IVssBackupComponentsEx4_SetRollForward(This,writerId,ct,wszLogicalPath,wszComponentName,rollType,wszRollForwardPoint) (This)->lpVtbl->SetRollForward(This,writerId,ct,wszLogicalPath,wszComponentName,rollType,wszRollForwardPoint)
#define IVssBackupComponentsEx4_SetRestoreName(This,writerId,ct,wszLogicalPath,wszComponentName,wszRestoreName) (This)->lpVtbl->SetRestoreName(This,writerId,ct,wszLogicalPath,wszComponentName,wszRestoreName)
#define IVssBackupComponentsEx4_BreakSnapshotSetEx(This,SnapshotSetID,dwBreakFlags,ppAsync) (This)->lpVtbl->BreakSnapshotSetEx(This,SnapshotSetID,dwBreakFlags,ppAsync)
#define IVssBackupComponentsEx4_PreFastRecovery(This,SnapshotSetID,dwPreFastRecoveryFlags,ppAsync) (This)->lpVtbl->PreFastRecovery(This,SnapshotSetID,dwPreFastRecoveryFlags,ppAsync)
#define IVssBackupComponentsEx4_FastRecovery(This,SnapshotSetID,dwFastRecoveryFlags,ppAsync) (This)->lpVtbl->FastRecovery(This,SnapshotSetID,dwFastRecoveryFlags,ppAsync)
/*** IVssBackupComponentsEx3 methods ***/
#define IVssBackupComponentsEx4_GetWriterStatusEx(This,iWriter,pidInstance,pidWriter,pbstrWriter,pnStatus,phrFailureWriter,phrApplication,pbstrApplicationMessage) (This)->lpVtbl->GetWriterStatusEx(This,iWriter,pidInstance,pidWriter,pbstrWriter,pnStatus,phrFailureWriter,phrApplication,pbstrApplicationMessage)
#define IVssBackupComponentsEx4_AddSnapshotToRecoverySet(This,snapshotId,dwFlags,pwszDestinationVolume) (This)->lpVtbl->AddSnapshotToRecoverySet(This,snapshotId,dwFlags,pwszDestinationVolume)
#define IVssBackupComponentsEx4_RecoverSet(This,dwFlags,ppAsync) (This)->lpVtbl->RecoverSet(This,dwFlags,ppAsync)
#define IVssBackupComponentsEx4_GetSessionId(This,idSession) (This)->lpVtbl->GetSessionId(This,idSession)
/*** IVssBackupComponentsEx4 methods ***/
#define IVssBackupComponentsEx4_GetRootAndLogicalPrefixPaths(This,pwszFilePath,ppwszRootPath,ppwszLogicalPrefix,bNormalizeFQDNforRootPath) (This)->lpVtbl->GetRootAndLogicalPrefixPaths(This,pwszFilePath,ppwszRootPath,ppwszLogicalPrefix,bNormalizeFQDNforRootPath)
#else
/*** IUnknown methods ***/
static inline HRESULT IVssBackupComponentsEx4_QueryInterface(IVssBackupComponentsEx4* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG IVssBackupComponentsEx4_AddRef(IVssBackupComponentsEx4* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG IVssBackupComponentsEx4_Release(IVssBackupComponentsEx4* This) {
    return This->lpVtbl->Release(This);
}
/*** IVssBackupComponents methods ***/
static inline HRESULT IVssBackupComponentsEx4_GetWriterComponentsCount(IVssBackupComponentsEx4* This,UINT *pcComponents) {
    return This->lpVtbl->GetWriterComponentsCount(This,pcComponents);
}
static inline HRESULT IVssBackupComponentsEx4_GetWriterComponents(IVssBackupComponentsEx4* This,UINT iWriter,IVssWriterComponentsExt **ppWriter) {
    return This->lpVtbl->GetWriterComponents(This,iWriter,ppWriter);
}
static inline HRESULT IVssBackupComponentsEx4_InitializeForBackup(IVssBackupComponentsEx4* This,BSTR bstrXML) {
    return This->lpVtbl->InitializeForBackup(This,bstrXML);
}
static inline HRESULT IVssBackupComponentsEx4_SetBackupState(IVssBackupComponentsEx4* This,boolean bSelectComponents,boolean bBackupBootableSystemState,VSS_BACKUP_TYPE backupType,boolean bPartialFileSupport) {
    return This->lpVtbl->SetBackupState(This,bSelectComponents,bBackupBootableSystemState,backupType,bPartialFileSupport);
}
static inline HRESULT IVssBackupComponentsEx4_InitializeForRestore(IVssBackupComponentsEx4* This,BSTR bstrXML) {
    return This->lpVtbl->InitializeForRestore(This,bstrXML);
}
static inline HRESULT IVssBackupComponentsEx4_SetRestoreState(IVssBackupComponentsEx4* This,VSS_RESTORE_TYPE restoreType) {
    return This->lpVtbl->SetRestoreState(This,restoreType);
}
static inline HRESULT IVssBackupComponentsEx4_GatherWriterMetadata(IVssBackupComponentsEx4* This,IVssAsync **pAsync) {
    return This->lpVtbl->GatherWriterMetadata(This,pAsync);
}
static inline HRESULT IVssBackupComponentsEx4_GetWriterMetadataCount(IVssBackupComponentsEx4* This,UINT *pcWriters) {
    return This->lpVtbl->GetWriterMetadataCount(This,pcWriters);
}
static inline HRESULT IVssBackupComponentsEx4_GetWriterMetadata(IVssBackupComponentsEx4* This,UINT iWriter,VSS_ID *pidInstance,IVssExamineWriterMetadata **ppMetadata) {
    return This->lpVtbl->GetWriterMetadata(This,iWriter,pidInstance,ppMetadata);
}
static inline HRESULT IVssBackupComponentsEx4_FreeWriterMetadata(IVssBackupComponentsEx4* This) {
    return This->lpVtbl->FreeWriterMetadata(This);
}
static inline HRESULT IVssBackupComponentsEx4_AddComponent(IVssBackupComponentsEx4* This,VSS_ID instanceId,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName) {
    return This->lpVtbl->AddComponent(This,instanceId,writerId,ct,wszLogicalPath,wszComponentName);
}
static inline HRESULT IVssBackupComponentsEx4_PrepareForBackup(IVssBackupComponentsEx4* This,IVssAsync **ppAsync) {
    return This->lpVtbl->PrepareForBackup(This,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx4_AbortBackup(IVssBackupComponentsEx4* This) {
    return This->lpVtbl->AbortBackup(This);
}
static inline HRESULT IVssBackupComponentsEx4_GatherWriterStatus(IVssBackupComponentsEx4* This,IVssAsync **pAsync) {
    return This->lpVtbl->GatherWriterStatus(This,pAsync);
}
static inline HRESULT IVssBackupComponentsEx4_GetWriterStatusCount(IVssBackupComponentsEx4* This,UINT *pcWriters) {
    return This->lpVtbl->GetWriterStatusCount(This,pcWriters);
}
static inline HRESULT IVssBackupComponentsEx4_FreeWriterStatus(IVssBackupComponentsEx4* This) {
    return This->lpVtbl->FreeWriterStatus(This);
}
static inline HRESULT IVssBackupComponentsEx4_GetWriterStatus(IVssBackupComponentsEx4* This,UINT iWriter,VSS_ID *pidInstance,VSS_ID *pidWriter,BSTR *pbstrWriter,VSS_WRITER_STATE *pnStatus,HRESULT *phResultFailure) {
    return This->lpVtbl->GetWriterStatus(This,iWriter,pidInstance,pidWriter,pbstrWriter,pnStatus,phResultFailure);
}
static inline HRESULT IVssBackupComponentsEx4_SetBackupSucceeded(IVssBackupComponentsEx4* This,VSS_ID instanceId,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,boolean bSucceded) {
    return This->lpVtbl->SetBackupSucceeded(This,instanceId,writerId,ct,wszLogicalPath,wszComponentName,bSucceded);
}
static inline HRESULT IVssBackupComponentsEx4_SetBackupOptions(IVssBackupComponentsEx4* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszBackupOptions) {
    return This->lpVtbl->SetBackupOptions(This,writerId,ct,wszLogicalPath,wszComponentName,wszBackupOptions);
}
static inline HRESULT IVssBackupComponentsEx4_SetSelectedForRestore(IVssBackupComponentsEx4* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,boolean bSelectedForRestore) {
    return This->lpVtbl->SetSelectedForRestore(This,writerId,ct,wszLogicalPath,wszComponentName,bSelectedForRestore);
}
static inline HRESULT IVssBackupComponentsEx4_SetRestoreOptions(IVssBackupComponentsEx4* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszRestoreOptions) {
    return This->lpVtbl->SetRestoreOptions(This,writerId,ct,wszLogicalPath,wszComponentName,wszRestoreOptions);
}
static inline HRESULT IVssBackupComponentsEx4_SetAdditionalRestores(IVssBackupComponentsEx4* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,boolean bAdditionalRestores) {
    return This->lpVtbl->SetAdditionalRestores(This,writerId,ct,wszLogicalPath,wszComponentName,bAdditionalRestores);
}
static inline HRESULT IVssBackupComponentsEx4_SetPreviousBackupStamp(IVssBackupComponentsEx4* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszPreviousBackupStamp) {
    return This->lpVtbl->SetPreviousBackupStamp(This,writerId,ct,wszLogicalPath,wszComponentName,wszPreviousBackupStamp);
}
static inline HRESULT IVssBackupComponentsEx4_SaveAsXML(IVssBackupComponentsEx4* This,BSTR *pbstrXML) {
    return This->lpVtbl->SaveAsXML(This,pbstrXML);
}
static inline HRESULT IVssBackupComponentsEx4_BackupComplete(IVssBackupComponentsEx4* This,IVssAsync **ppAsync) {
    return This->lpVtbl->BackupComplete(This,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx4_AddAlternativeLocationMapping(IVssBackupComponentsEx4* This,VSS_ID writerId,VSS_COMPONENT_TYPE componentType,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszPath,LPCWSTR wszFilespec,boolean bRecursive,LPCWSTR wszDestination) {
    return This->lpVtbl->AddAlternativeLocationMapping(This,writerId,componentType,wszLogicalPath,wszComponentName,wszPath,wszFilespec,bRecursive,wszDestination);
}
static inline HRESULT IVssBackupComponentsEx4_AddRestoreSubcomponent(IVssBackupComponentsEx4* This,VSS_ID writerId,VSS_COMPONENT_TYPE componentType,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszSubComponentLogicalPath,LPCWSTR wszSubComponentName,boolean bRepair) {
    return This->lpVtbl->AddRestoreSubcomponent(This,writerId,componentType,wszLogicalPath,wszComponentName,wszSubComponentLogicalPath,wszSubComponentName,bRepair);
}
static inline HRESULT IVssBackupComponentsEx4_SetFileRestoreStatus(IVssBackupComponentsEx4* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,VSS_FILE_RESTORE_STATUS status) {
    return This->lpVtbl->SetFileRestoreStatus(This,writerId,ct,wszLogicalPath,wszComponentName,status);
}
static inline HRESULT IVssBackupComponentsEx4_AddNewTarget(IVssBackupComponentsEx4* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszPath,LPCWSTR wszFileName,boolean bRecursive,LPCWSTR wszAlternatePath) {
    return This->lpVtbl->AddNewTarget(This,writerId,ct,wszLogicalPath,wszComponentName,wszPath,wszFileName,bRecursive,wszAlternatePath);
}
static inline HRESULT IVssBackupComponentsEx4_SetRangesFilePath(IVssBackupComponentsEx4* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,UINT iPartialFile,LPCWSTR wszRangesFile) {
    return This->lpVtbl->SetRangesFilePath(This,writerId,ct,wszLogicalPath,wszComponentName,iPartialFile,wszRangesFile);
}
static inline HRESULT IVssBackupComponentsEx4_PreRestore(IVssBackupComponentsEx4* This,IVssAsync **ppAsync) {
    return This->lpVtbl->PreRestore(This,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx4_PostRestore(IVssBackupComponentsEx4* This,IVssAsync **ppAsync) {
    return This->lpVtbl->PostRestore(This,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx4_SetContext(IVssBackupComponentsEx4* This,LONG lContext) {
    return This->lpVtbl->SetContext(This,lContext);
}
static inline HRESULT IVssBackupComponentsEx4_StartSnapshotSet(IVssBackupComponentsEx4* This,VSS_ID *pSnapshotSetId) {
    return This->lpVtbl->StartSnapshotSet(This,pSnapshotSetId);
}
static inline HRESULT IVssBackupComponentsEx4_AddToSnapshotSet(IVssBackupComponentsEx4* This,VSS_PWSZ pwszVolumeName,VSS_ID ProviderId,VSS_ID *pidSnapshot) {
    return This->lpVtbl->AddToSnapshotSet(This,pwszVolumeName,ProviderId,pidSnapshot);
}
static inline HRESULT IVssBackupComponentsEx4_DoSnapshotSet(IVssBackupComponentsEx4* This,IVssAsync **ppAsync) {
    return This->lpVtbl->DoSnapshotSet(This,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx4_DeleteSnapshots(IVssBackupComponentsEx4* This,VSS_ID SourceObjectId,VSS_OBJECT_TYPE eSourceObjectType,WINBOOL bForceDelete,LONG *plDeletedSnapshots,VSS_ID *pNondeletedSnapshotID) {
    return This->lpVtbl->DeleteSnapshots(This,SourceObjectId,eSourceObjectType,bForceDelete,plDeletedSnapshots,pNondeletedSnapshotID);
}
static inline HRESULT IVssBackupComponentsEx4_ImportSnapshots(IVssBackupComponentsEx4* This,IVssAsync **ppAsync) {
    return This->lpVtbl->ImportSnapshots(This,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx4_BreakSnapshotSet(IVssBackupComponentsEx4* This,VSS_ID SnapshotSetId) {
    return This->lpVtbl->BreakSnapshotSet(This,SnapshotSetId);
}
static inline HRESULT IVssBackupComponentsEx4_GetSnapshotProperties(IVssBackupComponentsEx4* This,VSS_ID SnapshotId,VSS_SNAPSHOT_PROP *pProp) {
    return This->lpVtbl->GetSnapshotProperties(This,SnapshotId,pProp);
}
static inline HRESULT IVssBackupComponentsEx4_Query(IVssBackupComponentsEx4* This,VSS_ID QueriedObjectId,VSS_OBJECT_TYPE eQueriedObjectType,VSS_OBJECT_TYPE eReturnedObjectsType,IVssEnumObject **ppEnum) {
    return This->lpVtbl->Query(This,QueriedObjectId,eQueriedObjectType,eReturnedObjectsType,ppEnum);
}
static inline HRESULT IVssBackupComponentsEx4_IsVolumeSupported(IVssBackupComponentsEx4* This,VSS_ID ProviderId,VSS_PWSZ pwszVolumeName,WINBOOL *pbSupportedByThisProvider) {
    return This->lpVtbl->IsVolumeSupported(This,ProviderId,pwszVolumeName,pbSupportedByThisProvider);
}
static inline HRESULT IVssBackupComponentsEx4_DisableWriterClasses(IVssBackupComponentsEx4* This,const VSS_ID *rgWriterClassId,UINT cClassId) {
    return This->lpVtbl->DisableWriterClasses(This,rgWriterClassId,cClassId);
}
static inline HRESULT IVssBackupComponentsEx4_EnableWriterClasses(IVssBackupComponentsEx4* This,const VSS_ID *rgWriterClassId,UINT cClassId) {
    return This->lpVtbl->EnableWriterClasses(This,rgWriterClassId,cClassId);
}
static inline HRESULT IVssBackupComponentsEx4_DisableWriterInstances(IVssBackupComponentsEx4* This,const VSS_ID *rgWriterInstanceId,UINT cInstanceId) {
    return This->lpVtbl->DisableWriterInstances(This,rgWriterInstanceId,cInstanceId);
}
static inline HRESULT IVssBackupComponentsEx4_ExposeSnapshot(IVssBackupComponentsEx4* This,VSS_ID SnapshotId,VSS_PWSZ wszPathFromRoot,LONG lAttributes,VSS_PWSZ wszExpose,VSS_PWSZ *pwszExposed) {
    return This->lpVtbl->ExposeSnapshot(This,SnapshotId,wszPathFromRoot,lAttributes,wszExpose,pwszExposed);
}
static inline HRESULT IVssBackupComponentsEx4_RevertToSnapshot(IVssBackupComponentsEx4* This,VSS_ID SnapshotId,WINBOOL bForceDismount) {
    return This->lpVtbl->RevertToSnapshot(This,SnapshotId,bForceDismount);
}
static inline HRESULT IVssBackupComponentsEx4_QueryRevertStatus(IVssBackupComponentsEx4* This,VSS_PWSZ pwszVolume,IVssAsync **ppAsync) {
    return This->lpVtbl->QueryRevertStatus(This,pwszVolume,ppAsync);
}
/*** IVssBackupComponentsEx methods ***/
static inline HRESULT IVssBackupComponentsEx4_GetWriterMetadataEx(IVssBackupComponentsEx4* This,UINT iWriter,VSS_ID *pidInstance,IVssExamineWriterMetadataEx **ppMetadata) {
    return This->lpVtbl->GetWriterMetadataEx(This,iWriter,pidInstance,ppMetadata);
}
static inline HRESULT IVssBackupComponentsEx4_SetSelectedForRestoreEx(IVssBackupComponentsEx4* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,boolean bSelectedForRestore,VSS_ID instanceId) {
    return This->lpVtbl->SetSelectedForRestoreEx(This,writerId,ct,wszLogicalPath,wszComponentName,bSelectedForRestore,instanceId);
}
/*** IVssBackupComponentsEx2 methods ***/
static inline HRESULT IVssBackupComponentsEx4_UnexposeSnapshot(IVssBackupComponentsEx4* This,VSS_ID snapshotId) {
    return This->lpVtbl->UnexposeSnapshot(This,snapshotId);
}
static inline HRESULT IVssBackupComponentsEx4_SetAuthoritativeRestore(IVssBackupComponentsEx4* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,boolean bAuth) {
    return This->lpVtbl->SetAuthoritativeRestore(This,writerId,ct,wszLogicalPath,wszComponentName,bAuth);
}
static inline HRESULT IVssBackupComponentsEx4_SetRollForward(IVssBackupComponentsEx4* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,VSS_ROLLFORWARD_TYPE rollType,LPCWSTR wszRollForwardPoint) {
    return This->lpVtbl->SetRollForward(This,writerId,ct,wszLogicalPath,wszComponentName,rollType,wszRollForwardPoint);
}
static inline HRESULT IVssBackupComponentsEx4_SetRestoreName(IVssBackupComponentsEx4* This,VSS_ID writerId,VSS_COMPONENT_TYPE ct,LPCWSTR wszLogicalPath,LPCWSTR wszComponentName,LPCWSTR wszRestoreName) {
    return This->lpVtbl->SetRestoreName(This,writerId,ct,wszLogicalPath,wszComponentName,wszRestoreName);
}
static inline HRESULT IVssBackupComponentsEx4_BreakSnapshotSetEx(IVssBackupComponentsEx4* This,VSS_ID SnapshotSetID,DWORD dwBreakFlags,IVssAsync **ppAsync) {
    return This->lpVtbl->BreakSnapshotSetEx(This,SnapshotSetID,dwBreakFlags,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx4_PreFastRecovery(IVssBackupComponentsEx4* This,VSS_ID SnapshotSetID,DWORD dwPreFastRecoveryFlags,IVssAsync **ppAsync) {
    return This->lpVtbl->PreFastRecovery(This,SnapshotSetID,dwPreFastRecoveryFlags,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx4_FastRecovery(IVssBackupComponentsEx4* This,VSS_ID SnapshotSetID,DWORD dwFastRecoveryFlags,IVssAsync **ppAsync) {
    return This->lpVtbl->FastRecovery(This,SnapshotSetID,dwFastRecoveryFlags,ppAsync);
}
/*** IVssBackupComponentsEx3 methods ***/
static inline HRESULT IVssBackupComponentsEx4_GetWriterStatusEx(IVssBackupComponentsEx4* This,UINT iWriter,VSS_ID *pidInstance,VSS_ID *pidWriter,BSTR *pbstrWriter,VSS_WRITER_STATE *pnStatus,HRESULT *phrFailureWriter,HRESULT *phrApplication,BSTR *pbstrApplicationMessage) {
    return This->lpVtbl->GetWriterStatusEx(This,iWriter,pidInstance,pidWriter,pbstrWriter,pnStatus,phrFailureWriter,phrApplication,pbstrApplicationMessage);
}
static inline HRESULT IVssBackupComponentsEx4_AddSnapshotToRecoverySet(IVssBackupComponentsEx4* This,VSS_ID snapshotId,DWORD dwFlags,VSS_PWSZ pwszDestinationVolume) {
    return This->lpVtbl->AddSnapshotToRecoverySet(This,snapshotId,dwFlags,pwszDestinationVolume);
}
static inline HRESULT IVssBackupComponentsEx4_RecoverSet(IVssBackupComponentsEx4* This,DWORD dwFlags,IVssAsync **ppAsync) {
    return This->lpVtbl->RecoverSet(This,dwFlags,ppAsync);
}
static inline HRESULT IVssBackupComponentsEx4_GetSessionId(IVssBackupComponentsEx4* This,VSS_ID *idSession) {
    return This->lpVtbl->GetSessionId(This,idSession);
}
/*** IVssBackupComponentsEx4 methods ***/
static inline HRESULT IVssBackupComponentsEx4_GetRootAndLogicalPrefixPaths(IVssBackupComponentsEx4* This,VSS_PWSZ pwszFilePath,VSS_PWSZ *ppwszRootPath,VSS_PWSZ *ppwszLogicalPrefix,WINBOOL bNormalizeFQDNforRootPath) {
    return This->lpVtbl->GetRootAndLogicalPrefixPaths(This,pwszFilePath,ppwszRootPath,ppwszLogicalPrefix,bNormalizeFQDNforRootPath);
}
#endif
#endif

#endif


#endif  /* __IVssBackupComponentsEx4_INTERFACE_DEFINED__ */

#define VSS_SW_BOOTABLE_STATE (1 << 0)
HRESULT STDAPICALLTYPE CreateVssBackupComponentsInternal(IVssBackupComponents **ppBackup);
HRESULT STDAPICALLTYPE CreateVssExamineWriterMetadataInternal(BSTR bstrXML, IVssExamineWriterMetadata **ppMetadata);
HRESULT APIENTRY IsVolumeSnapshottedInternal(VSS_PWSZ pwszVolumeName, WINBOOL *pbSnapshotsPresent, LONG *plSnapshotCapability);
void APIENTRY VssFreeSnapshotPropertiesInternal(VSS_SNAPSHOT_PROP *pProp);
HRESULT APIENTRY GetProviderMgmtInterfaceInternal(VSS_ID ProviderId, IID InterfaceId, IUnknown **ppItf);
HRESULT APIENTRY ShouldBlockRevertInternal(LPCWSTR wszVolumeName, boolean *pbBlock);
static __inline HRESULT CreateVssBackupComponents(IVssBackupComponents **ppBackup) { return CreateVssBackupComponentsInternal(ppBackup); }
static __inline HRESULT CreateVssExamineWriterMetadata(BSTR bstrXML, IVssExamineWriterMetadata **ppMetadata) { return CreateVssExamineWriterMetadataInternal(bstrXML, ppMetadata); }
static __inline HRESULT IsVolumeSnapshotted(VSS_PWSZ pwszVolumeName, WINBOOL *pbSnapshotsPresent, LONG *plSnapshotCapability) { return IsVolumeSnapshottedInternal(pwszVolumeName, pbSnapshotsPresent, plSnapshotCapability); }
static __inline void VssFreeSnapshotProperties(VSS_SNAPSHOT_PROP *pProp) { return VssFreeSnapshotPropertiesInternal(pProp); }
static __inline HRESULT GetProviderMgmtInterface(VSS_ID ProviderId, IID InterfaceId, IUnknown **ppItf) { return GetProviderMgmtInterfaceInternal(ProviderId, InterfaceId, ppItf); }
static __inline HRESULT ShouldBlockRevert(LPCWSTR wszVolumeName, boolean *pbBlock) { return ShouldBlockRevertInternal(wszVolumeName, pbBlock); }
#endif /* WINAPI_PARTITION_DESKTOP */
/* Begin additional prototypes for all interfaces */

ULONG           __RPC_USER BSTR_UserSize     (ULONG *, ULONG, BSTR *);
unsigned char * __RPC_USER BSTR_UserMarshal  (ULONG *, unsigned char *, BSTR *);
unsigned char * __RPC_USER BSTR_UserUnmarshal(ULONG *, unsigned char *, BSTR *);
void            __RPC_USER BSTR_UserFree     (ULONG *, BSTR *);

/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __vsbackup_h__ */
