blob: ec952cfb0ba84bbd6b59ae723d42cb89fbc93b22 [file] [log] [blame]
/**
* This file has no copyright assigned and is placed in the Public Domain.
* This file is part of the mingw-w64 runtime package.
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
*/
cpp_quote("#include <winapifamily.h>")
cpp_quote("#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)")
import "oaidl.idl";
import "ocidl.idl";
import "vss.idl";
typedef enum _VSS_MGMT_OBJECT_TYPE {
VSS_MGMT_OBJECT_UNKNOWN = 0,
VSS_MGMT_OBJECT_VOLUME,
VSS_MGMT_OBJECT_DIFF_VOLUME,
VSS_MGMT_OBJECT_DIFF_AREA,
} VSS_MGMT_OBJECT_TYPE, *PVSS_MGMT_OBJECT_TYPE;
const LONGLONG VSS_ASSOC_NO_MAX_SPACE = -1;
const LONGLONG VSS_ASSOC_REMOVE = 0;
typedef struct _VSS_VOLUME_PROP {
VSS_PWSZ m_pwszVolumeName;
VSS_PWSZ m_pwszVolumeDisplayName;
} VSS_VOLUME_PROP, *PVSS_VOLUME_PROP;
typedef struct _VSS_DIFF_VOLUME_PROP {
VSS_PWSZ m_pwszVolumeName;
VSS_PWSZ m_pwszVolumeDisplayName;
LONGLONG m_llVolumeFreeSpace;
LONGLONG m_llVolumeTotalSpace;
} VSS_DIFF_VOLUME_PROP, *PVSS_DIFF_VOLUME_PROP;
typedef struct _VSS_DIFF_AREA_PROP {
VSS_PWSZ m_pwszVolumeName;
VSS_PWSZ m_pwszDiffAreaVolumeName;
LONGLONG m_llMaximumDiffSpace;
LONGLONG m_llAllocatedDiffSpace;
LONGLONG m_llUsedDiffSpace;
} VSS_DIFF_AREA_PROP, *PVSS_DIFF_AREA_PROP;
[switch_type(VSS_MGMT_OBJECT_TYPE)]
typedef union {
[case(VSS_MGMT_OBJECT_VOLUME)] VSS_VOLUME_PROP Vol;
[case(VSS_MGMT_OBJECT_DIFF_VOLUME)] VSS_DIFF_VOLUME_PROP DiffVol;
[case(VSS_MGMT_OBJECT_DIFF_AREA)] VSS_DIFF_AREA_PROP DiffArea;
[default];
} VSS_MGMT_OBJECT_UNION, *PVSS_MGMT_OBJECT_UNION;
typedef struct _VSS_MGMT_OBJECT_PROP {
VSS_MGMT_OBJECT_TYPE Type;
[switch_is(Type)] VSS_MGMT_OBJECT_UNION Obj;
} VSS_MGMT_OBJECT_PROP, *PVSS_MGMT_OBJECT_PROP;
typedef enum _VSS_PROTECTION_LEVEL {
VSS_PROTECTION_LEVEL_ORIGINAL_VOLUME = 0,
VSS_PROTECTION_LEVEL_SNAPSHOT,
} VSS_PROTECTION_LEVEL, *PVSS_PROTECTION_LEVEL;
typedef enum _VSS_PROTECTION_FAULT {
VSS_PROTECTION_FAULT_NONE = 0,
VSS_PROTECTION_FAULT_DIFF_AREA_MISSING,
VSS_PROTECTION_FAULT_IO_FAILURE_DURING_ONLINE,
VSS_PROTECTION_FAULT_META_DATA_CORRUPTION,
VSS_PROTECTION_FAULT_MEMORY_ALLOCATION_FAILURE,
VSS_PROTECTION_FAULT_MAPPED_MEMORY_FAILURE,
VSS_PROTECTION_FAULT_COW_READ_FAILURE,
VSS_PROTECTION_FAULT_COW_WRITE_FAILURE,
VSS_PROTECTION_FAULT_DIFF_AREA_FULL,
VSS_PROTECTION_FAULT_GROW_TOO_SLOW,
VSS_PROTECTION_FAULT_GROW_FAILED,
VSS_PROTECTION_FAULT_DESTROY_ALL_SNAPSHOTS,
VSS_PROTECTION_FAULT_FILE_SYSTEM_FAILURE,
VSS_PROTECTION_FAULT_IO_FAILURE,
VSS_PROTECTION_FAULT_DIFF_AREA_REMOVED,
VSS_PROTECTION_FAULT_EXTERNAL_WRITER_TO_DIFF_AREA,
VSS_PROTECTION_FAULT_MOUNT_DURING_CLUSTER_OFFLINE
} VSS_PROTECTION_FAULT, *PVSS_PROTECTION_FAULT;
typedef struct _VSS_VOLUME_PROTECTION_INFO {
VSS_PROTECTION_LEVEL m_protectionLevel;
WINBOOL m_volumeIsOfflineForProtection;
VSS_PROTECTION_FAULT m_protectionFault;
LONG m_failureStatus;
WINBOOL m_volumeHasUnusedDiffArea;
DWORD m_reserved;
} VSS_VOLUME_PROTECTION_INFO, *PVSS_VOLUME_PROTECTION_INFO;
interface IVssSnapshotMgmt;
interface IVssDifferentialSoftwareSnapshotMgmt;
interface IVssEnumMgmtObject;
[
object,
uuid(fa7df749-66e7-4986-a27f-e2f04ae53772),
pointer_default(unique)
]
interface IVssSnapshotMgmt: IUnknown
{
HRESULT GetProviderMgmtInterface(
[in] VSS_ID ProviderId,
[in] REFIID InterfaceId,
[out, iid_is(InterfaceId)] IUnknown **ppItf);
HRESULT QueryVolumesSupportedForSnapshots(
[in] VSS_ID ProviderId,
[in] LONG lContext,
[out] IVssEnumMgmtObject **ppEnum);
HRESULT QuerySnapshotsByVolume(
[in] VSS_PWSZ pwszVolumeName,
[in] VSS_ID ProviderId,
[out] IVssEnumObject **ppEnum);
}
[
object,
uuid(0f61ec39-fe82-45f2-a3f0-768b5d427102),
pointer_default(unique)
]
interface IVssSnapshotMgmt2: IUnknown
{
HRESULT GetMinDiffAreaSize(
[out] LONGLONG *pllMinDiffAreaSize);
}
[
object,
uuid(214a0f28-b737-4026-b847-4f9e37d79529),
pointer_default(unique)
]
interface IVssDifferentialSoftwareSnapshotMgmt: IUnknown
{
HRESULT AddDiffArea(
[in] VSS_PWSZ pwszVolumeName,
[in] VSS_PWSZ pwszDiffAreaVolumeName,
[in] LONGLONG llMaximumDiffSpace);
HRESULT ChangeDiffAreaMaximumSize(
[in] VSS_PWSZ pwszVolumeName,
[in] VSS_PWSZ pwszDiffAreaVolumeName,
[in] LONGLONG llMaximumDiffSpace);
HRESULT QueryVolumesSupportedForDiffAreas(
[in] VSS_PWSZ pwszOriginalVolumeName,
[out] IVssEnumMgmtObject **ppEnum);
HRESULT QueryDiffAreasForVolume(
[in] VSS_PWSZ pwszVolumeName,
[out] IVssEnumMgmtObject **ppEnum);
HRESULT QueryDiffAreasOnVolume(
[in] VSS_PWSZ pwszVolumeName,
[out] IVssEnumMgmtObject **ppEnum);
HRESULT QueryDiffAreasForSnapshot(
[in] VSS_ID SnapshotId,
[out] IVssEnumMgmtObject **ppEnum);
}
[
object,
uuid(949d7353-675f-4275-8969-f044c6277815),
pointer_default(unique)
]
interface IVssDifferentialSoftwareSnapshotMgmt2 : IVssDifferentialSoftwareSnapshotMgmt
{
HRESULT ChangeDiffAreaMaximumSizeEx(
[in] VSS_PWSZ pwszVolumeName,
[in] VSS_PWSZ pwszDiffAreaVolumeName,
[in] LONGLONG llMaximumDiffSpace,
[in] WINBOOL bVolatile);
HRESULT MigrateDiffAreas(
[in] VSS_PWSZ pwszVolumeName,
[in] VSS_PWSZ pwszDiffAreaVolumeName,
[in] VSS_PWSZ pwszNewDiffAreaVolumeName);
HRESULT QueryMigrationStatus(
[in] VSS_PWSZ pwszVolumeName,
[in] VSS_PWSZ pwszDiffAreaVolumeName,
[out] IVssAsync **ppAsync);
HRESULT SetSnapshotPriority(
[in] VSS_ID idSnapshot,
[in] BYTE priority);
}
[
object,
uuid(383f7e71-a4c5-401f-b27f-f826289f8458),
pointer_default(unique)
]
interface IVssDifferentialSoftwareSnapshotMgmt3 : IVssDifferentialSoftwareSnapshotMgmt2
{
HRESULT SetVolumeProtectLevel(
[in] VSS_PWSZ pwszVolumeName,
[in] VSS_PROTECTION_LEVEL protectionLevel);
HRESULT GetVolumeProtectLevel(
[in] VSS_PWSZ pwszVolumeName,
[out] VSS_VOLUME_PROTECTION_INFO *protectionLevel);
HRESULT ClearVolumeProtectFault(
[in] VSS_PWSZ pwszVolumeName);
HRESULT DeleteUnusedDiffAreas(
[in] VSS_PWSZ pwszDiffAreaVolumeName);
HRESULT QuerySnapshotDeltaBitmap(
[in] VSS_ID idSnapshotOlder,
[in] VSS_ID idSnapshotYounger,
[out] ULONG *pcBlockSizePerBit,
[out] ULONG *pcBitmapLength,
[out, size_is(, *pcBitmapLength)] BYTE **ppbBitmap);
}
[
object,
uuid(01954e6b-9254-4e6e-808c-c9e05d007696),
pointer_default(unique)
]
interface IVssEnumMgmtObject : IUnknown
{
HRESULT Next(
[in] ULONG celt,
[out, size_is(celt), length_is(*pceltFetched)] VSS_MGMT_OBJECT_PROP *rgelt,
[out] ULONG *pceltFetched);
HRESULT Skip(
[in] ULONG celt);
HRESULT Reset();
HRESULT Clone(
[in, out] IVssEnumMgmtObject **ppenum);
}
[
uuid(84015c41-291d-49e6-bf7f-dd40ae93632b),
version(1.0)
]
library VSMGMT
{
importlib("stdole2.tlb");
[
uuid(0b5a2c52-3eb9-470a-96e2-6c6d4570e40f)
]
coclass VssSnapshotMgmt
{
[default] interface IVssSnapshotMgmt;
interface IVssSnapshotMgmt2;
}
}
cpp_quote("#endif /* WINAPI_PARTITION_DESKTOP */")