vsmgmt.idl 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. /**
  2. * This file has no copyright assigned and is placed in the Public Domain.
  3. * This file is part of the mingw-w64 runtime package.
  4. * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  5. */
  6. cpp_quote("#include <winapifamily.h>")
  7. cpp_quote("#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)")
  8. import "oaidl.idl";
  9. import "ocidl.idl";
  10. import "vss.idl";
  11. typedef enum _VSS_MGMT_OBJECT_TYPE {
  12. VSS_MGMT_OBJECT_UNKNOWN = 0,
  13. VSS_MGMT_OBJECT_VOLUME,
  14. VSS_MGMT_OBJECT_DIFF_VOLUME,
  15. VSS_MGMT_OBJECT_DIFF_AREA,
  16. } VSS_MGMT_OBJECT_TYPE, *PVSS_MGMT_OBJECT_TYPE;
  17. const LONGLONG VSS_ASSOC_NO_MAX_SPACE = -1;
  18. const LONGLONG VSS_ASSOC_REMOVE = 0;
  19. typedef struct _VSS_VOLUME_PROP {
  20. VSS_PWSZ m_pwszVolumeName;
  21. VSS_PWSZ m_pwszVolumeDisplayName;
  22. } VSS_VOLUME_PROP, *PVSS_VOLUME_PROP;
  23. typedef struct _VSS_DIFF_VOLUME_PROP {
  24. VSS_PWSZ m_pwszVolumeName;
  25. VSS_PWSZ m_pwszVolumeDisplayName;
  26. LONGLONG m_llVolumeFreeSpace;
  27. LONGLONG m_llVolumeTotalSpace;
  28. } VSS_DIFF_VOLUME_PROP, *PVSS_DIFF_VOLUME_PROP;
  29. typedef struct _VSS_DIFF_AREA_PROP {
  30. VSS_PWSZ m_pwszVolumeName;
  31. VSS_PWSZ m_pwszDiffAreaVolumeName;
  32. LONGLONG m_llMaximumDiffSpace;
  33. LONGLONG m_llAllocatedDiffSpace;
  34. LONGLONG m_llUsedDiffSpace;
  35. } VSS_DIFF_AREA_PROP, *PVSS_DIFF_AREA_PROP;
  36. [switch_type(VSS_MGMT_OBJECT_TYPE)]
  37. typedef union {
  38. [case(VSS_MGMT_OBJECT_VOLUME)] VSS_VOLUME_PROP Vol;
  39. [case(VSS_MGMT_OBJECT_DIFF_VOLUME)] VSS_DIFF_VOLUME_PROP DiffVol;
  40. [case(VSS_MGMT_OBJECT_DIFF_AREA)] VSS_DIFF_AREA_PROP DiffArea;
  41. [default];
  42. } VSS_MGMT_OBJECT_UNION, *PVSS_MGMT_OBJECT_UNION;
  43. typedef struct _VSS_MGMT_OBJECT_PROP {
  44. VSS_MGMT_OBJECT_TYPE Type;
  45. [switch_is(Type)] VSS_MGMT_OBJECT_UNION Obj;
  46. } VSS_MGMT_OBJECT_PROP, *PVSS_MGMT_OBJECT_PROP;
  47. typedef enum _VSS_PROTECTION_LEVEL {
  48. VSS_PROTECTION_LEVEL_ORIGINAL_VOLUME = 0,
  49. VSS_PROTECTION_LEVEL_SNAPSHOT,
  50. } VSS_PROTECTION_LEVEL, *PVSS_PROTECTION_LEVEL;
  51. typedef enum _VSS_PROTECTION_FAULT {
  52. VSS_PROTECTION_FAULT_NONE = 0,
  53. VSS_PROTECTION_FAULT_DIFF_AREA_MISSING,
  54. VSS_PROTECTION_FAULT_IO_FAILURE_DURING_ONLINE,
  55. VSS_PROTECTION_FAULT_META_DATA_CORRUPTION,
  56. VSS_PROTECTION_FAULT_MEMORY_ALLOCATION_FAILURE,
  57. VSS_PROTECTION_FAULT_MAPPED_MEMORY_FAILURE,
  58. VSS_PROTECTION_FAULT_COW_READ_FAILURE,
  59. VSS_PROTECTION_FAULT_COW_WRITE_FAILURE,
  60. VSS_PROTECTION_FAULT_DIFF_AREA_FULL,
  61. VSS_PROTECTION_FAULT_GROW_TOO_SLOW,
  62. VSS_PROTECTION_FAULT_GROW_FAILED,
  63. VSS_PROTECTION_FAULT_DESTROY_ALL_SNAPSHOTS,
  64. VSS_PROTECTION_FAULT_FILE_SYSTEM_FAILURE,
  65. VSS_PROTECTION_FAULT_IO_FAILURE,
  66. VSS_PROTECTION_FAULT_DIFF_AREA_REMOVED,
  67. VSS_PROTECTION_FAULT_EXTERNAL_WRITER_TO_DIFF_AREA,
  68. VSS_PROTECTION_FAULT_MOUNT_DURING_CLUSTER_OFFLINE
  69. } VSS_PROTECTION_FAULT, *PVSS_PROTECTION_FAULT;
  70. typedef struct _VSS_VOLUME_PROTECTION_INFO {
  71. VSS_PROTECTION_LEVEL m_protectionLevel;
  72. WINBOOL m_volumeIsOfflineForProtection;
  73. VSS_PROTECTION_FAULT m_protectionFault;
  74. LONG m_failureStatus;
  75. WINBOOL m_volumeHasUnusedDiffArea;
  76. DWORD m_reserved;
  77. } VSS_VOLUME_PROTECTION_INFO, *PVSS_VOLUME_PROTECTION_INFO;
  78. interface IVssSnapshotMgmt;
  79. interface IVssDifferentialSoftwareSnapshotMgmt;
  80. interface IVssEnumMgmtObject;
  81. [
  82. object,
  83. uuid(fa7df749-66e7-4986-a27f-e2f04ae53772),
  84. pointer_default(unique)
  85. ]
  86. interface IVssSnapshotMgmt: IUnknown
  87. {
  88. HRESULT GetProviderMgmtInterface(
  89. [in] VSS_ID ProviderId,
  90. [in] REFIID InterfaceId,
  91. [out, iid_is(InterfaceId)] IUnknown **ppItf);
  92. HRESULT QueryVolumesSupportedForSnapshots(
  93. [in] VSS_ID ProviderId,
  94. [in] LONG lContext,
  95. [out] IVssEnumMgmtObject **ppEnum);
  96. HRESULT QuerySnapshotsByVolume(
  97. [in] VSS_PWSZ pwszVolumeName,
  98. [in] VSS_ID ProviderId,
  99. [out] IVssEnumObject **ppEnum);
  100. }
  101. [
  102. object,
  103. uuid(0f61ec39-fe82-45f2-a3f0-768b5d427102),
  104. pointer_default(unique)
  105. ]
  106. interface IVssSnapshotMgmt2: IUnknown
  107. {
  108. HRESULT GetMinDiffAreaSize(
  109. [out] LONGLONG *pllMinDiffAreaSize);
  110. }
  111. [
  112. object,
  113. uuid(214a0f28-b737-4026-b847-4f9e37d79529),
  114. pointer_default(unique)
  115. ]
  116. interface IVssDifferentialSoftwareSnapshotMgmt: IUnknown
  117. {
  118. HRESULT AddDiffArea(
  119. [in] VSS_PWSZ pwszVolumeName,
  120. [in] VSS_PWSZ pwszDiffAreaVolumeName,
  121. [in] LONGLONG llMaximumDiffSpace);
  122. HRESULT ChangeDiffAreaMaximumSize(
  123. [in] VSS_PWSZ pwszVolumeName,
  124. [in] VSS_PWSZ pwszDiffAreaVolumeName,
  125. [in] LONGLONG llMaximumDiffSpace);
  126. HRESULT QueryVolumesSupportedForDiffAreas(
  127. [in] VSS_PWSZ pwszOriginalVolumeName,
  128. [out] IVssEnumMgmtObject **ppEnum);
  129. HRESULT QueryDiffAreasForVolume(
  130. [in] VSS_PWSZ pwszVolumeName,
  131. [out] IVssEnumMgmtObject **ppEnum);
  132. HRESULT QueryDiffAreasOnVolume(
  133. [in] VSS_PWSZ pwszVolumeName,
  134. [out] IVssEnumMgmtObject **ppEnum);
  135. HRESULT QueryDiffAreasForSnapshot(
  136. [in] VSS_ID SnapshotId,
  137. [out] IVssEnumMgmtObject **ppEnum);
  138. }
  139. [
  140. object,
  141. uuid(949d7353-675f-4275-8969-f044c6277815),
  142. pointer_default(unique)
  143. ]
  144. interface IVssDifferentialSoftwareSnapshotMgmt2 : IVssDifferentialSoftwareSnapshotMgmt
  145. {
  146. HRESULT ChangeDiffAreaMaximumSizeEx(
  147. [in] VSS_PWSZ pwszVolumeName,
  148. [in] VSS_PWSZ pwszDiffAreaVolumeName,
  149. [in] LONGLONG llMaximumDiffSpace,
  150. [in] WINBOOL bVolatile);
  151. HRESULT MigrateDiffAreas(
  152. [in] VSS_PWSZ pwszVolumeName,
  153. [in] VSS_PWSZ pwszDiffAreaVolumeName,
  154. [in] VSS_PWSZ pwszNewDiffAreaVolumeName);
  155. HRESULT QueryMigrationStatus(
  156. [in] VSS_PWSZ pwszVolumeName,
  157. [in] VSS_PWSZ pwszDiffAreaVolumeName,
  158. [out] IVssAsync **ppAsync);
  159. HRESULT SetSnapshotPriority(
  160. [in] VSS_ID idSnapshot,
  161. [in] BYTE priority);
  162. }
  163. [
  164. object,
  165. uuid(383f7e71-a4c5-401f-b27f-f826289f8458),
  166. pointer_default(unique)
  167. ]
  168. interface IVssDifferentialSoftwareSnapshotMgmt3 : IVssDifferentialSoftwareSnapshotMgmt2
  169. {
  170. HRESULT SetVolumeProtectLevel(
  171. [in] VSS_PWSZ pwszVolumeName,
  172. [in] VSS_PROTECTION_LEVEL protectionLevel);
  173. HRESULT GetVolumeProtectLevel(
  174. [in] VSS_PWSZ pwszVolumeName,
  175. [out] VSS_VOLUME_PROTECTION_INFO *protectionLevel);
  176. HRESULT ClearVolumeProtectFault(
  177. [in] VSS_PWSZ pwszVolumeName);
  178. HRESULT DeleteUnusedDiffAreas(
  179. [in] VSS_PWSZ pwszDiffAreaVolumeName);
  180. HRESULT QuerySnapshotDeltaBitmap(
  181. [in] VSS_ID idSnapshotOlder,
  182. [in] VSS_ID idSnapshotYounger,
  183. [out] ULONG *pcBlockSizePerBit,
  184. [out] ULONG *pcBitmapLength,
  185. [out, size_is(, *pcBitmapLength)] BYTE **ppbBitmap);
  186. }
  187. [
  188. object,
  189. uuid(01954e6b-9254-4e6e-808c-c9e05d007696),
  190. pointer_default(unique)
  191. ]
  192. interface IVssEnumMgmtObject : IUnknown
  193. {
  194. HRESULT Next(
  195. [in] ULONG celt,
  196. [out, size_is(celt), length_is(*pceltFetched)] VSS_MGMT_OBJECT_PROP *rgelt,
  197. [out] ULONG *pceltFetched);
  198. HRESULT Skip(
  199. [in] ULONG celt);
  200. HRESULT Reset();
  201. HRESULT Clone(
  202. [in, out] IVssEnumMgmtObject **ppenum);
  203. }
  204. [
  205. uuid(84015c41-291d-49e6-bf7f-dd40ae93632b),
  206. version(1.0)
  207. ]
  208. library VSMGMT
  209. {
  210. importlib("stdole2.tlb");
  211. [
  212. uuid(0b5a2c52-3eb9-470a-96e2-6c6d4570e40f)
  213. ]
  214. coclass VssSnapshotMgmt
  215. {
  216. [default] interface IVssSnapshotMgmt;
  217. interface IVssSnapshotMgmt2;
  218. }
  219. }
  220. cpp_quote("#endif /* WINAPI_PARTITION_DESKTOP */")