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