/** * This file has no copyright assigned and is placed in the Public Domain. * This file is part of the mingw-w64 runtime package. * No warranty is given; refer to the file DISCLAIMER.PD within this package. */ #ifndef _INC_VIRTDISK #define _INC_VIRTDISK #if (_WIN32_WINNT >= 0x0601) #ifdef __cplusplus extern "C" { #endif #define VIRTDISKAPI DECLSPEC_IMPORT #define VIRTUAL_STORAGE_TYPE_DEVICE_UNKNOWN 0 #define VIRTUAL_STORAGE_TYPE_DEVICE_ISO 1 #define VIRTUAL_STORAGE_TYPE_DEVICE_VHD 2 #if (_WIN32_WINNT >= 0x0A00) #define VIRTUAL_STORAGE_TYPE_DEVICE_VHDX 3 #endif /* _WIN32_WINNT >= 0x0A00 */ typedef enum _ATTACH_VIRTUAL_DISK_FLAG { ATTACH_VIRTUAL_DISK_FLAG_NONE = 0x00000000, ATTACH_VIRTUAL_DISK_FLAG_READ_ONLY = 0x00000001, ATTACH_VIRTUAL_DISK_FLAG_NO_DRIVE_LETTER = 0x00000002, ATTACH_VIRTUAL_DISK_FLAG_PERMANENT_LIFETIME = 0x00000004, ATTACH_VIRTUAL_DISK_FLAG_NO_LOCAL_HOST = 0x00000008 } ATTACH_VIRTUAL_DISK_FLAG; typedef enum _ATTACH_VIRTUAL_DISK_VERSION { ATTACH_VIRTUAL_DISK_VERSION_UNSPECIFIED = 0, ATTACH_VIRTUAL_DISK_VERSION_1 = 1 } ATTACH_VIRTUAL_DISK_VERSION; typedef enum _COMPACT_VIRTUAL_DISK_FLAG { COMPACT_VIRTUAL_DISK_FLAG_NONE = 0x00000000 } COMPACT_VIRTUAL_DISK_FLAG; typedef enum _COMPACT_VIRTUAL_DISK_VERSION { COMPACT_VIRTUAL_DISK_VERSION_UNSPECIFIED = 0, COMPACT_VIRTUAL_DISK_VERSION_1 = 1 } COMPACT_VIRTUAL_DISK_VERSION; typedef enum _CREATE_VIRTUAL_DISK_FLAG { CREATE_VIRTUAL_DISK_FLAG_NONE = 0x00000000, CREATE_VIRTUAL_DISK_FLAG_FULL_PHYSICAL_ALLOCATION = 0x00000001 #if (_WIN32_WINNT >= 0x0602) , CREATE_VIRTUAL_DISK_FLAG_PREVENT_WRITES_TO_SOURCE_DISK = 0x2, CREATE_VIRTUAL_DISK_FLAG_DO_NOT_COPY_METADATA_FROM_PARENT = 0x4 #endif /* _WIN32_WINNT >= 0x0602 */ } CREATE_VIRTUAL_DISK_FLAG; typedef enum _CREATE_VIRTUAL_DISK_VERSION { CREATE_VIRTUAL_DISK_VERSION_UNSPECIFIED = 0, CREATE_VIRTUAL_DISK_VERSION_1 = 1 #if (_WIN32_WINNT >= 0x0602) , CREATE_VIRTUAL_DISK_VERSION_2 = 2 #endif /* _WIN32_WINNT >= 0x0602 */ } CREATE_VIRTUAL_DISK_VERSION; typedef enum _DEPENDENT_DISK_FLAG { DEPENDENT_DISK_FLAG_NONE = 0x00000000, DEPENDENT_DISK_FLAG_MULT_BACKING_FILES = 0x00000001, DEPENDENT_DISK_FLAG_FULLY_ALLOCATED = 0x00000002, DEPENDENT_DISK_FLAG_READ_ONLY = 0x00000004, DEPENDENT_DISK_FLAG_REMOTE = 0x00000008, DEPENDENT_DISK_FLAG_SYSTEM_VOLUME = 0x00000010, DEPENDENT_DISK_FLAG_SYSTEM_VOLUME_PARENT = 0x00000020, DEPENDENT_DISK_FLAG_REMOVABLE = 0x00000040, DEPENDENT_DISK_FLAG_NO_DRIVE_LETTER = 0x00000080, DEPENDENT_DISK_FLAG_PARENT = 0x00000100, DEPENDENT_DISK_FLAG_NO_HOST_DISK = 0x00000200, DEPENDENT_DISK_FLAG_PERMANENT_LIFETIME = 0x00000400 } DEPENDENT_DISK_FLAG; typedef enum _EXPAND_VIRTUAL_DISK_VERSION { EXPAND_VIRTUAL_DISK_VERSION_UNSPECIFIED = 0, EXPAND_VIRTUAL_DISK_VERSION_1 = 1 } EXPAND_VIRTUAL_DISK_VERSION; typedef enum _DETACH_VIRTUAL_DISK_FLAG { DETACH_VIRTUAL_DISK_FLAG_NONE = 0x00000000 } DETACH_VIRTUAL_DISK_FLAG; typedef enum _EXPAND_VIRTUAL_DISK_FLAG { EXPAND_VIRTUAL_DISK_FLAG_NONE = 0x00000000 } EXPAND_VIRTUAL_DISK_FLAG; typedef enum _GET_STORAGE_DEPENDENCY_FLAG { GET_STORAGE_DEPENDENCY_FLAG_NONE = 0x00000000, GET_STORAGE_DEPENDENCY_FLAG_HOST_VOLUMES = 0x00000001, GET_STORAGE_DEPENDENCY_FLAG_DISK_HANDLE = 0x00000002 } GET_STORAGE_DEPENDENCY_FLAG; typedef enum _GET_VIRTUAL_DISK_INFO_VERSION { GET_VIRTUAL_DISK_INFO_UNSPECIFIED = 0, GET_VIRTUAL_DISK_INFO_SIZE = 1, GET_VIRTUAL_DISK_INFO_IDENTIFIER = 2, GET_VIRTUAL_DISK_INFO_PARENT_LOCATION = 3, GET_VIRTUAL_DISK_INFO_PARENT_IDENTIFIER = 4, GET_VIRTUAL_DISK_INFO_PARENT_TIMESTAMP = 5, GET_VIRTUAL_DISK_INFO_VIRTUAL_STORAGE_TYPE = 6, GET_VIRTUAL_DISK_INFO_PROVIDER_SUBTYPE = 7 #if (_WIN32_WINNT >= 0x0602) , GET_VIRTUAL_DISK_INFO_IS_4K_ALIGNED = 8, GET_VIRTUAL_DISK_INFO_PHYSICAL_DISK = 9, GET_VIRTUAL_DISK_INFO_VHD_PHYSICAL_SECTOR_SIZE = 10, GET_VIRTUAL_DISK_INFO_SMALLEST_SAFE_VIRTUAL_SIZE = 11, GET_VIRTUAL_DISK_INFO_FRAGMENTATION = 12 #endif /* _WIN32_WINNT >= 0x0602 */ #if (_WIN32_WINNT >= 0x0603) , GET_VIRTUAL_DISK_INFO_IS_LOADED = 13, GET_VIRTUAL_DISK_INFO_VIRTUAL_DISK_ID = 14 #endif /* _WIN32_WINNT >= 0x0603 */ #if (_WIN32_WINNT >= 0x0A00) , GET_VIRTUAL_DISK_INFO_CHANGE_TRACKING_STATE = 15 #endif /* _WIN32_WINNT >= 0x0A00 */ } GET_VIRTUAL_DISK_INFO_VERSION; typedef enum _MIRROR_VIRTUAL_DISK_FLAG { MIRROR_VIRTUAL_DISK_FLAG_NONE = 0x00000000, MIRROR_VIRTUAL_DISK_FLAG_EXISTING_FILE = 0x00000001 } MIRROR_VIRTUAL_DISK_FLAG; typedef enum _MIRROR_VIRTUAL_DISK_VERSION { MIRROR_VIRTUAL_DISK_VERSION_UNSPECIFIED = 0, MIRROR_VIRTUAL_DISK_VERSION_1 = 1 } MIRROR_VIRTUAL_DISK_VERSION; typedef enum _MERGE_VIRTUAL_DISK_FLAG { MERGE_VIRTUAL_DISK_FLAG_NONE = 0x00000000 } MERGE_VIRTUAL_DISK_FLAG; typedef enum _MERGE_VIRTUAL_DISK_VERSION { MERGE_VIRTUAL_DISK_VERSION_UNSPECIFIED = 0, MERGE_VIRTUAL_DISK_VERSION_1 = 1 #if (_WIN32_WINNT >= 0x0602) , MERGE_VIRTUAL_DISK_VERSION_2 = 2 #endif /* _WIN32_WINNT >= 0x0A00 */ } MERGE_VIRTUAL_DISK_VERSION; typedef enum _OPEN_VIRTUAL_DISK_FLAG { OPEN_VIRTUAL_DISK_FLAG_NONE = 0x00000000, OPEN_VIRTUAL_DISK_FLAG_NO_PARENTS = 0x00000001, OPEN_VIRTUAL_DISK_FLAG_BLANK_FILE = 0x00000002, OPEN_VIRTUAL_DISK_FLAG_BOOT_DRIVE = 0x00000004 #if (_WIN32_WINNT >= 0x0602) , OPEN_VIRTUAL_DISK_FLAG_CACHED_IO = 0x00000008, OPEN_VIRTUAL_DISK_FLAG_CUSTOM_DIFF_CHAIN = 0x00000010 #endif /* _WIN32_WINNT >= 0x0602 */ } OPEN_VIRTUAL_DISK_FLAG; typedef enum _OPEN_VIRTUAL_DISK_VERSION { OPEN_VIRTUAL_DISK_VERSION_UNSPECIFIED = 0, OPEN_VIRTUAL_DISK_VERSION_1 = 1 #if (_WIN32_WINNT >= 0x0602) , OPEN_VIRTUAL_DISK_VERSION_2 = 2 #endif /* _WIN32_WINNT >= 0x0602 */ } OPEN_VIRTUAL_DISK_VERSION; typedef enum _SET_VIRTUAL_DISK_INFO_VERSION { SET_VIRTUAL_DISK_INFO_UNSPECIFIED = 0, SET_VIRTUAL_DISK_INFO_PARENT_PATH = 1, SET_VIRTUAL_DISK_INFO_IDENTIFIER = 2 #if (_WIN32_WINNT >= 0x0602) , SET_VIRTUAL_DISK_INFO_PARENT_PATH_WITH_DEPTH = 3, SET_VIRTUAL_DISK_INFO_PHYSICAL_SECTOR_SIZE = 4 #endif /* (_WIN32_WINNT >= 0x0602) */ #if (_WIN32_WINNT >= 0x0603) , SET_VIRTUAL_DISK_INFO_VIRTUAL_DISK_ID = 5 #endif /* (_WIN32_WINNT >= 0x0603) */ #if (_WIN32_WINNT >= 0x0A00) , SET_VIRTUAL_DISK_INFO_CHANGE_TRACKING_STATE = 6, SET_VIRTUAL_DISK_INFO_PARENT_LOCATOR = 7 #endif /* (_WIN32_WINNT >= 0x0A00) */ } SET_VIRTUAL_DISK_INFO_VERSION; typedef enum _STORAGE_DEPENDENCY_INFO_VERSION { STORAGE_DEPENDENCY_INFO_VERSION_UNSPECIFIED = 0, STORAGE_DEPENDENCY_INFO_VERSION_1 = 1, STORAGE_DEPENDENCY_INFO_VERSION_2 = 2 } STORAGE_DEPENDENCY_INFO_VERSION; typedef enum _VIRTUAL_DISK_ACCESS_MASK { VIRTUAL_DISK_ACCESS_NONE = 0x00000000, VIRTUAL_DISK_ACCESS_ATTACH_RO = 0x00010000, VIRTUAL_DISK_ACCESS_ATTACH_RW = 0x00020000, VIRTUAL_DISK_ACCESS_DETACH = 0x00040000, VIRTUAL_DISK_ACCESS_GET_INFO = 0x00080000, VIRTUAL_DISK_ACCESS_CREATE = 0x00100000, VIRTUAL_DISK_ACCESS_METAOPS = 0x00200000, VIRTUAL_DISK_ACCESS_READ = 0x000d0000, VIRTUAL_DISK_ACCESS_ALL = 0x003f0000, VIRTUAL_DISK_ACCESS_WRITABLE = 0x00320000 } VIRTUAL_DISK_ACCESS_MASK; #if (_WIN32_WINNT >= 0x0602) typedef enum _RESIZE_VIRTUAL_DISK_FLAG { RESIZE_VIRTUAL_DISK_FLAG_NONE = 0x0, RESIZE_VIRTUAL_DISK_FLAG_ALLOW_UNSAFE_VIRTUAL_SIZE = 0x1, RESIZE_VIRTUAL_DISK_FLAG_RESIZE_TO_SMALLEST_SAFE_VIRTUAL_SIZE = 0x2 } RESIZE_VIRTUAL_DISK_FLAG; typedef enum _RESIZE_VIRTUAL_DISK_VERSION { RESIZE_VIRTUAL_DISK_VERSION_UNSPECIFIED = 0, RESIZE_VIRTUAL_DISK_VERSION_1 = 1 } RESIZE_VIRTUAL_DISK_VERSION; #endif /* (_WIN32_WINNT >= 0x0602) */ #if (_WIN32_WINNT >= 0x0A00) typedef enum _APPLY_SNAPSHOT_VHDSET_FLAG { APPLY_SNAPSHOT_VHDSET_FLAG_NONE = 0x00000000, APPLY_SNAPSHOT_VHDSET_FLAG_WRITEABLE = 0x00000001 } APPLY_SNAPSHOT_VHDSET_FLAG, *PAPPLY_SNAPSHOT_VHDSET_FLAG; typedef enum _APPLY_SNAPSHOT_VHDSET_VERSION { APPLY_SNAPSHOT_VHDSET_VERSION_UNSPECIFIED = 0, APPLY_SNAPSHOT_VHDSET_VERSION_1 = 1 } APPLY_SNAPSHOT_VHDSET_VERSION; typedef enum _DELETE_SNAPSHOT_VHDSET_FLAG { DELETE_SNAPSHOT_VHDSET_FLAG_NONE = 0x00000000, DELETE_SNAPSHOT_VHDSET_FLAG_PERSIST_RCT = 0x00000001 } DELETE_SNAPSHOT_VHDSET_FLAG, *PDELETE_SNAPSHOT_VHDSET_FLAG; typedef enum _DELETE_SNAPSHOT_VHDSET_VERSION { DELETE_SNAPSHOT_VHDSET_VERSION_UNSPECIFIED = 0x00000000, DELETE_SNAPSHOT_VHDSET_VERSION_1 = 0x00000001 } DELETE_SNAPSHOT_VHDSET_VERSION, *PDELETE_SNAPSHOT_VHDSET_VERSION; typedef enum _MODIFY_VHDSET_FLAG { MODIFY_VHDSET_FLAG_NONE = 0x00000000 } MODIFY_VHDSET_FLAG, *PMODIFY_VHDSET_FLAG; typedef enum _MODIFY_VHDSET_VERSION { MODIFY_VHDSET_UNSPECIFIED = 0, MODIFY_VHDSET_SNAPSHOT_PATH = 1, MODIFY_VHDSET_REMOVE_SNAPSHOT = 2, MODIFY_VHDSET_DEFAULT_SNAPSHOT_PATH = 3 } MODIFY_VHDSET_VERSION, *PMODIFY_VHDSET_VERSION; typedef enum _QUERY_CHANGES_VIRTUAL_DISK_FLAG { QUERY_CHANGES_VIRTUAL_DISK_FLAG_NONE = 0x00000000 } QUERY_CHANGES_VIRTUAL_DISK_FLAG; typedef enum _TAKE_SNAPSHOT_VHDSET_FLAG { TAKE_SNAPSHOT_VHDSET_FLAG_NONE = 0x00000000 } TAKE_SNAPSHOT_VHDSET_FLAG, *PTAKE_SNAPSHOT_VHDSET_FLAG; typedef enum _TAKE_SNAPSHOT_VHDSET_VERSION { TAKE_SNAPSHOT_VHDSET_VERSION_UNSPECIFIED = 0, TAKE_SNAPSHOT_VHDSET_VERSION_1 = 1 } TAKE_SNAPSHOT_VHDSET_VERSION; #endif /* _WIN32_WINNT >= 0x0A00 */ typedef struct _VIRTUAL_STORAGE_TYPE { ULONG DeviceId; GUID VendorId; } VIRTUAL_STORAGE_TYPE, *PVIRTUAL_STORAGE_TYPE; typedef struct _ATTACH_VIRTUAL_DISK_PARAMETERS { ATTACH_VIRTUAL_DISK_VERSION Version; __C89_NAMELESS union { struct { ULONG Reserved; } Version1; } DUMMYUNIONNAME; } ATTACH_VIRTUAL_DISK_PARAMETERS, *PATTACH_VIRTUAL_DISK_PARAMETERS; typedef struct _COMPACT_VIRTUAL_DISK_PARAMETERS { COMPACT_VIRTUAL_DISK_VERSION Version; __C89_NAMELESS union { struct { ULONG Reserved; } Version1; } DUMMYUNIONNAME; } COMPACT_VIRTUAL_DISK_PARAMETERS, *PCOMPACT_VIRTUAL_DISK_PARAMETERS; typedef struct _CREATE_VIRTUAL_DISK_PARAMETERS { CREATE_VIRTUAL_DISK_VERSION Version; __C89_NAMELESS union { struct { GUID UniqueId; ULONGLONG MaximumSize; ULONG BlockSizeInBytes; ULONG SectorSizeInBytes; PCWSTR ParentPath; PCWSTR SourcePath; } Version1; #if (_WIN32_WINNT >= 0x0602) struct { GUID UniqueId; ULONGLONG MaximumSize; ULONG BlockSizeInBytes; ULONG SectorSizeInBytes; PCWSTR ParentPath; PCWSTR SourcePath; OPEN_VIRTUAL_DISK_FLAG OpenFlags; VIRTUAL_STORAGE_TYPE ParentVirtualStorageType; VIRTUAL_STORAGE_TYPE SourceVirtualStorageType; GUID ResiliencyGuid; } Version2; #endif /* _WIN32_WINNT >= 0x0602 */ } DUMMYUNIONNAME; } CREATE_VIRTUAL_DISK_PARAMETERS, *PCREATE_VIRTUAL_DISK_PARAMETERS; typedef struct _EXPAND_VIRTUAL_DISK_PARAMETERS { EXPAND_VIRTUAL_DISK_VERSION Version; __C89_NAMELESS union { struct { ULONGLONG NewSize; } Version1; } DUMMYUNIONNAME; } EXPAND_VIRTUAL_DISK_PARAMETERS, *PEXPAND_VIRTUAL_DISK_PARAMETERS; typedef struct _GET_VIRTUAL_DISK_INFO { GET_VIRTUAL_DISK_INFO_VERSION Version; __C89_NAMELESS union { struct { ULONGLONG VirtualSize; ULONGLONG PhysicalSize; ULONG BlockSize; ULONG SectorSize; } Size; GUID Identifier; struct { WINBOOL ParentResolved; WCHAR ParentLocationBuffer[1]; } ParentLocation; GUID ParentIdentifier; ULONG ParentTimestamp; VIRTUAL_STORAGE_TYPE VirtualStorageType; ULONG ProviderSubtype; #if (_WIN32_WINNT >= 0x0602) WINBOOL Is4kAligned; WINBOOL IsLoaded; struct { ULONG LogicalSectorSize; ULONG PhysicalSectorSize; WINBOOL IsRemote; } PhysicalDisk; ULONG VhdPhysicalSectorSize; ULONGLONG SmallestSafeVirtualSize; ULONG FragmentationPercentage; #endif /* _WIN32_WINNT >= 0x0602 */ #if (_WIN32_WINNT >= 0x0603) GUID VirtualDiskId; struct { WINBOOL Enabled; WINBOOL NewerChanges; WCHAR MostRecentId[1]; } ChangeTrackingState; #endif /* _WIN32_WINNT >= 0x0603 */ } DUMMYUNIONNAME; } GET_VIRTUAL_DISK_INFO, *PGET_VIRTUAL_DISK_INFO; typedef struct _MERGE_VIRTUAL_DISK_PARAMETERS { MERGE_VIRTUAL_DISK_VERSION Version; __C89_NAMELESS union { struct { ULONG MergeDepth; } Version1; #if (_WIN32_WINNT >= 0x0602) struct { ULONG MergeSourceDepth; ULONG MergeTargetDepth; } Version2; #endif /* _WIN32_WINNT >= 0x0602 */ } DUMMYUNIONNAME; } MERGE_VIRTUAL_DISK_PARAMETERS, *PMERGE_VIRTUAL_DISK_PARAMETERS; typedef struct _OPEN_VIRTUAL_DISK_PARAMETERS { OPEN_VIRTUAL_DISK_VERSION Version; __C89_NAMELESS union { struct { ULONG RWDepth; } Version1; #if (_WIN32_WINNT >= 0x0602) struct { WINBOOL GetInfoOnly; WINBOOL ReadOnly; GUID ResiliencyGuid; } Version2; #endif /* _WIN32_WINNT >= 0x0602 */ } DUMMYUNIONNAME; } OPEN_VIRTUAL_DISK_PARAMETERS, *POPEN_VIRTUAL_DISK_PARAMETERS; typedef struct _SET_VIRTUAL_DISK_INFO { SET_VIRTUAL_DISK_INFO_VERSION Version; __C89_NAMELESS union { PCWSTR ParentFilePath; GUID UniqueIdentifier; #if (_WIN32_WINNT >= 0x0602) struct { ULONG ChildDepth; PCWSTR ParentFilePath; } ParentPathWithDepthInfo; ULONG VhdPhysicalSectorSize; GUID VirtualDiskId; #endif /* _WIN32_WINNT >= 0x0602 */ #if (_WIN32_WINNT >= 0x0603) WINBOOL ChangeTrackingEnabled; struct { GUID LinkageId; PCWSTR ParentFilePath; } ParentLocator; #endif /* _WIN32_WINNT >= 0x0603 */ } DUMMYUNIONNAME; } SET_VIRTUAL_DISK_INFO, *PSET_VIRTUAL_DISK_INFO; typedef struct _STORAGE_DEPENDENCY_INFO_TYPE_1 { DEPENDENT_DISK_FLAG DependencyTypeFlags; ULONG ProviderSpecificFlags; VIRTUAL_STORAGE_TYPE VirtualStorageType; } STORAGE_DEPENDENCY_INFO_TYPE_1, *PSTORAGE_DEPENDENCY_INFO_TYPE_1; typedef struct _STORAGE_DEPENDENCY_INFO_TYPE_2 { DEPENDENT_DISK_FLAG DependencyTypeFlags; ULONG ProviderSpecificFlags; VIRTUAL_STORAGE_TYPE VirtualStorageType; ULONG AncestorLevel; PWSTR DependencyDeviceName; PWSTR HostVolumeName; PWSTR DependentVolumeName; PWSTR DependentVolumeRelativePath; } STORAGE_DEPENDENCY_INFO_TYPE_2, *PSTORAGE_DEPENDENCY_INFO_TYPE_2; /* Fixme: Suppress GCC errors about "error: flexible array member in union" */ typedef struct _STORAGE_DEPENDENCY_INFO { STORAGE_DEPENDENCY_INFO_VERSION Version; ULONG NumberEntries; __C89_NAMELESS union { STORAGE_DEPENDENCY_INFO_TYPE_1 Version1Entries[1]; STORAGE_DEPENDENCY_INFO_TYPE_2 Version2Entries[1]; } DUMMYUNIONNAME; } STORAGE_DEPENDENCY_INFO, *PSTORAGE_DEPENDENCY_INFO; typedef struct _VIRTUAL_DISK_PROGRESS { DWORD OperationStatus; ULONGLONG CurrentValue; ULONGLONG CompletionValue; } VIRTUAL_DISK_PROGRESS, *PVIRTUAL_DISK_PROGRESS; #if (_WIN32_WINNT >= 0x0602) typedef struct _MIRROR_VIRTUAL_DISK_PARAMETERS { MIRROR_VIRTUAL_DISK_VERSION Version; __C89_NAMELESS union { struct { PCWSTR MirrorVirtualDiskPath; } Version1; } DUMMYUNIONNAME; } MIRROR_VIRTUAL_DISK_PARAMETERS, *PMIRROR_VIRTUAL_DISK_PARAMETERS; typedef struct _RESIZE_VIRTUAL_DISK_PARAMETERS { RESIZE_VIRTUAL_DISK_VERSION Version; __C89_NAMELESS union { struct { ULONGLONG NewSize; } Version1; } DUMMYUNIONNAME; } RESIZE_VIRTUAL_DISK_PARAMETERS, *PRESIZE_VIRTUAL_DISK_PARAMETERS; #endif /* _WIN32_WINNT >= 0x0602 */ #if (_WIN32_WINNT >= 0x0A00) typedef struct _APPLY_SNAPSHOT_VHDSET_PARAMETERS { APPLY_SNAPSHOT_VHDSET_VERSION Version; __C89_NAMELESS union { struct { GUID SnapshotId; GUID LeafSnapshotId; } Version1; } DUMMYUNIONNAME; } APPLY_SNAPSHOT_VHDSET_PARAMETERS, *PAPPLY_SNAPSHOT_VHDSET_PARAMETERS; typedef struct _DELETE_SNAPSHOT_VHDSET_PARAMETERS { DELETE_SNAPSHOT_VHDSET_VERSION Version; __C89_NAMELESS union { struct { GUID SnapshotId; } Version1; } DUMMYUNIONNAME; } DELETE_SNAPSHOT_VHDSET_PARAMETERS, *PDELETE_SNAPSHOT_VHDSET_PARAMETERS; typedef struct _MODIFY_VHDSET_PARAMETERS { MODIFY_VHDSET_VERSION Version; __C89_NAMELESS union { struct { GUID SnapshotId; PCWSTR SnapshotFilePath; } SnapshotPath; GUID SnapshotId; PCWSTR DefaultFilePath; } DUMMYUNIONNAME; } MODIFY_VHDSET_PARAMETERS, *PMODIFY_VHDSET_PARAMETERS; typedef struct _QUERY_CHANGES_VIRTUAL_DISK_RANGE { ULONG64 ByteOffset; ULONG64 ByteLength; ULONG64 Reserved; } QUERY_CHANGES_VIRTUAL_DISK_RANGE, *PQUERY_CHANGES_VIRTUAL_DISK_RANGE; typedef struct _TAKE_SNAPSHOT_VHDSET_PARAMETERS { TAKE_SNAPSHOT_VHDSET_VERSION Version; __C89_NAMELESS union { struct { GUID SnapshotId; } Version1; } DUMMYUNIONNAME; } TAKE_SNAPSHOT_VHDSET_PARAMETERS, *PTAKE_SNAPSHOT_VHDSET_PARAMETERS; #endif /* _WIN32_WINNT >= 0x0A00 */ DEFINE_GUID(VIRTUAL_STORAGE_TYPE_VENDOR_UNKNOWN,0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); DEFINE_GUID(VIRTUAL_STORAGE_TYPE_VENDOR_MICROSOFT,0xEC984AEC,0xA0F9,0x47e9,0x90,0x1F,0x71,0x41,0x5A,0x66,0x34,0x5B); VIRTDISKAPI DWORD WINAPI AttachVirtualDisk(HANDLE VirtualDiskHandle, PSECURITY_DESCRIPTOR SecurityDescriptor, ATTACH_VIRTUAL_DISK_FLAG Flags, ULONG ProviderSpecificFlags, PATTACH_VIRTUAL_DISK_PARAMETERS Parameters, LPOVERLAPPED Overlapped); VIRTDISKAPI DWORD WINAPI CompactVirtualDisk(HANDLE VirtualDiskHandle, COMPACT_VIRTUAL_DISK_FLAG Flags, PCOMPACT_VIRTUAL_DISK_PARAMETERS Parameters, LPOVERLAPPED Overlapped); 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); VIRTDISKAPI DWORD WINAPI DetachVirtualDisk(HANDLE VirtualDiskHandle, DETACH_VIRTUAL_DISK_FLAG Flags, ULONG ProviderSpecificFlags); VIRTDISKAPI DWORD WINAPI ExpandVirtualDisk(HANDLE VirtualDiskHandle, EXPAND_VIRTUAL_DISK_FLAG Flags, PEXPAND_VIRTUAL_DISK_PARAMETERS Parameters, LPOVERLAPPED Overlapped); VIRTDISKAPI DWORD WINAPI GetStorageDependencyInformation(HANDLE ObjectHandle, GET_STORAGE_DEPENDENCY_FLAG Flags, ULONG StorageDependencyInfoSize, PSTORAGE_DEPENDENCY_INFO StorageDependencyInfo, PULONG SizeUsed); VIRTDISKAPI DWORD WINAPI GetVirtualDiskInformation(HANDLE VirtualDiskHandle, PULONG VirtualDiskInfoSize, PGET_VIRTUAL_DISK_INFO VirtualDiskInfo, PULONG SizeUsed); VIRTDISKAPI DWORD WINAPI GetVirtualDiskOperationProgress(HANDLE VirtualDiskHandle, LPOVERLAPPED Overlapped, PVIRTUAL_DISK_PROGRESS Progress); VIRTDISKAPI DWORD WINAPI GetVirtualDiskPhysicalPath(HANDLE VirtualDiskHandle, PULONG DiskPathSizeInBytes, PWSTR DiskPath); VIRTDISKAPI DWORD WINAPI MergeVirtualDisk(HANDLE VirtualDiskHandle, MERGE_VIRTUAL_DISK_FLAG Flags, PMERGE_VIRTUAL_DISK_PARAMETERS Parameters, LPOVERLAPPED Overlapped); 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); VIRTDISKAPI DWORD WINAPI SetVirtualDiskInformation(HANDLE VirtualDiskHandle, PSET_VIRTUAL_DISK_INFO VirtualDiskInfo); #if (_WIN32_WINNT >= 0x0602) VIRTDISKAPI DWORD WINAPI AddVirtualDiskParent(HANDLE VirtualDiskHandle, PCWSTR ParentPath); VIRTDISKAPI DWORD WINAPI BreakMirrorVirtualDisk(HANDLE VirtualDiskHandle); VIRTDISKAPI DWORD WINAPI DeleteVirtualDiskMetadata(HANDLE VirtualDiskHandle, LPGUID Item); VIRTDISKAPI DWORD WINAPI EnumerateVirtualDiskMetadata(HANDLE VirtualDiskHandle, PULONG NumberOfItems, GUID *Items); VIRTDISKAPI DWORD WINAPI GetVirtualDiskMetadata(HANDLE VirtualDiskHandle, LPGUID Item, PULONG MetaDataSize, PVOID MetaData); VIRTDISKAPI DWORD WINAPI MirrorVirtualDisk(HANDLE VirtualDiskHandle, MIRROR_VIRTUAL_DISK_FLAG Flags, PMIRROR_VIRTUAL_DISK_PARAMETERS Parameters, LPOVERLAPPED Overlapped); VIRTDISKAPI DWORD WINAPI ResizeVirtualDisk(HANDLE VirtualDiskHandle, RESIZE_VIRTUAL_DISK_FLAG Flags, PRESIZE_VIRTUAL_DISK_PARAMETERS Parameters, LPOVERLAPPED Overlapped); VIRTDISKAPI DWORD WINAPI SetVirtualDiskMetadata(HANDLE VirtualDiskHandle, LPGUID Item, ULONG MetaDataSize, PVOID MetaData); #endif /* _WIN32_WINNT >= 0x0602 */ #if (_WIN32_WINNT >= 0x0A00) VIRTDISKAPI DWORD WINAPI ApplySnapshotVhdSet(HANDLE VirtualDiskHandle, const PAPPLY_SNAPSHOT_VHDSET_PARAMETERS Parameters, APPLY_SNAPSHOT_VHDSET_FLAG Flags); VIRTDISKAPI DWORD WINAPI DeleteSnapshotVhdSet(HANDLE VirtualDiskHandle, const PDELETE_SNAPSHOT_VHDSET_PARAMETERS Parameters, DELETE_SNAPSHOT_VHDSET_FLAG Flags); VIRTDISKAPI DWORD WINAPI ModifyVhdSet(HANDLE VirtualDiskHandle, const PMODIFY_VHDSET_PARAMETERS Parameters, MODIFY_VHDSET_FLAG Flags); 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); VIRTDISKAPI WINAPI DWORD TakeSnapshotVhdSet(HANDLE VirtualDiskHandle, const PTAKE_SNAPSHOT_VHDSET_PARAMETERS Parameters, TAKE_SNAPSHOT_VHDSET_FLAG Flags); #endif /* _WIN32_WINNT >= 0x0A00 */ #ifdef __cplusplus } #endif #endif /*(_WIN32_WINNT >= 0x0601)*/ #endif /*_INC_VIRTDISK*/