virtdisk.h 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574
  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. #ifndef _INC_VIRTDISK
  7. #define _INC_VIRTDISK
  8. #if (_WIN32_WINNT >= 0x0601)
  9. #ifdef __cplusplus
  10. extern "C" {
  11. #endif
  12. #define VIRTDISKAPI DECLSPEC_IMPORT
  13. #define VIRTUAL_STORAGE_TYPE_DEVICE_UNKNOWN 0
  14. #define VIRTUAL_STORAGE_TYPE_DEVICE_ISO 1
  15. #define VIRTUAL_STORAGE_TYPE_DEVICE_VHD 2
  16. #if (_WIN32_WINNT >= 0x0A00)
  17. #define VIRTUAL_STORAGE_TYPE_DEVICE_VHDX 3
  18. #endif /* _WIN32_WINNT >= 0x0A00 */
  19. typedef enum _ATTACH_VIRTUAL_DISK_FLAG {
  20. ATTACH_VIRTUAL_DISK_FLAG_NONE = 0x00000000,
  21. ATTACH_VIRTUAL_DISK_FLAG_READ_ONLY = 0x00000001,
  22. ATTACH_VIRTUAL_DISK_FLAG_NO_DRIVE_LETTER = 0x00000002,
  23. ATTACH_VIRTUAL_DISK_FLAG_PERMANENT_LIFETIME = 0x00000004,
  24. ATTACH_VIRTUAL_DISK_FLAG_NO_LOCAL_HOST = 0x00000008
  25. } ATTACH_VIRTUAL_DISK_FLAG;
  26. typedef enum _ATTACH_VIRTUAL_DISK_VERSION {
  27. ATTACH_VIRTUAL_DISK_VERSION_UNSPECIFIED = 0,
  28. ATTACH_VIRTUAL_DISK_VERSION_1 = 1
  29. } ATTACH_VIRTUAL_DISK_VERSION;
  30. typedef enum _COMPACT_VIRTUAL_DISK_FLAG {
  31. COMPACT_VIRTUAL_DISK_FLAG_NONE = 0x00000000
  32. } COMPACT_VIRTUAL_DISK_FLAG;
  33. typedef enum _COMPACT_VIRTUAL_DISK_VERSION {
  34. COMPACT_VIRTUAL_DISK_VERSION_UNSPECIFIED = 0,
  35. COMPACT_VIRTUAL_DISK_VERSION_1 = 1
  36. } COMPACT_VIRTUAL_DISK_VERSION;
  37. typedef enum _CREATE_VIRTUAL_DISK_FLAG {
  38. CREATE_VIRTUAL_DISK_FLAG_NONE = 0x00000000,
  39. CREATE_VIRTUAL_DISK_FLAG_FULL_PHYSICAL_ALLOCATION = 0x00000001
  40. #if (_WIN32_WINNT >= 0x0602)
  41. ,
  42. CREATE_VIRTUAL_DISK_FLAG_PREVENT_WRITES_TO_SOURCE_DISK = 0x2,
  43. CREATE_VIRTUAL_DISK_FLAG_DO_NOT_COPY_METADATA_FROM_PARENT = 0x4
  44. #endif /* _WIN32_WINNT >= 0x0602 */
  45. } CREATE_VIRTUAL_DISK_FLAG;
  46. typedef enum _CREATE_VIRTUAL_DISK_VERSION {
  47. CREATE_VIRTUAL_DISK_VERSION_UNSPECIFIED = 0,
  48. CREATE_VIRTUAL_DISK_VERSION_1 = 1
  49. #if (_WIN32_WINNT >= 0x0602)
  50. ,
  51. CREATE_VIRTUAL_DISK_VERSION_2 = 2
  52. #endif /* _WIN32_WINNT >= 0x0602 */
  53. } CREATE_VIRTUAL_DISK_VERSION;
  54. typedef enum _DEPENDENT_DISK_FLAG {
  55. DEPENDENT_DISK_FLAG_NONE = 0x00000000,
  56. DEPENDENT_DISK_FLAG_MULT_BACKING_FILES = 0x00000001,
  57. DEPENDENT_DISK_FLAG_FULLY_ALLOCATED = 0x00000002,
  58. DEPENDENT_DISK_FLAG_READ_ONLY = 0x00000004,
  59. DEPENDENT_DISK_FLAG_REMOTE = 0x00000008,
  60. DEPENDENT_DISK_FLAG_SYSTEM_VOLUME = 0x00000010,
  61. DEPENDENT_DISK_FLAG_SYSTEM_VOLUME_PARENT = 0x00000020,
  62. DEPENDENT_DISK_FLAG_REMOVABLE = 0x00000040,
  63. DEPENDENT_DISK_FLAG_NO_DRIVE_LETTER = 0x00000080,
  64. DEPENDENT_DISK_FLAG_PARENT = 0x00000100,
  65. DEPENDENT_DISK_FLAG_NO_HOST_DISK = 0x00000200,
  66. DEPENDENT_DISK_FLAG_PERMANENT_LIFETIME = 0x00000400
  67. } DEPENDENT_DISK_FLAG;
  68. typedef enum _EXPAND_VIRTUAL_DISK_VERSION {
  69. EXPAND_VIRTUAL_DISK_VERSION_UNSPECIFIED = 0,
  70. EXPAND_VIRTUAL_DISK_VERSION_1 = 1
  71. } EXPAND_VIRTUAL_DISK_VERSION;
  72. typedef enum _DETACH_VIRTUAL_DISK_FLAG {
  73. DETACH_VIRTUAL_DISK_FLAG_NONE = 0x00000000
  74. } DETACH_VIRTUAL_DISK_FLAG;
  75. typedef enum _EXPAND_VIRTUAL_DISK_FLAG {
  76. EXPAND_VIRTUAL_DISK_FLAG_NONE = 0x00000000
  77. } EXPAND_VIRTUAL_DISK_FLAG;
  78. typedef enum _GET_STORAGE_DEPENDENCY_FLAG {
  79. GET_STORAGE_DEPENDENCY_FLAG_NONE = 0x00000000,
  80. GET_STORAGE_DEPENDENCY_FLAG_HOST_VOLUMES = 0x00000001,
  81. GET_STORAGE_DEPENDENCY_FLAG_DISK_HANDLE = 0x00000002
  82. } GET_STORAGE_DEPENDENCY_FLAG;
  83. typedef enum _GET_VIRTUAL_DISK_INFO_VERSION {
  84. GET_VIRTUAL_DISK_INFO_UNSPECIFIED = 0,
  85. GET_VIRTUAL_DISK_INFO_SIZE = 1,
  86. GET_VIRTUAL_DISK_INFO_IDENTIFIER = 2,
  87. GET_VIRTUAL_DISK_INFO_PARENT_LOCATION = 3,
  88. GET_VIRTUAL_DISK_INFO_PARENT_IDENTIFIER = 4,
  89. GET_VIRTUAL_DISK_INFO_PARENT_TIMESTAMP = 5,
  90. GET_VIRTUAL_DISK_INFO_VIRTUAL_STORAGE_TYPE = 6,
  91. GET_VIRTUAL_DISK_INFO_PROVIDER_SUBTYPE = 7
  92. #if (_WIN32_WINNT >= 0x0602)
  93. ,
  94. GET_VIRTUAL_DISK_INFO_IS_4K_ALIGNED = 8,
  95. GET_VIRTUAL_DISK_INFO_PHYSICAL_DISK = 9,
  96. GET_VIRTUAL_DISK_INFO_VHD_PHYSICAL_SECTOR_SIZE = 10,
  97. GET_VIRTUAL_DISK_INFO_SMALLEST_SAFE_VIRTUAL_SIZE = 11,
  98. GET_VIRTUAL_DISK_INFO_FRAGMENTATION = 12
  99. #endif /* _WIN32_WINNT >= 0x0602 */
  100. #if (_WIN32_WINNT >= 0x0603)
  101. ,
  102. GET_VIRTUAL_DISK_INFO_IS_LOADED = 13,
  103. GET_VIRTUAL_DISK_INFO_VIRTUAL_DISK_ID = 14
  104. #endif /* _WIN32_WINNT >= 0x0603 */
  105. #if (_WIN32_WINNT >= 0x0A00)
  106. ,
  107. GET_VIRTUAL_DISK_INFO_CHANGE_TRACKING_STATE = 15
  108. #endif /* _WIN32_WINNT >= 0x0A00 */
  109. } GET_VIRTUAL_DISK_INFO_VERSION;
  110. typedef enum _MIRROR_VIRTUAL_DISK_FLAG {
  111. MIRROR_VIRTUAL_DISK_FLAG_NONE = 0x00000000,
  112. MIRROR_VIRTUAL_DISK_FLAG_EXISTING_FILE = 0x00000001
  113. } MIRROR_VIRTUAL_DISK_FLAG;
  114. typedef enum _MIRROR_VIRTUAL_DISK_VERSION {
  115. MIRROR_VIRTUAL_DISK_VERSION_UNSPECIFIED = 0,
  116. MIRROR_VIRTUAL_DISK_VERSION_1 = 1
  117. } MIRROR_VIRTUAL_DISK_VERSION;
  118. typedef enum _MERGE_VIRTUAL_DISK_FLAG {
  119. MERGE_VIRTUAL_DISK_FLAG_NONE = 0x00000000
  120. } MERGE_VIRTUAL_DISK_FLAG;
  121. typedef enum _MERGE_VIRTUAL_DISK_VERSION {
  122. MERGE_VIRTUAL_DISK_VERSION_UNSPECIFIED = 0,
  123. MERGE_VIRTUAL_DISK_VERSION_1 = 1
  124. #if (_WIN32_WINNT >= 0x0602)
  125. ,
  126. MERGE_VIRTUAL_DISK_VERSION_2 = 2
  127. #endif /* _WIN32_WINNT >= 0x0A00 */
  128. } MERGE_VIRTUAL_DISK_VERSION;
  129. typedef enum _OPEN_VIRTUAL_DISK_FLAG {
  130. OPEN_VIRTUAL_DISK_FLAG_NONE = 0x00000000,
  131. OPEN_VIRTUAL_DISK_FLAG_NO_PARENTS = 0x00000001,
  132. OPEN_VIRTUAL_DISK_FLAG_BLANK_FILE = 0x00000002,
  133. OPEN_VIRTUAL_DISK_FLAG_BOOT_DRIVE = 0x00000004
  134. #if (_WIN32_WINNT >= 0x0602)
  135. ,
  136. OPEN_VIRTUAL_DISK_FLAG_CACHED_IO = 0x00000008,
  137. OPEN_VIRTUAL_DISK_FLAG_CUSTOM_DIFF_CHAIN = 0x00000010
  138. #endif /* _WIN32_WINNT >= 0x0602 */
  139. } OPEN_VIRTUAL_DISK_FLAG;
  140. typedef enum _OPEN_VIRTUAL_DISK_VERSION {
  141. OPEN_VIRTUAL_DISK_VERSION_UNSPECIFIED = 0,
  142. OPEN_VIRTUAL_DISK_VERSION_1 = 1
  143. #if (_WIN32_WINNT >= 0x0602)
  144. ,
  145. OPEN_VIRTUAL_DISK_VERSION_2 = 2
  146. #endif /* _WIN32_WINNT >= 0x0602 */
  147. } OPEN_VIRTUAL_DISK_VERSION;
  148. typedef enum _SET_VIRTUAL_DISK_INFO_VERSION {
  149. SET_VIRTUAL_DISK_INFO_UNSPECIFIED = 0,
  150. SET_VIRTUAL_DISK_INFO_PARENT_PATH = 1,
  151. SET_VIRTUAL_DISK_INFO_IDENTIFIER = 2
  152. #if (_WIN32_WINNT >= 0x0602)
  153. ,
  154. SET_VIRTUAL_DISK_INFO_PARENT_PATH_WITH_DEPTH = 3,
  155. SET_VIRTUAL_DISK_INFO_PHYSICAL_SECTOR_SIZE = 4
  156. #endif /* (_WIN32_WINNT >= 0x0602) */
  157. #if (_WIN32_WINNT >= 0x0603)
  158. ,
  159. SET_VIRTUAL_DISK_INFO_VIRTUAL_DISK_ID = 5
  160. #endif /* (_WIN32_WINNT >= 0x0603) */
  161. #if (_WIN32_WINNT >= 0x0A00)
  162. ,
  163. SET_VIRTUAL_DISK_INFO_CHANGE_TRACKING_STATE = 6,
  164. SET_VIRTUAL_DISK_INFO_PARENT_LOCATOR = 7
  165. #endif /* (_WIN32_WINNT >= 0x0A00) */
  166. } SET_VIRTUAL_DISK_INFO_VERSION;
  167. typedef enum _STORAGE_DEPENDENCY_INFO_VERSION {
  168. STORAGE_DEPENDENCY_INFO_VERSION_UNSPECIFIED = 0,
  169. STORAGE_DEPENDENCY_INFO_VERSION_1 = 1,
  170. STORAGE_DEPENDENCY_INFO_VERSION_2 = 2
  171. } STORAGE_DEPENDENCY_INFO_VERSION;
  172. typedef enum _VIRTUAL_DISK_ACCESS_MASK {
  173. VIRTUAL_DISK_ACCESS_NONE = 0x00000000,
  174. VIRTUAL_DISK_ACCESS_ATTACH_RO = 0x00010000,
  175. VIRTUAL_DISK_ACCESS_ATTACH_RW = 0x00020000,
  176. VIRTUAL_DISK_ACCESS_DETACH = 0x00040000,
  177. VIRTUAL_DISK_ACCESS_GET_INFO = 0x00080000,
  178. VIRTUAL_DISK_ACCESS_CREATE = 0x00100000,
  179. VIRTUAL_DISK_ACCESS_METAOPS = 0x00200000,
  180. VIRTUAL_DISK_ACCESS_READ = 0x000d0000,
  181. VIRTUAL_DISK_ACCESS_ALL = 0x003f0000,
  182. VIRTUAL_DISK_ACCESS_WRITABLE = 0x00320000
  183. } VIRTUAL_DISK_ACCESS_MASK;
  184. #if (_WIN32_WINNT >= 0x0602)
  185. typedef enum _RESIZE_VIRTUAL_DISK_FLAG {
  186. RESIZE_VIRTUAL_DISK_FLAG_NONE = 0x0,
  187. RESIZE_VIRTUAL_DISK_FLAG_ALLOW_UNSAFE_VIRTUAL_SIZE = 0x1,
  188. RESIZE_VIRTUAL_DISK_FLAG_RESIZE_TO_SMALLEST_SAFE_VIRTUAL_SIZE = 0x2
  189. } RESIZE_VIRTUAL_DISK_FLAG;
  190. typedef enum _RESIZE_VIRTUAL_DISK_VERSION {
  191. RESIZE_VIRTUAL_DISK_VERSION_UNSPECIFIED = 0,
  192. RESIZE_VIRTUAL_DISK_VERSION_1 = 1
  193. } RESIZE_VIRTUAL_DISK_VERSION;
  194. #endif /* (_WIN32_WINNT >= 0x0602) */
  195. #if (_WIN32_WINNT >= 0x0A00)
  196. typedef enum _APPLY_SNAPSHOT_VHDSET_FLAG {
  197. APPLY_SNAPSHOT_VHDSET_FLAG_NONE = 0x00000000,
  198. APPLY_SNAPSHOT_VHDSET_FLAG_WRITEABLE = 0x00000001
  199. } APPLY_SNAPSHOT_VHDSET_FLAG, *PAPPLY_SNAPSHOT_VHDSET_FLAG;
  200. typedef enum _APPLY_SNAPSHOT_VHDSET_VERSION {
  201. APPLY_SNAPSHOT_VHDSET_VERSION_UNSPECIFIED = 0,
  202. APPLY_SNAPSHOT_VHDSET_VERSION_1 = 1
  203. } APPLY_SNAPSHOT_VHDSET_VERSION;
  204. typedef enum _DELETE_SNAPSHOT_VHDSET_FLAG {
  205. DELETE_SNAPSHOT_VHDSET_FLAG_NONE = 0x00000000,
  206. DELETE_SNAPSHOT_VHDSET_FLAG_PERSIST_RCT = 0x00000001
  207. } DELETE_SNAPSHOT_VHDSET_FLAG, *PDELETE_SNAPSHOT_VHDSET_FLAG;
  208. typedef enum _DELETE_SNAPSHOT_VHDSET_VERSION {
  209. DELETE_SNAPSHOT_VHDSET_VERSION_UNSPECIFIED = 0x00000000,
  210. DELETE_SNAPSHOT_VHDSET_VERSION_1 = 0x00000001
  211. } DELETE_SNAPSHOT_VHDSET_VERSION, *PDELETE_SNAPSHOT_VHDSET_VERSION;
  212. typedef enum _MODIFY_VHDSET_FLAG {
  213. MODIFY_VHDSET_FLAG_NONE = 0x00000000
  214. } MODIFY_VHDSET_FLAG, *PMODIFY_VHDSET_FLAG;
  215. typedef enum _MODIFY_VHDSET_VERSION {
  216. MODIFY_VHDSET_UNSPECIFIED = 0,
  217. MODIFY_VHDSET_SNAPSHOT_PATH = 1,
  218. MODIFY_VHDSET_REMOVE_SNAPSHOT = 2,
  219. MODIFY_VHDSET_DEFAULT_SNAPSHOT_PATH = 3
  220. } MODIFY_VHDSET_VERSION, *PMODIFY_VHDSET_VERSION;
  221. typedef enum _QUERY_CHANGES_VIRTUAL_DISK_FLAG {
  222. QUERY_CHANGES_VIRTUAL_DISK_FLAG_NONE = 0x00000000
  223. } QUERY_CHANGES_VIRTUAL_DISK_FLAG;
  224. typedef enum _TAKE_SNAPSHOT_VHDSET_FLAG {
  225. TAKE_SNAPSHOT_VHDSET_FLAG_NONE = 0x00000000
  226. } TAKE_SNAPSHOT_VHDSET_FLAG, *PTAKE_SNAPSHOT_VHDSET_FLAG;
  227. typedef enum _TAKE_SNAPSHOT_VHDSET_VERSION {
  228. TAKE_SNAPSHOT_VHDSET_VERSION_UNSPECIFIED = 0,
  229. TAKE_SNAPSHOT_VHDSET_VERSION_1 = 1
  230. } TAKE_SNAPSHOT_VHDSET_VERSION;
  231. #endif /* _WIN32_WINNT >= 0x0A00 */
  232. typedef struct _VIRTUAL_STORAGE_TYPE {
  233. ULONG DeviceId;
  234. GUID VendorId;
  235. } VIRTUAL_STORAGE_TYPE, *PVIRTUAL_STORAGE_TYPE;
  236. typedef struct _ATTACH_VIRTUAL_DISK_PARAMETERS {
  237. ATTACH_VIRTUAL_DISK_VERSION Version;
  238. __C89_NAMELESS union {
  239. struct {
  240. ULONG Reserved;
  241. } Version1;
  242. } DUMMYUNIONNAME;
  243. } ATTACH_VIRTUAL_DISK_PARAMETERS, *PATTACH_VIRTUAL_DISK_PARAMETERS;
  244. typedef struct _COMPACT_VIRTUAL_DISK_PARAMETERS {
  245. COMPACT_VIRTUAL_DISK_VERSION Version;
  246. __C89_NAMELESS union {
  247. struct {
  248. ULONG Reserved;
  249. } Version1;
  250. } DUMMYUNIONNAME;
  251. } COMPACT_VIRTUAL_DISK_PARAMETERS, *PCOMPACT_VIRTUAL_DISK_PARAMETERS;
  252. typedef struct _CREATE_VIRTUAL_DISK_PARAMETERS {
  253. CREATE_VIRTUAL_DISK_VERSION Version;
  254. __C89_NAMELESS union {
  255. struct {
  256. GUID UniqueId;
  257. ULONGLONG MaximumSize;
  258. ULONG BlockSizeInBytes;
  259. ULONG SectorSizeInBytes;
  260. PCWSTR ParentPath;
  261. PCWSTR SourcePath;
  262. } Version1;
  263. #if (_WIN32_WINNT >= 0x0602)
  264. struct {
  265. GUID UniqueId;
  266. ULONGLONG MaximumSize;
  267. ULONG BlockSizeInBytes;
  268. ULONG SectorSizeInBytes;
  269. PCWSTR ParentPath;
  270. PCWSTR SourcePath;
  271. OPEN_VIRTUAL_DISK_FLAG OpenFlags;
  272. VIRTUAL_STORAGE_TYPE ParentVirtualStorageType;
  273. VIRTUAL_STORAGE_TYPE SourceVirtualStorageType;
  274. GUID ResiliencyGuid;
  275. } Version2;
  276. #endif /* _WIN32_WINNT >= 0x0602 */
  277. } DUMMYUNIONNAME;
  278. } CREATE_VIRTUAL_DISK_PARAMETERS, *PCREATE_VIRTUAL_DISK_PARAMETERS;
  279. typedef struct _EXPAND_VIRTUAL_DISK_PARAMETERS {
  280. EXPAND_VIRTUAL_DISK_VERSION Version;
  281. __C89_NAMELESS union {
  282. struct {
  283. ULONGLONG NewSize;
  284. } Version1;
  285. } DUMMYUNIONNAME;
  286. } EXPAND_VIRTUAL_DISK_PARAMETERS, *PEXPAND_VIRTUAL_DISK_PARAMETERS;
  287. typedef struct _GET_VIRTUAL_DISK_INFO {
  288. GET_VIRTUAL_DISK_INFO_VERSION Version;
  289. __C89_NAMELESS union {
  290. struct {
  291. ULONGLONG VirtualSize;
  292. ULONGLONG PhysicalSize;
  293. ULONG BlockSize;
  294. ULONG SectorSize;
  295. } Size;
  296. GUID Identifier;
  297. struct {
  298. WINBOOL ParentResolved;
  299. WCHAR ParentLocationBuffer[1];
  300. } ParentLocation;
  301. GUID ParentIdentifier;
  302. ULONG ParentTimestamp;
  303. VIRTUAL_STORAGE_TYPE VirtualStorageType;
  304. ULONG ProviderSubtype;
  305. #if (_WIN32_WINNT >= 0x0602)
  306. WINBOOL Is4kAligned;
  307. WINBOOL IsLoaded;
  308. struct {
  309. ULONG LogicalSectorSize;
  310. ULONG PhysicalSectorSize;
  311. WINBOOL IsRemote;
  312. } PhysicalDisk;
  313. ULONG VhdPhysicalSectorSize;
  314. ULONGLONG SmallestSafeVirtualSize;
  315. ULONG FragmentationPercentage;
  316. #endif /* _WIN32_WINNT >= 0x0602 */
  317. #if (_WIN32_WINNT >= 0x0603)
  318. GUID VirtualDiskId;
  319. struct {
  320. WINBOOL Enabled;
  321. WINBOOL NewerChanges;
  322. WCHAR MostRecentId[1];
  323. } ChangeTrackingState;
  324. #endif /* _WIN32_WINNT >= 0x0603 */
  325. } DUMMYUNIONNAME;
  326. } GET_VIRTUAL_DISK_INFO, *PGET_VIRTUAL_DISK_INFO;
  327. typedef struct _MERGE_VIRTUAL_DISK_PARAMETERS {
  328. MERGE_VIRTUAL_DISK_VERSION Version;
  329. __C89_NAMELESS union {
  330. struct {
  331. ULONG MergeDepth;
  332. } Version1;
  333. #if (_WIN32_WINNT >= 0x0602)
  334. struct {
  335. ULONG MergeSourceDepth;
  336. ULONG MergeTargetDepth;
  337. } Version2;
  338. #endif /* _WIN32_WINNT >= 0x0602 */
  339. } DUMMYUNIONNAME;
  340. } MERGE_VIRTUAL_DISK_PARAMETERS, *PMERGE_VIRTUAL_DISK_PARAMETERS;
  341. typedef struct _OPEN_VIRTUAL_DISK_PARAMETERS {
  342. OPEN_VIRTUAL_DISK_VERSION Version;
  343. __C89_NAMELESS union {
  344. struct {
  345. ULONG RWDepth;
  346. } Version1;
  347. #if (_WIN32_WINNT >= 0x0602)
  348. struct {
  349. WINBOOL GetInfoOnly;
  350. WINBOOL ReadOnly;
  351. GUID ResiliencyGuid;
  352. } Version2;
  353. #endif /* _WIN32_WINNT >= 0x0602 */
  354. } DUMMYUNIONNAME;
  355. } OPEN_VIRTUAL_DISK_PARAMETERS, *POPEN_VIRTUAL_DISK_PARAMETERS;
  356. typedef struct _SET_VIRTUAL_DISK_INFO {
  357. SET_VIRTUAL_DISK_INFO_VERSION Version;
  358. __C89_NAMELESS union {
  359. PCWSTR ParentFilePath;
  360. GUID UniqueIdentifier;
  361. #if (_WIN32_WINNT >= 0x0602)
  362. struct {
  363. ULONG ChildDepth;
  364. PCWSTR ParentFilePath;
  365. } ParentPathWithDepthInfo;
  366. ULONG VhdPhysicalSectorSize;
  367. GUID VirtualDiskId;
  368. #endif /* _WIN32_WINNT >= 0x0602 */
  369. #if (_WIN32_WINNT >= 0x0603)
  370. WINBOOL ChangeTrackingEnabled;
  371. struct {
  372. GUID LinkageId;
  373. PCWSTR ParentFilePath;
  374. } ParentLocator;
  375. #endif /* _WIN32_WINNT >= 0x0603 */
  376. } DUMMYUNIONNAME;
  377. } SET_VIRTUAL_DISK_INFO, *PSET_VIRTUAL_DISK_INFO;
  378. typedef struct _STORAGE_DEPENDENCY_INFO_TYPE_1 {
  379. DEPENDENT_DISK_FLAG DependencyTypeFlags;
  380. ULONG ProviderSpecificFlags;
  381. VIRTUAL_STORAGE_TYPE VirtualStorageType;
  382. } STORAGE_DEPENDENCY_INFO_TYPE_1, *PSTORAGE_DEPENDENCY_INFO_TYPE_1;
  383. typedef struct _STORAGE_DEPENDENCY_INFO_TYPE_2 {
  384. DEPENDENT_DISK_FLAG DependencyTypeFlags;
  385. ULONG ProviderSpecificFlags;
  386. VIRTUAL_STORAGE_TYPE VirtualStorageType;
  387. ULONG AncestorLevel;
  388. PWSTR DependencyDeviceName;
  389. PWSTR HostVolumeName;
  390. PWSTR DependentVolumeName;
  391. PWSTR DependentVolumeRelativePath;
  392. } STORAGE_DEPENDENCY_INFO_TYPE_2, *PSTORAGE_DEPENDENCY_INFO_TYPE_2;
  393. /* Fixme: Suppress GCC errors about "error: flexible array member in union" */
  394. typedef struct _STORAGE_DEPENDENCY_INFO {
  395. STORAGE_DEPENDENCY_INFO_VERSION Version;
  396. ULONG NumberEntries;
  397. __C89_NAMELESS union {
  398. STORAGE_DEPENDENCY_INFO_TYPE_1 Version1Entries[1];
  399. STORAGE_DEPENDENCY_INFO_TYPE_2 Version2Entries[1];
  400. } DUMMYUNIONNAME;
  401. } STORAGE_DEPENDENCY_INFO, *PSTORAGE_DEPENDENCY_INFO;
  402. typedef struct _VIRTUAL_DISK_PROGRESS {
  403. DWORD OperationStatus;
  404. ULONGLONG CurrentValue;
  405. ULONGLONG CompletionValue;
  406. } VIRTUAL_DISK_PROGRESS, *PVIRTUAL_DISK_PROGRESS;
  407. #if (_WIN32_WINNT >= 0x0602)
  408. typedef struct _MIRROR_VIRTUAL_DISK_PARAMETERS {
  409. MIRROR_VIRTUAL_DISK_VERSION Version;
  410. __C89_NAMELESS union {
  411. struct {
  412. PCWSTR MirrorVirtualDiskPath;
  413. } Version1;
  414. } DUMMYUNIONNAME;
  415. } MIRROR_VIRTUAL_DISK_PARAMETERS, *PMIRROR_VIRTUAL_DISK_PARAMETERS;
  416. typedef struct _RESIZE_VIRTUAL_DISK_PARAMETERS {
  417. RESIZE_VIRTUAL_DISK_VERSION Version;
  418. __C89_NAMELESS union {
  419. struct {
  420. ULONGLONG NewSize;
  421. } Version1;
  422. } DUMMYUNIONNAME;
  423. } RESIZE_VIRTUAL_DISK_PARAMETERS, *PRESIZE_VIRTUAL_DISK_PARAMETERS;
  424. #endif /* _WIN32_WINNT >= 0x0602 */
  425. #if (_WIN32_WINNT >= 0x0A00)
  426. typedef struct _APPLY_SNAPSHOT_VHDSET_PARAMETERS {
  427. APPLY_SNAPSHOT_VHDSET_VERSION Version;
  428. __C89_NAMELESS union {
  429. struct {
  430. GUID SnapshotId;
  431. GUID LeafSnapshotId;
  432. } Version1;
  433. } DUMMYUNIONNAME;
  434. } APPLY_SNAPSHOT_VHDSET_PARAMETERS, *PAPPLY_SNAPSHOT_VHDSET_PARAMETERS;
  435. typedef struct _DELETE_SNAPSHOT_VHDSET_PARAMETERS {
  436. DELETE_SNAPSHOT_VHDSET_VERSION Version;
  437. __C89_NAMELESS union {
  438. struct {
  439. GUID SnapshotId;
  440. } Version1;
  441. } DUMMYUNIONNAME;
  442. } DELETE_SNAPSHOT_VHDSET_PARAMETERS, *PDELETE_SNAPSHOT_VHDSET_PARAMETERS;
  443. typedef struct _MODIFY_VHDSET_PARAMETERS {
  444. MODIFY_VHDSET_VERSION Version;
  445. __C89_NAMELESS union {
  446. struct {
  447. GUID SnapshotId;
  448. PCWSTR SnapshotFilePath;
  449. } SnapshotPath;
  450. GUID SnapshotId;
  451. PCWSTR DefaultFilePath;
  452. } DUMMYUNIONNAME;
  453. } MODIFY_VHDSET_PARAMETERS, *PMODIFY_VHDSET_PARAMETERS;
  454. typedef struct _QUERY_CHANGES_VIRTUAL_DISK_RANGE {
  455. ULONG64 ByteOffset;
  456. ULONG64 ByteLength;
  457. ULONG64 Reserved;
  458. } QUERY_CHANGES_VIRTUAL_DISK_RANGE, *PQUERY_CHANGES_VIRTUAL_DISK_RANGE;
  459. typedef struct _TAKE_SNAPSHOT_VHDSET_PARAMETERS {
  460. TAKE_SNAPSHOT_VHDSET_VERSION Version;
  461. __C89_NAMELESS union {
  462. struct {
  463. GUID SnapshotId;
  464. } Version1;
  465. } DUMMYUNIONNAME;
  466. } TAKE_SNAPSHOT_VHDSET_PARAMETERS, *PTAKE_SNAPSHOT_VHDSET_PARAMETERS;
  467. #endif /* _WIN32_WINNT >= 0x0A00 */
  468. DEFINE_GUID(VIRTUAL_STORAGE_TYPE_VENDOR_UNKNOWN,0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);
  469. DEFINE_GUID(VIRTUAL_STORAGE_TYPE_VENDOR_MICROSOFT,0xEC984AEC,0xA0F9,0x47e9,0x90,0x1F,0x71,0x41,0x5A,0x66,0x34,0x5B);
  470. VIRTDISKAPI DWORD WINAPI AttachVirtualDisk(HANDLE VirtualDiskHandle, PSECURITY_DESCRIPTOR SecurityDescriptor, ATTACH_VIRTUAL_DISK_FLAG Flags, ULONG ProviderSpecificFlags, PATTACH_VIRTUAL_DISK_PARAMETERS Parameters, LPOVERLAPPED Overlapped);
  471. VIRTDISKAPI DWORD WINAPI CompactVirtualDisk(HANDLE VirtualDiskHandle, COMPACT_VIRTUAL_DISK_FLAG Flags, PCOMPACT_VIRTUAL_DISK_PARAMETERS Parameters, LPOVERLAPPED Overlapped);
  472. VIRTDISKAPI DWORD WINAPI CreateVirtualDisk(PVIRTUAL_STORAGE_TYPE VirtualStorageType, PCWSTR Path, VIRTUAL_DISK_ACCESS_MASK VirtualDiskAccessMask, PSECURITY_DESCRIPTOR SecurityDescriptor, CREATE_VIRTUAL_DISK_FLAG Flags, ULONG ProviderSpecificFlags, PCREATE_VIRTUAL_DISK_PARAMETERS Parameters, LPOVERLAPPED Overlapped, PHANDLE Handle);
  473. VIRTDISKAPI DWORD WINAPI DetachVirtualDisk(HANDLE VirtualDiskHandle, DETACH_VIRTUAL_DISK_FLAG Flags, ULONG ProviderSpecificFlags);
  474. VIRTDISKAPI DWORD WINAPI ExpandVirtualDisk(HANDLE VirtualDiskHandle, EXPAND_VIRTUAL_DISK_FLAG Flags, PEXPAND_VIRTUAL_DISK_PARAMETERS Parameters, LPOVERLAPPED Overlapped);
  475. VIRTDISKAPI DWORD WINAPI GetStorageDependencyInformation(HANDLE ObjectHandle, GET_STORAGE_DEPENDENCY_FLAG Flags, ULONG StorageDependencyInfoSize, PSTORAGE_DEPENDENCY_INFO StorageDependencyInfo, PULONG SizeUsed);
  476. VIRTDISKAPI DWORD WINAPI GetVirtualDiskInformation(HANDLE VirtualDiskHandle, PULONG VirtualDiskInfoSize, PGET_VIRTUAL_DISK_INFO VirtualDiskInfo, PULONG SizeUsed);
  477. VIRTDISKAPI DWORD WINAPI GetVirtualDiskOperationProgress(HANDLE VirtualDiskHandle, LPOVERLAPPED Overlapped, PVIRTUAL_DISK_PROGRESS Progress);
  478. VIRTDISKAPI DWORD WINAPI GetVirtualDiskPhysicalPath(HANDLE VirtualDiskHandle, PULONG DiskPathSizeInBytes, PWSTR DiskPath);
  479. VIRTDISKAPI DWORD WINAPI MergeVirtualDisk(HANDLE VirtualDiskHandle, MERGE_VIRTUAL_DISK_FLAG Flags, PMERGE_VIRTUAL_DISK_PARAMETERS Parameters, LPOVERLAPPED Overlapped);
  480. VIRTDISKAPI DWORD WINAPI OpenVirtualDisk(PVIRTUAL_STORAGE_TYPE VirtualStorageType, PCWSTR Path, VIRTUAL_DISK_ACCESS_MASK VirtualDiskAccessMask, OPEN_VIRTUAL_DISK_FLAG Flags, POPEN_VIRTUAL_DISK_PARAMETERS Parameters, PHANDLE Handle);
  481. VIRTDISKAPI DWORD WINAPI SetVirtualDiskInformation(HANDLE VirtualDiskHandle, PSET_VIRTUAL_DISK_INFO VirtualDiskInfo);
  482. #if (_WIN32_WINNT >= 0x0602)
  483. VIRTDISKAPI DWORD WINAPI AddVirtualDiskParent(HANDLE VirtualDiskHandle, PCWSTR ParentPath);
  484. VIRTDISKAPI DWORD WINAPI BreakMirrorVirtualDisk(HANDLE VirtualDiskHandle);
  485. VIRTDISKAPI DWORD WINAPI DeleteVirtualDiskMetadata(HANDLE VirtualDiskHandle, LPGUID Item);
  486. VIRTDISKAPI DWORD WINAPI EnumerateVirtualDiskMetadata(HANDLE VirtualDiskHandle, PULONG NumberOfItems, GUID *Items);
  487. VIRTDISKAPI DWORD WINAPI GetVirtualDiskMetadata(HANDLE VirtualDiskHandle, LPGUID Item, PULONG MetaDataSize, PVOID MetaData);
  488. VIRTDISKAPI DWORD WINAPI MirrorVirtualDisk(HANDLE VirtualDiskHandle, MIRROR_VIRTUAL_DISK_FLAG Flags, PMIRROR_VIRTUAL_DISK_PARAMETERS Parameters, LPOVERLAPPED Overlapped);
  489. VIRTDISKAPI DWORD WINAPI ResizeVirtualDisk(HANDLE VirtualDiskHandle, RESIZE_VIRTUAL_DISK_FLAG Flags, PRESIZE_VIRTUAL_DISK_PARAMETERS Parameters, LPOVERLAPPED Overlapped);
  490. VIRTDISKAPI DWORD WINAPI SetVirtualDiskMetadata(HANDLE VirtualDiskHandle, LPGUID Item, ULONG MetaDataSize, PVOID MetaData);
  491. #endif /* _WIN32_WINNT >= 0x0602 */
  492. #if (_WIN32_WINNT >= 0x0A00)
  493. VIRTDISKAPI DWORD WINAPI ApplySnapshotVhdSet(HANDLE VirtualDiskHandle, const PAPPLY_SNAPSHOT_VHDSET_PARAMETERS Parameters, APPLY_SNAPSHOT_VHDSET_FLAG Flags);
  494. VIRTDISKAPI DWORD WINAPI DeleteSnapshotVhdSet(HANDLE VirtualDiskHandle, const PDELETE_SNAPSHOT_VHDSET_PARAMETERS Parameters, DELETE_SNAPSHOT_VHDSET_FLAG Flags);
  495. VIRTDISKAPI DWORD WINAPI ModifyVhdSet(HANDLE VirtualDiskHandle, const PMODIFY_VHDSET_PARAMETERS Parameters, MODIFY_VHDSET_FLAG Flags);
  496. VIRTDISKAPI DWORD WINAPI QueryChangesVirtualDisk(HANDLE VirtualDiskHandle, PCWSTR ChangeTrackingId, ULONG64 ByteOffset, ULONG64 ByteLength, QUERY_CHANGES_VIRTUAL_DISK_FLAG Flags, PQUERY_CHANGES_VIRTUAL_DISK_RANGE Ranges, PULONG RangeCount, PULONG64 ProcessedLength);
  497. VIRTDISKAPI WINAPI DWORD TakeSnapshotVhdSet(HANDLE VirtualDiskHandle, const PTAKE_SNAPSHOT_VHDSET_PARAMETERS Parameters, TAKE_SNAPSHOT_VHDSET_FLAG Flags);
  498. #endif /* _WIN32_WINNT >= 0x0A00 */
  499. #ifdef __cplusplus
  500. }
  501. #endif
  502. #endif /*(_WIN32_WINNT >= 0x0601)*/
  503. #endif /*_INC_VIRTDISK*/