zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

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*/