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 11 extern "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 23 typedef 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 31 typedef 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 36 typedef enum _COMPACT_VIRTUAL_DISK_FLAG { 37 COMPACT_VIRTUAL_DISK_FLAG_NONE = 0x00000000 38 } COMPACT_VIRTUAL_DISK_FLAG; 39 40 typedef 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 45 typedef 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 55 typedef 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 64 typedef 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 79 typedef 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 84 typedef enum _DETACH_VIRTUAL_DISK_FLAG { 85 DETACH_VIRTUAL_DISK_FLAG_NONE = 0x00000000 86 } DETACH_VIRTUAL_DISK_FLAG; 87 88 typedef enum _EXPAND_VIRTUAL_DISK_FLAG { 89 EXPAND_VIRTUAL_DISK_FLAG_NONE = 0x00000000 90 } EXPAND_VIRTUAL_DISK_FLAG; 91 92 typedef 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 98 typedef 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 126 typedef 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 131 typedef 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 136 typedef enum _MERGE_VIRTUAL_DISK_FLAG { 137 MERGE_VIRTUAL_DISK_FLAG_NONE = 0x00000000 138 } MERGE_VIRTUAL_DISK_FLAG; 139 140 typedef 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 149 typedef 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 161 typedef 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 170 typedef 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 190 typedef 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 196 typedef 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 211 typedef 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 217 typedef 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 225 typedef 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 230 typedef 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 235 typedef 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 240 typedef 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 245 typedef enum _MODIFY_VHDSET_FLAG { 246 MODIFY_VHDSET_FLAG_NONE = 0x00000000 247 } MODIFY_VHDSET_FLAG, *PMODIFY_VHDSET_FLAG; 248 249 typedef 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 256 typedef enum _QUERY_CHANGES_VIRTUAL_DISK_FLAG { 257 QUERY_CHANGES_VIRTUAL_DISK_FLAG_NONE = 0x00000000 258 } QUERY_CHANGES_VIRTUAL_DISK_FLAG; 259 260 typedef enum _TAKE_SNAPSHOT_VHDSET_FLAG { 261 TAKE_SNAPSHOT_VHDSET_FLAG_NONE = 0x00000000 262 } TAKE_SNAPSHOT_VHDSET_FLAG, *PTAKE_SNAPSHOT_VHDSET_FLAG; 263 264 typedef 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 271 typedef struct _VIRTUAL_STORAGE_TYPE { 272 ULONG DeviceId; 273 GUID VendorId; 274 } VIRTUAL_STORAGE_TYPE, *PVIRTUAL_STORAGE_TYPE; 275 276 typedef 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 285 typedef 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 294 typedef 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 PCWSTR ParentPath; 312 PCWSTR SourcePath; 313 OPEN_VIRTUAL_DISK_FLAG OpenFlags; 314 VIRTUAL_STORAGE_TYPE ParentVirtualStorageType; 315 VIRTUAL_STORAGE_TYPE SourceVirtualStorageType; 316 GUID ResiliencyGuid; 317 } Version2; 318 #endif /* _WIN32_WINNT >= 0x0602 */ 319 } DUMMYUNIONNAME; 320 } CREATE_VIRTUAL_DISK_PARAMETERS, *PCREATE_VIRTUAL_DISK_PARAMETERS; 321 322 typedef struct _EXPAND_VIRTUAL_DISK_PARAMETERS { 323 EXPAND_VIRTUAL_DISK_VERSION Version; 324 __C89_NAMELESS union { 325 struct { 326 ULONGLONG NewSize; 327 } Version1; 328 } DUMMYUNIONNAME; 329 } EXPAND_VIRTUAL_DISK_PARAMETERS, *PEXPAND_VIRTUAL_DISK_PARAMETERS; 330 331 typedef struct _GET_VIRTUAL_DISK_INFO { 332 GET_VIRTUAL_DISK_INFO_VERSION Version; 333 __C89_NAMELESS union { 334 struct { 335 ULONGLONG VirtualSize; 336 ULONGLONG PhysicalSize; 337 ULONG BlockSize; 338 ULONG SectorSize; 339 } Size; 340 GUID Identifier; 341 struct { 342 WINBOOL ParentResolved; 343 WCHAR ParentLocationBuffer[1]; 344 } ParentLocation; 345 GUID ParentIdentifier; 346 ULONG ParentTimestamp; 347 VIRTUAL_STORAGE_TYPE VirtualStorageType; 348 ULONG ProviderSubtype; 349 #if (_WIN32_WINNT >= 0x0602) 350 WINBOOL Is4kAligned; 351 WINBOOL IsLoaded; 352 struct { 353 ULONG LogicalSectorSize; 354 ULONG PhysicalSectorSize; 355 WINBOOL IsRemote; 356 } PhysicalDisk; 357 ULONG VhdPhysicalSectorSize; 358 ULONGLONG SmallestSafeVirtualSize; 359 ULONG FragmentationPercentage; 360 #endif /* _WIN32_WINNT >= 0x0602 */ 361 #if (_WIN32_WINNT >= 0x0603) 362 GUID VirtualDiskId; 363 struct { 364 WINBOOL Enabled; 365 WINBOOL NewerChanges; 366 WCHAR MostRecentId[1]; 367 } ChangeTrackingState; 368 #endif /* _WIN32_WINNT >= 0x0603 */ 369 } DUMMYUNIONNAME; 370 } GET_VIRTUAL_DISK_INFO, *PGET_VIRTUAL_DISK_INFO; 371 372 typedef struct _MERGE_VIRTUAL_DISK_PARAMETERS { 373 MERGE_VIRTUAL_DISK_VERSION Version; 374 __C89_NAMELESS union { 375 struct { 376 ULONG MergeDepth; 377 } Version1; 378 #if (_WIN32_WINNT >= 0x0602) 379 struct { 380 ULONG MergeSourceDepth; 381 ULONG MergeTargetDepth; 382 } Version2; 383 #endif /* _WIN32_WINNT >= 0x0602 */ 384 } DUMMYUNIONNAME; 385 } MERGE_VIRTUAL_DISK_PARAMETERS, *PMERGE_VIRTUAL_DISK_PARAMETERS; 386 387 typedef struct _OPEN_VIRTUAL_DISK_PARAMETERS { 388 OPEN_VIRTUAL_DISK_VERSION Version; 389 __C89_NAMELESS union { 390 struct { 391 ULONG RWDepth; 392 } Version1; 393 #if (_WIN32_WINNT >= 0x0602) 394 struct { 395 WINBOOL GetInfoOnly; 396 WINBOOL ReadOnly; 397 GUID ResiliencyGuid; 398 } Version2; 399 #endif /* _WIN32_WINNT >= 0x0602 */ 400 } DUMMYUNIONNAME; 401 } OPEN_VIRTUAL_DISK_PARAMETERS, *POPEN_VIRTUAL_DISK_PARAMETERS; 402 403 typedef struct _SET_VIRTUAL_DISK_INFO { 404 SET_VIRTUAL_DISK_INFO_VERSION Version; 405 __C89_NAMELESS union { 406 PCWSTR ParentFilePath; 407 GUID UniqueIdentifier; 408 #if (_WIN32_WINNT >= 0x0602) 409 struct { 410 ULONG ChildDepth; 411 PCWSTR ParentFilePath; 412 } ParentPathWithDepthInfo; 413 ULONG VhdPhysicalSectorSize; 414 GUID VirtualDiskId; 415 #endif /* _WIN32_WINNT >= 0x0602 */ 416 #if (_WIN32_WINNT >= 0x0603) 417 WINBOOL ChangeTrackingEnabled; 418 struct { 419 GUID LinkageId; 420 PCWSTR ParentFilePath; 421 } ParentLocator; 422 #endif /* _WIN32_WINNT >= 0x0603 */ 423 } DUMMYUNIONNAME; 424 } SET_VIRTUAL_DISK_INFO, *PSET_VIRTUAL_DISK_INFO; 425 426 typedef struct _STORAGE_DEPENDENCY_INFO_TYPE_1 { 427 DEPENDENT_DISK_FLAG DependencyTypeFlags; 428 ULONG ProviderSpecificFlags; 429 VIRTUAL_STORAGE_TYPE VirtualStorageType; 430 } STORAGE_DEPENDENCY_INFO_TYPE_1, *PSTORAGE_DEPENDENCY_INFO_TYPE_1; 431 432 typedef struct _STORAGE_DEPENDENCY_INFO_TYPE_2 { 433 DEPENDENT_DISK_FLAG DependencyTypeFlags; 434 ULONG ProviderSpecificFlags; 435 VIRTUAL_STORAGE_TYPE VirtualStorageType; 436 ULONG AncestorLevel; 437 PWSTR DependencyDeviceName; 438 PWSTR HostVolumeName; 439 PWSTR DependentVolumeName; 440 PWSTR DependentVolumeRelativePath; 441 } STORAGE_DEPENDENCY_INFO_TYPE_2, *PSTORAGE_DEPENDENCY_INFO_TYPE_2; 442 443 /* Fixme: Suppress GCC errors about "error: flexible array member in union" */ 444 445 typedef struct _STORAGE_DEPENDENCY_INFO { 446 STORAGE_DEPENDENCY_INFO_VERSION Version; 447 ULONG NumberEntries; 448 __C89_NAMELESS union { 449 STORAGE_DEPENDENCY_INFO_TYPE_1 Version1Entries[1]; 450 STORAGE_DEPENDENCY_INFO_TYPE_2 Version2Entries[1]; 451 } DUMMYUNIONNAME; 452 } STORAGE_DEPENDENCY_INFO, *PSTORAGE_DEPENDENCY_INFO; 453 454 typedef struct _VIRTUAL_DISK_PROGRESS { 455 DWORD OperationStatus; 456 ULONGLONG CurrentValue; 457 ULONGLONG CompletionValue; 458 } VIRTUAL_DISK_PROGRESS, *PVIRTUAL_DISK_PROGRESS; 459 460 #if (_WIN32_WINNT >= 0x0602) 461 462 typedef struct _MIRROR_VIRTUAL_DISK_PARAMETERS { 463 MIRROR_VIRTUAL_DISK_VERSION Version; 464 __C89_NAMELESS union { 465 struct { 466 PCWSTR MirrorVirtualDiskPath; 467 } Version1; 468 } DUMMYUNIONNAME; 469 } MIRROR_VIRTUAL_DISK_PARAMETERS, *PMIRROR_VIRTUAL_DISK_PARAMETERS; 470 471 typedef struct _RESIZE_VIRTUAL_DISK_PARAMETERS { 472 RESIZE_VIRTUAL_DISK_VERSION Version; 473 __C89_NAMELESS union { 474 struct { 475 ULONGLONG NewSize; 476 } Version1; 477 } DUMMYUNIONNAME; 478 } RESIZE_VIRTUAL_DISK_PARAMETERS, *PRESIZE_VIRTUAL_DISK_PARAMETERS; 479 480 #endif /* _WIN32_WINNT >= 0x0602 */ 481 482 #if (_WIN32_WINNT >= 0x0A00) 483 484 typedef struct _APPLY_SNAPSHOT_VHDSET_PARAMETERS { 485 APPLY_SNAPSHOT_VHDSET_VERSION Version; 486 __C89_NAMELESS union { 487 struct { 488 GUID SnapshotId; 489 GUID LeafSnapshotId; 490 } Version1; 491 } DUMMYUNIONNAME; 492 } APPLY_SNAPSHOT_VHDSET_PARAMETERS, *PAPPLY_SNAPSHOT_VHDSET_PARAMETERS; 493 494 typedef struct _DELETE_SNAPSHOT_VHDSET_PARAMETERS { 495 DELETE_SNAPSHOT_VHDSET_VERSION Version; 496 __C89_NAMELESS union { 497 struct { 498 GUID SnapshotId; 499 } Version1; 500 } DUMMYUNIONNAME; 501 } DELETE_SNAPSHOT_VHDSET_PARAMETERS, *PDELETE_SNAPSHOT_VHDSET_PARAMETERS; 502 503 typedef struct _MODIFY_VHDSET_PARAMETERS { 504 MODIFY_VHDSET_VERSION Version; 505 __C89_NAMELESS union { 506 struct { 507 GUID SnapshotId; 508 PCWSTR SnapshotFilePath; 509 } SnapshotPath; 510 GUID SnapshotId; 511 PCWSTR DefaultFilePath; 512 } DUMMYUNIONNAME; 513 } MODIFY_VHDSET_PARAMETERS, *PMODIFY_VHDSET_PARAMETERS; 514 515 typedef struct _QUERY_CHANGES_VIRTUAL_DISK_RANGE { 516 ULONG64 ByteOffset; 517 ULONG64 ByteLength; 518 ULONG64 Reserved; 519 } QUERY_CHANGES_VIRTUAL_DISK_RANGE, *PQUERY_CHANGES_VIRTUAL_DISK_RANGE; 520 521 typedef struct _TAKE_SNAPSHOT_VHDSET_PARAMETERS { 522 TAKE_SNAPSHOT_VHDSET_VERSION Version; 523 __C89_NAMELESS union { 524 struct { 525 GUID SnapshotId; 526 } Version1; 527 } DUMMYUNIONNAME; 528 } TAKE_SNAPSHOT_VHDSET_PARAMETERS, *PTAKE_SNAPSHOT_VHDSET_PARAMETERS; 529 530 #endif /* _WIN32_WINNT >= 0x0A00 */ 531 532 DEFINE_GUID(VIRTUAL_STORAGE_TYPE_VENDOR_UNKNOWN,0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); 533 DEFINE_GUID(VIRTUAL_STORAGE_TYPE_VENDOR_MICROSOFT,0xEC984AEC,0xA0F9,0x47e9,0x90,0x1F,0x71,0x41,0x5A,0x66,0x34,0x5B); 534 535 VIRTDISKAPI DWORD WINAPI AttachVirtualDisk(HANDLE VirtualDiskHandle, PSECURITY_DESCRIPTOR SecurityDescriptor, ATTACH_VIRTUAL_DISK_FLAG Flags, ULONG ProviderSpecificFlags, PATTACH_VIRTUAL_DISK_PARAMETERS Parameters, LPOVERLAPPED Overlapped); 536 VIRTDISKAPI DWORD WINAPI CompactVirtualDisk(HANDLE VirtualDiskHandle, COMPACT_VIRTUAL_DISK_FLAG Flags, PCOMPACT_VIRTUAL_DISK_PARAMETERS Parameters, LPOVERLAPPED Overlapped); 537 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); 538 VIRTDISKAPI DWORD WINAPI DetachVirtualDisk(HANDLE VirtualDiskHandle, DETACH_VIRTUAL_DISK_FLAG Flags, ULONG ProviderSpecificFlags); 539 VIRTDISKAPI DWORD WINAPI ExpandVirtualDisk(HANDLE VirtualDiskHandle, EXPAND_VIRTUAL_DISK_FLAG Flags, PEXPAND_VIRTUAL_DISK_PARAMETERS Parameters, LPOVERLAPPED Overlapped); 540 VIRTDISKAPI DWORD WINAPI GetStorageDependencyInformation(HANDLE ObjectHandle, GET_STORAGE_DEPENDENCY_FLAG Flags, ULONG StorageDependencyInfoSize, PSTORAGE_DEPENDENCY_INFO StorageDependencyInfo, PULONG SizeUsed); 541 VIRTDISKAPI DWORD WINAPI GetVirtualDiskInformation(HANDLE VirtualDiskHandle, PULONG VirtualDiskInfoSize, PGET_VIRTUAL_DISK_INFO VirtualDiskInfo, PULONG SizeUsed); 542 VIRTDISKAPI DWORD WINAPI GetVirtualDiskOperationProgress(HANDLE VirtualDiskHandle, LPOVERLAPPED Overlapped, PVIRTUAL_DISK_PROGRESS Progress); 543 VIRTDISKAPI DWORD WINAPI GetVirtualDiskPhysicalPath(HANDLE VirtualDiskHandle, PULONG DiskPathSizeInBytes, PWSTR DiskPath); 544 VIRTDISKAPI DWORD WINAPI MergeVirtualDisk(HANDLE VirtualDiskHandle, MERGE_VIRTUAL_DISK_FLAG Flags, PMERGE_VIRTUAL_DISK_PARAMETERS Parameters, LPOVERLAPPED Overlapped); 545 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); 546 VIRTDISKAPI DWORD WINAPI SetVirtualDiskInformation(HANDLE VirtualDiskHandle, PSET_VIRTUAL_DISK_INFO VirtualDiskInfo); 547 548 #if (_WIN32_WINNT >= 0x0602) 549 550 VIRTDISKAPI DWORD WINAPI AddVirtualDiskParent(HANDLE VirtualDiskHandle, PCWSTR ParentPath); 551 VIRTDISKAPI DWORD WINAPI BreakMirrorVirtualDisk(HANDLE VirtualDiskHandle); 552 VIRTDISKAPI DWORD WINAPI DeleteVirtualDiskMetadata(HANDLE VirtualDiskHandle, LPGUID Item); 553 VIRTDISKAPI DWORD WINAPI EnumerateVirtualDiskMetadata(HANDLE VirtualDiskHandle, PULONG NumberOfItems, GUID *Items); 554 VIRTDISKAPI DWORD WINAPI GetVirtualDiskMetadata(HANDLE VirtualDiskHandle, LPGUID Item, PULONG MetaDataSize, PVOID MetaData); 555 VIRTDISKAPI DWORD WINAPI MirrorVirtualDisk(HANDLE VirtualDiskHandle, MIRROR_VIRTUAL_DISK_FLAG Flags, PMIRROR_VIRTUAL_DISK_PARAMETERS Parameters, LPOVERLAPPED Overlapped); 556 VIRTDISKAPI DWORD WINAPI ResizeVirtualDisk(HANDLE VirtualDiskHandle, RESIZE_VIRTUAL_DISK_FLAG Flags, PRESIZE_VIRTUAL_DISK_PARAMETERS Parameters, LPOVERLAPPED Overlapped); 557 VIRTDISKAPI DWORD WINAPI SetVirtualDiskMetadata(HANDLE VirtualDiskHandle, LPGUID Item, ULONG MetaDataSize, PVOID MetaData); 558 559 #endif /* _WIN32_WINNT >= 0x0602 */ 560 561 #if (_WIN32_WINNT >= 0x0A00) 562 563 VIRTDISKAPI DWORD WINAPI ApplySnapshotVhdSet(HANDLE VirtualDiskHandle, const PAPPLY_SNAPSHOT_VHDSET_PARAMETERS Parameters, APPLY_SNAPSHOT_VHDSET_FLAG Flags); 564 VIRTDISKAPI DWORD WINAPI DeleteSnapshotVhdSet(HANDLE VirtualDiskHandle, const PDELETE_SNAPSHOT_VHDSET_PARAMETERS Parameters, DELETE_SNAPSHOT_VHDSET_FLAG Flags); 565 VIRTDISKAPI DWORD WINAPI ModifyVhdSet(HANDLE VirtualDiskHandle, const PMODIFY_VHDSET_PARAMETERS Parameters, MODIFY_VHDSET_FLAG Flags); 566 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); 567 VIRTDISKAPI WINAPI DWORD TakeSnapshotVhdSet(HANDLE VirtualDiskHandle, const PTAKE_SNAPSHOT_VHDSET_PARAMETERS Parameters, TAKE_SNAPSHOT_VHDSET_FLAG Flags); 568 569 #endif /* _WIN32_WINNT >= 0x0A00 */ 570 #ifdef __cplusplus 571 } 572 #endif 573 #endif /*(_WIN32_WINNT >= 0x0601)*/ 574 #endif /*_INC_VIRTDISK*/ 575