/**
* 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
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
} CREATE_VIRTUAL_DISK_FLAG;
typedef enum _CREATE_VIRTUAL_DISK_VERSION {
CREATE_VIRTUAL_DISK_VERSION_UNSPECIFIED = 0,
CREATE_VIRTUAL_DISK_VERSION_1 = 1
} 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
} GET_VIRTUAL_DISK_INFO_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
} 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
} OPEN_VIRTUAL_DISK_FLAG;
typedef enum _OPEN_VIRTUAL_DISK_VERSION {
OPEN_VIRTUAL_DISK_VERSION_UNSPECIFIED = 0,
OPEN_VIRTUAL_DISK_VERSION_1 = 1
} 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
} 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_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;
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;
} 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 {
BOOL ParentResolved;
WCHAR ParentLocationBuffer[1];
} ParentLocation;
GUID ParentIdentifier;
ULONG ParentTimestamp;
VIRTUAL_STORAGE_TYPE VirtualStorageType;
ULONG ProviderSubtype;
} 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;
} 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;
} 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;
} 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;
#define VIRTUAL_STORAGE_TYPE_DEVICE_UNKNOWN 0
#define VIRTUAL_STORAGE_TYPE_DEVICE_ISO 1
#define VIRTUAL_STORAGE_TYPE_DEVICE_VHD 2
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
);
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
);
#ifdef __cplusplus
}
#endif
#endif /*(_WIN32_WINNT >= 0x0601)*/
#endif /*_INC_VIRTDISK*/