virtdisk.h (22468B) - Raw
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 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 323 typedef 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 332 typedef 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 373 typedef 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 388 typedef 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 404 typedef 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 427 typedef 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 433 typedef 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 446 typedef 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 455 typedef 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 463 typedef 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 472 typedef 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 485 typedef 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 495 typedef 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 504 typedef 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 516 typedef 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 522 typedef 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 533 DEFINE_GUID(VIRTUAL_STORAGE_TYPE_VENDOR_UNKNOWN,0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); 534 DEFINE_GUID(VIRTUAL_STORAGE_TYPE_VENDOR_MICROSOFT,0xEC984AEC,0xA0F9,0x47e9,0x90,0x1F,0x71,0x41,0x5A,0x66,0x34,0x5B); 535 536 VIRTDISKAPI DWORD WINAPI AttachVirtualDisk(HANDLE VirtualDiskHandle, PSECURITY_DESCRIPTOR SecurityDescriptor, ATTACH_VIRTUAL_DISK_FLAG Flags, ULONG ProviderSpecificFlags, PATTACH_VIRTUAL_DISK_PARAMETERS Parameters, LPOVERLAPPED Overlapped); 537 VIRTDISKAPI DWORD WINAPI CompactVirtualDisk(HANDLE VirtualDiskHandle, COMPACT_VIRTUAL_DISK_FLAG Flags, PCOMPACT_VIRTUAL_DISK_PARAMETERS Parameters, LPOVERLAPPED Overlapped); 538 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); 539 VIRTDISKAPI DWORD WINAPI DetachVirtualDisk(HANDLE VirtualDiskHandle, DETACH_VIRTUAL_DISK_FLAG Flags, ULONG ProviderSpecificFlags); 540 VIRTDISKAPI DWORD WINAPI ExpandVirtualDisk(HANDLE VirtualDiskHandle, EXPAND_VIRTUAL_DISK_FLAG Flags, PEXPAND_VIRTUAL_DISK_PARAMETERS Parameters, LPOVERLAPPED Overlapped); 541 VIRTDISKAPI DWORD WINAPI GetStorageDependencyInformation(HANDLE ObjectHandle, GET_STORAGE_DEPENDENCY_FLAG Flags, ULONG StorageDependencyInfoSize, PSTORAGE_DEPENDENCY_INFO StorageDependencyInfo, PULONG SizeUsed); 542 VIRTDISKAPI DWORD WINAPI GetVirtualDiskInformation(HANDLE VirtualDiskHandle, PULONG VirtualDiskInfoSize, PGET_VIRTUAL_DISK_INFO VirtualDiskInfo, PULONG SizeUsed); 543 VIRTDISKAPI DWORD WINAPI GetVirtualDiskOperationProgress(HANDLE VirtualDiskHandle, LPOVERLAPPED Overlapped, PVIRTUAL_DISK_PROGRESS Progress); 544 VIRTDISKAPI DWORD WINAPI GetVirtualDiskPhysicalPath(HANDLE VirtualDiskHandle, PULONG DiskPathSizeInBytes, PWSTR DiskPath); 545 VIRTDISKAPI DWORD WINAPI MergeVirtualDisk(HANDLE VirtualDiskHandle, MERGE_VIRTUAL_DISK_FLAG Flags, PMERGE_VIRTUAL_DISK_PARAMETERS Parameters, LPOVERLAPPED Overlapped); 546 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); 547 VIRTDISKAPI DWORD WINAPI SetVirtualDiskInformation(HANDLE VirtualDiskHandle, PSET_VIRTUAL_DISK_INFO VirtualDiskInfo); 548 549 #if (_WIN32_WINNT >= 0x0602) 550 551 VIRTDISKAPI DWORD WINAPI AddVirtualDiskParent(HANDLE VirtualDiskHandle, PCWSTR ParentPath); 552 VIRTDISKAPI DWORD WINAPI BreakMirrorVirtualDisk(HANDLE VirtualDiskHandle); 553 VIRTDISKAPI DWORD WINAPI DeleteVirtualDiskMetadata(HANDLE VirtualDiskHandle, LPGUID Item); 554 VIRTDISKAPI DWORD WINAPI EnumerateVirtualDiskMetadata(HANDLE VirtualDiskHandle, PULONG NumberOfItems, GUID *Items); 555 VIRTDISKAPI DWORD WINAPI GetVirtualDiskMetadata(HANDLE VirtualDiskHandle, LPGUID Item, PULONG MetaDataSize, PVOID MetaData); 556 VIRTDISKAPI DWORD WINAPI MirrorVirtualDisk(HANDLE VirtualDiskHandle, MIRROR_VIRTUAL_DISK_FLAG Flags, PMIRROR_VIRTUAL_DISK_PARAMETERS Parameters, LPOVERLAPPED Overlapped); 557 VIRTDISKAPI DWORD WINAPI ResizeVirtualDisk(HANDLE VirtualDiskHandle, RESIZE_VIRTUAL_DISK_FLAG Flags, PRESIZE_VIRTUAL_DISK_PARAMETERS Parameters, LPOVERLAPPED Overlapped); 558 VIRTDISKAPI DWORD WINAPI SetVirtualDiskMetadata(HANDLE VirtualDiskHandle, LPGUID Item, ULONG MetaDataSize, PVOID MetaData); 559 560 #endif /* _WIN32_WINNT >= 0x0602 */ 561 562 #if (_WIN32_WINNT >= 0x0A00) 563 564 VIRTDISKAPI DWORD WINAPI ApplySnapshotVhdSet(HANDLE VirtualDiskHandle, const PAPPLY_SNAPSHOT_VHDSET_PARAMETERS Parameters, APPLY_SNAPSHOT_VHDSET_FLAG Flags); 565 VIRTDISKAPI DWORD WINAPI DeleteSnapshotVhdSet(HANDLE VirtualDiskHandle, const PDELETE_SNAPSHOT_VHDSET_PARAMETERS Parameters, DELETE_SNAPSHOT_VHDSET_FLAG Flags); 566 VIRTDISKAPI DWORD WINAPI ModifyVhdSet(HANDLE VirtualDiskHandle, const PMODIFY_VHDSET_PARAMETERS Parameters, MODIFY_VHDSET_FLAG Flags); 567 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); 568 VIRTDISKAPI 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*/