mirror of
https://github.com/QB64Official/qb64.git
synced 2024-08-22 02:05:08 +00:00
574 lines
22 KiB
C
574 lines
22 KiB
C
/**
|
|
* 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*/
|