xpmgr/BuildTools/Include/vds.idl

1091 lines
33 KiB
Plaintext

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 2000
//
// File: vds.idl
//
// Abstract:
// declarations of interfaces and types of Virtual Disk Service.
//
// Note:
// if a type is an aggregation of types defined by software provider,
// hardware provider, or the common layer, they are listed in this
// order: common to all, software provider specific, hardware provider
// specific, common layer specific.
//
//----------------------------------------------------------------------------
cpp_quote("//+--------------------------------------------------------------")
cpp_quote("//")
cpp_quote("// Microsoft Windows")
cpp_quote("// Copyright (c) 2008 Microsoft Corporation.")
cpp_quote("//")
cpp_quote("//---------------------------------------------------------------")
import "oaidl.idl";
import "vdssys.idl";
//
// Includes
//
#include "vdscmmn.idl"
#include "vdssp.idl"
#include "vdshp.idl"
#include "vdsvd.idl"
#define DRIVE_LETTER_PROP
#define MAX_PATH 260
interface IVdsServiceLoader;
interface IVdsService;
interface IVdsServiceUninstallDisk;
interface IVdsServiceHba;
interface IVdsServiceIscsi;
interface IVdsServiceInitialization;
interface IVdsHbaPort;
interface IVdsIscsiInitiatorAdapter;
interface IVdsIscsiInitiatorPortal;
interface IVdsDiskPartitionMF;
interface IVdsDiskPartitionMF2;
interface IVdsVolumeMF;
interface IVdsVolumeMF2;
interface IVdsVolumeMF3;
interface IVdsVolumeShrink;
interface IVdsSubSystemImportTarget;
interface IVdsIscsiPortalLocal;
interface IVdsServiceSAN;
cpp_quote("// {9C38ED61-D565-4728-AEEE-C80952F0ECDE}")
cpp_quote("DEFINE_GUID(CLSID_VdsLoader, ")
cpp_quote(" 0X9C38ED61,0xD565,0x4728,0xAE,0xEE,0xC8,0x09,0x52,0xF0,0xEC,0xDE);")
cpp_quote("")
cpp_quote("// {7D1933CB-86F6-4A98-8628-01BE94C9A575}")
cpp_quote("DEFINE_GUID(CLSID_VdsService, ")
cpp_quote(" 0x7D1933CB,0x86F6,0x4A98,0x86,0x28,0x01,0xBE,0x94,0xC9,0xA5,0x75);")
cpp_quote("")
const LONG MAX_FS_NAME_SIZE = 8; // size of file system type as used in VDS_FILE_SYSTEM_TYPE_PROP: NTFS, FAT32...
const LONG MAX_FS_FORMAT_SUPPORT_NAME_SIZE = 32; // size of file system type as used in VDS_FILE_SYSTEM_FORMAT_SUPPORT_PROP: NTFS, FAT32...
const LONG MAX_FS_ALLOWED_CLUSTER_SIZES_SIZE = 32;
//
// Service Flags
//
typedef enum _VDS_SERVICE_FLAG
{
VDS_SVF_SUPPORT_DYNAMIC = 0x00000001, // Dynamic is not supported on all SKUs. Laptops did not support dynamic until Vista.
VDS_SVF_SUPPORT_FAULT_TOLERANT = 0x00000002, // SKU supports both mirrors and RAID5 (server SKUs).
VDS_SVF_SUPPORT_GPT = 0x00000004, // GPT disks are supported.
VDS_SVF_SUPPORT_DYNAMIC_1394 = 0x00000008, // 1394 dynamic disks are supported.
VDS_SVF_CLUSTER_SERVICE_CONFIGURED = 0x00000010, // Server is part of a cluster configuration.
VDS_SVF_AUTO_MOUNT_OFF = 0x00000020, // NoAutoMount is enabled.
VDS_SVF_OS_UNINSTALL_VALID = 0x00000040,
VDS_SVF_EFI = 0x00000080, // Server boots EFI (from GPT disk).
VDS_SVF_SUPPORT_MIRROR = 0x00000100L, // Added for Windows7 - SKU supports mirrors (Windows7 client and server SKUs).
VDS_SVF_SUPPORT_RAID5 = 0x00000200L // Added for Windows7 - SKU supports RAID5 (server SKUs).
} VDS_SERVICE_FLAG;
//
// Service Properties
//
typedef struct _VDS_SERVICE_PROP
{
[string] LPWSTR pwszVersion;
ULONG ulFlags;
} VDS_SERVICE_PROP;
//
// SAN Policy flags
//
typedef enum _VDS_SAN_POLICY
{
VDS_SP_UNKNOWN = 0x0, //
VDS_SP_ONLINE = 0x1, // All newly discovered disks are brought ONLINE and made WRITABLE
VDS_SP_OFFLINE_SHARED = 0x2, // All newly discovered disks not residing on a shared bus are
// brought ONLINE and made WRITABLE.
VDS_SP_OFFLINE = 0x3, // All newly discovered disks remain OFFLINE and READ-ONLY.
} VDS_SAN_POLICY;
//
// Reparse Point Properties
//
typedef struct VDS_REPARSE_POINT_PROP
{
VDS_OBJECT_ID SourceVolumeId;
[string] LPWSTR pwszPath;
} VDS_REPARSE_POINT_PROP, *PVDS_REPARSE_POINT_PROP;
//
// Drive Letter Flags
//
typedef enum _VDS_DRIVE_LETTER_FLAG
{
VDS_DLF_NON_PERSISTENT = 0x1
} VDS_DRIVE_LETTER_FLAG;
//
// Drive Letter Properties
//
typedef struct _VDS_DRIVE_LETTER_PROP
{
WCHAR wcLetter;
VDS_OBJECT_ID volumeId;
ULONG ulFlags; // pending removal
BOOL bUsed;
} VDS_DRIVE_LETTER_PROP, *PVDS_DRIVE_LETTER_PROP;
//
// File System Type Flags
//
typedef enum _VDS_FILE_SYSTEM_FLAG
{
VDS_FSF_SUPPORT_FORMAT = 0x1,
// A UI's drop down list should only have
// those file systems that support format.
VDS_FSF_SUPPORT_QUICK_FORMAT = 0x2,
VDS_FSF_SUPPORT_COMPRESS = 0x4,
VDS_FSF_SUPPORT_SPECIFY_LABEL = 0x8,
VDS_FSF_SUPPORT_MOUNT_POINT = 0x10,
VDS_FSF_SUPPORT_REMOVABLE_MEDIA = 0x20,
VDS_FSF_SUPPORT_EXTEND = 0x40,
VDS_FSF_ALLOCATION_UNIT_512 = 0x10000,
VDS_FSF_ALLOCATION_UNIT_1K = 0x20000,
VDS_FSF_ALLOCATION_UNIT_2K = 0x40000,
VDS_FSF_ALLOCATION_UNIT_4K = 0x80000,
VDS_FSF_ALLOCATION_UNIT_8K = 0x100000,
VDS_FSF_ALLOCATION_UNIT_16K = 0x200000,
VDS_FSF_ALLOCATION_UNIT_32K = 0x400000,
VDS_FSF_ALLOCATION_UNIT_64K = 0x800000,
VDS_FSF_ALLOCATION_UNIT_128K = 0x1000000,
VDS_FSF_ALLOCATION_UNIT_256K = 0x2000000
} VDS_FILE_SYSTEM_FLAG;
//
// File System Type Properties
//
typedef struct _VDS_FILE_SYSTEM_TYPE_PROP
{
VDS_FILE_SYSTEM_TYPE type; // FAT, FAT32, NTFS, ...
WCHAR wszName[MAX_FS_NAME_SIZE];
ULONG ulFlags;
ULONG ulCompressionFlags;
// legal alloc unit sizes valid for compression
ULONG ulMaxLableLength;
[string] LPWSTR pwszIllegalLabelCharSet;
} VDS_FILE_SYSTEM_TYPE_PROP, *PVDS_FILE_SYSTEM_TYPE_PROP;
//
// File System Format Support Flags
//
typedef enum _VDS_FILE_SYSTEM_FORMAT_SUPPORT_FLAG
{
VDS_FSS_DEFAULT = 0x1,
VDS_FSS_PREVIOUS_REVISION = 0x2,
VDS_FSS_RECOMMENDED = 0x4
} VDS_FILE_SYSTEM_FORMAT_SUPPORT_FLAG;
//
// File System Format Support Properties
//
typedef struct _VDS_FILE_SYSTEM_FORMAT_SUPPORT_PROP
{
ULONG ulFlags;
USHORT usRevision;
ULONG ulDefaultUnitAllocationSize;
ULONG rgulAllowedUnitAllocationSizes[MAX_FS_ALLOWED_CLUSTER_SIZES_SIZE];
WCHAR wszName[MAX_FS_FORMAT_SUPPORT_NAME_SIZE];
} VDS_FILE_SYSTEM_FORMAT_SUPPORT_PROP, *PVDS_FILE_SYSTEM_FORMAT_SUPPORT_PROP;
//
// File System Flags
//
typedef enum _VDS_FILE_SYSTEM_PROP_FLAG
{
VDS_FPF_COMPRESSED = 0x1
} VDS_FILE_SYSTEM_PROP_FLAG;
//
// File System Option Flags
//
typedef enum _VDS_FORMAT_OPTION_FLAGS
{
VDS_FSOF_NONE = 0x00000000,
VDS_FSOF_FORCE = 0x00000001,
VDS_FSOF_QUICK = 0x00000002,
VDS_FSOF_COMPRESSION = 0x00000004,
VDS_FSOF_DUPLICATE_METADATA = 0x00000008
} VDS_FORMAT_OPTION_FLAGS;
//
// File System Properties
//
typedef struct _VDS_FILE_SYSTEM_PROP
{
VDS_FILE_SYSTEM_TYPE type;
// It is recommended that GetFileSystemTypeName be used instead of this
// type field so that unknown file systems types can be retrieved too.
VDS_OBJECT_ID volumeId;
ULONG ulFlags;
// When this flag is set/cleared, there is no notification sent.
// This is indeed a flag for the root directory of the volume.
// There is no notification sent on the volume by PnP if it changed.
ULONGLONG ullTotalAllocationUnits;
ULONGLONG ullAvailableAllocationUnits;
ULONG ulAllocationUnitSize;
[string] LPWSTR pwszLabel;
} VDS_FILE_SYSTEM_PROP, *PVDS_FILE_SYSTEM_PROP;
//
// Types for Provider queries
//
typedef enum _VDS_QUERY_PROVIDER_FLAG
{
VDS_QUERY_SOFTWARE_PROVIDERS = 0x1,
VDS_QUERY_HARDWARE_PROVIDERS = 0x2,
VDS_QUERY_VIRTUALDISK_PROVIDERS = 0x4
} VDS_QUERY_PROVIDER_FLAG;
//
// IVdsServiceLoader:
// Implemented by: service loader object
// Implemented where: common layer
// Accessed by: applications
//
[
object,
uuid(e0393303-90d4-4a97-ab71-e9b671ee2729),
pointer_default(unique)
]
interface IVdsServiceLoader : IUnknown
{
[helpstring("method LoadService")]
HRESULT LoadService(
[in,unique,string] LPWSTR pwszMachineName,
[out] IVdsService **ppService
);
}
//
// IVdsService:
// Implemented by: service object
// Implemented where: common layer
// Accessed by: applications
//
[
object,
uuid(0818a8ef-9ba9-40d8-a6f9-e22833cc771e),
pointer_default(unique)
]
interface IVdsService : IUnknown
{
// IsServiceReady:
// This method returns S_OK when it is fully initialized. Otherwise,
// it returns S_FALSE. Before the service initialization completes,
// an application should not call any other method other than
// GetProperties(). If the service failed to initialize, it returns
// VDS_E_INITIALIZATION_FAILED.
[helpstring("method IsServiceReady")]
HRESULT IsServiceReady(
);
// WaitForServiceReady:
// Before the service is ready, call to any method except If this
// method returns S_OK, the service
// successfully initialized; it returns VDS_E_INITIALIZED_FAILED if the
// service failed to initialize successfully.
[helpstring("method WaitForServiceReady")]
HRESULT WaitForServiceReady(
);
// GetProperties:
[helpstring("method GetProperties")]
HRESULT GetProperties(
[out] VDS_SERVICE_PROP *pServiceProp
);
[helpstring("method QueryProviders")]
HRESULT QueryProviders(
[in] DWORD masks,
[out] IEnumVdsObject **ppEnum
);
[helpstring("method QueryMaskedDisks")]
HRESULT QueryMaskedDisks(
[out] IEnumVdsObject **ppEnum
);
[helpstring("method QueryUnallocatedDisks")]
HRESULT QueryUnallocatedDisks(
[out] IEnumVdsObject **ppEnum
);
// GetObject:
// This method provides a way to go from id to object pointer. Object
// type can be provider, pack, volume, disk, storage system, controller.
// Although there seems to be no need for a controller or storage system
// object to have a persistent ID, it is good to have a transient ID
// which lasts a VDS session.
// Notifications will contain object id instead of object pointer.
// An application needs to convert from id to pointer.
[helpstring("method GetObject")]
HRESULT GetObject(
[in] VDS_OBJECT_ID ObjectId,
[in] VDS_OBJECT_TYPE type,
[out] IUnknown **ppObjectUnk
);
[helpstring("method QueryDriveLetters")]
HRESULT QueryDriveLetters(
[in] WCHAR wcFirstLetter,
[in] DWORD count,
[out, size_is(count)]
VDS_DRIVE_LETTER_PROP *pDriveLetterPropArray
);
// It is recommended that IVdsVolumeMF2::QueryFileSystemFormatSupport() be
// called to retrieve the supported file systems for particular volumes
// rather than calling QueryFileSystemTypes(), which may not apply to all
// volumes.
[helpstring("method QueryFileSystemTypes")]
HRESULT QueryFileSystemTypes(
[out, size_is(,*plNumberOfFileSystems)]
VDS_FILE_SYSTEM_TYPE_PROP **ppFileSystemTypeProps,
[out] LONG *plNumberOfFileSystems
);
// Reenumerate
// Discover new disks, removed disks. It returns immediately
// After the request is sent. To rescan disks inside a RAID
// box, use Reinventory on IVdsSubSystem.
[helpstring("method Reenumerate")]
HRESULT Reenumerate(
void
);
// Refresh
// Refresh disk ownership and disk layout.
// NOTE: Sync disk layout to whatever the disk driver has. Does not
// force the driver to read layout from disk.
[helpstring("method Refresh")]
HRESULT Refresh(
void
);
// CleanupObsoleteMountPoints:
// This method scrubs the registry with IOCTL_MOUNTMGR_SCRUB_REGISTRY,
// and remove any mount points pointing to volumes that no longer exist.
//
[helpstring("method CleanupObsoleteMountPoints")]
HRESULT CleanupObsoleteMountPoints(
void
);
// Advise:
// Applications register for notifications with the service object. The
// service receives notifications from software providers and hardware
// providers and forwards notifications to applications.
[helpstring("method Advise")]
HRESULT Advise(
[in] IVdsAdviseSink *pSink,
[out] DWORD *pdwCookie
);
[helpstring("method Unadvise")]
HRESULT Unadvise(
[in] DWORD dwCookie
);
[helpstring("method Reboot")]
HRESULT Reboot(
);
[helpstring("method SetFlags")]
HRESULT SetFlags(
[in] ULONG ulFlags
);
[helpstring("method ClearFlags")]
HRESULT ClearFlags(
[in] ULONG ulFlags
);
}
//
// IVdsServiceUninstallDisk:
// Implemented by: service object
// Implemented where: common layer
// Accessed by: applications
//
[
object,
uuid(B6B22DA8-F903-4be7-B492-C09D875AC9DA),
pointer_default(unique)
]
interface IVdsServiceUninstallDisk : IUnknown
{
[helpstring("method GetDiskIdFromLunInfo")]
HRESULT GetDiskIdFromLunInfo(
[in] VDS_LUN_INFORMATION *pLunInfo,
[out] VDS_OBJECT_ID *pDiskId
);
[helpstring("method UninstallDisks")]
HRESULT UninstallDisks(
[in, size_is(ulCount)]
VDS_OBJECT_ID *pDiskIdArray,
[in] ULONG ulCount,
[in] BOOLEAN bForce,
[out] BOOLEAN *pbReboot,
[out, size_is(ulCount)]
HRESULT *pResults
);
}
//
// IVdsServiceHba:
// This interface is to add the ability to enumerate HBA ports for a class
// implementing the IVdsService interface.
// Implemented by: service object
// Implemented where: common layer
// Accessed by: applications
//
[
object,
uuid(0ac13689-3134-47c6-a17c-4669216801be),
pointer_default(unique)
]
interface IVdsServiceHba : IUnknown
{
[helpstring("method QueryHbaPorts")]
HRESULT QueryHbaPorts(
[out] IEnumVdsObject **ppEnum
);
}
//
// IVdsServiceIscsi:
// This interface is to add the ability to interface with the local iSCSI
// initiator service for a class implementing the IVdsService interface.
// Implemented by: service object
// Implemented where: common layer
// Accessed by: applications
//
[
object,
uuid(14fbe036-3ed7-4e10-90e9-a5ff991aff01),
pointer_default(unique)
]
interface IVdsServiceIscsi : IUnknown
{
[helpstring("method GetInitiatorName")]
HRESULT GetInitiatorName(
[out, string] LPWSTR *ppwszIscsiName
);
[helpstring("method QueryInitiatorAdapters")]
HRESULT QueryInitiatorAdapters(
[out] IEnumVdsObject **ppEnum
);
[helpstring("method SetIpsecGroupPresharedKey")]
HRESULT SetIpsecGroupPresharedKey(
[in,unique] VDS_ISCSI_IPSEC_KEY *pIpsecKey
);
[helpstring("method SetAllIpsecTunnelAddresses")]
HRESULT SetAllIpsecTunnelAddresses(
[in] VDS_IPADDRESS *pTunnelAddress,
[in] VDS_IPADDRESS *pDestinationAddress
);
[helpstring("method SetAllIpsecSecurity")]
HRESULT SetAllIpsecSecurity(
[in] VDS_OBJECT_ID targetPortalId,
[in] ULONGLONG ullSecurityFlags,
[in,unique] VDS_ISCSI_IPSEC_KEY *pIpsecKey
);
[helpstring("method SetInitiatorSharedSecret")]
HRESULT SetInitiatorSharedSecret(
[in,unique] VDS_ISCSI_SHARED_SECRET *pInitiatorSharedSecret,
[in] VDS_OBJECT_ID targetId
);
[helpstring("method RememberTargetSharedSecret")]
HRESULT RememberTargetSharedSecret(
[in] VDS_OBJECT_ID targetId,
[in,unique] VDS_ISCSI_SHARED_SECRET *pTargetSharedSecret
);
}
//
// IVdsServiceInitialization:
// This interface is used by service loader object to start initialization
// of a service object. It is not to be used by any application.
[
object,
uuid(4afc3636-db01-4052-80c3-03bbcb8d3c69),
pointer_default(unique)
]
interface IVdsServiceInitialization : IUnknown
{
// Initialize:
// If the name passed in is NULL, the service should launch regular
// providers; otherwise, it launches downrev providers and ask them
// to connect to a remote downrev machine.
[helpstring("method Initialize")]
HRESULT Initialize(
[in,unique,string] LPWSTR pwszMachineName
);
}
//
// IVdsHbaPort:
// Implemented by: hbaport object
// Implemented where: common layer
// Accessed by: applications
//
[
object,
uuid(2abd757f-2851-4997-9a13-47d2a885d6ca),
pointer_default(unique)
]
interface IVdsHbaPort : IUnknown
{
[helpstring("method GetProperties")]
HRESULT GetProperties(
[out] VDS_HBAPORT_PROP *pHbaPortProp
);
[helpstring("method SetAllPathStatuses")]
HRESULT SetAllPathStatuses(
[in] VDS_PATH_STATUS status
);
}
//
// IVdsIscsiInitiatorAdapter:
// Implemented by: iSCSI initiator adapter object
// Implemented where: common layer
// Accessed by: applications
//
[
object,
uuid(b07fedd4-1682-4440-9189-a39b55194dc5),
pointer_default(unique)
]
interface IVdsIscsiInitiatorAdapter : IUnknown
{
[helpstring("method GetProperties")]
HRESULT GetProperties(
[out] VDS_ISCSI_INITIATOR_ADAPTER_PROP *pInitiatorAdapterProp
);
[helpstring("method QueryInitiatorPortals")]
HRESULT QueryInitiatorPortals(
[out] IEnumVdsObject **ppEnum
);
[helpstring("method LoginToTarget")]
HRESULT LoginToTarget(
[in] VDS_ISCSI_LOGIN_TYPE loginType,
[in] VDS_OBJECT_ID targetId,
[in] VDS_OBJECT_ID targetPortalId,
[in] VDS_OBJECT_ID initiatorPortalId,
[in] ULONG ulLoginFlags,
[in] BOOL bHeaderDigest,
[in] BOOL bDataDigest,
[in] VDS_ISCSI_AUTH_TYPE authType,
[out] IVdsAsync **ppAsync
);
[helpstring("method LogoutFromTarget")]
HRESULT LogoutFromTarget(
[in] VDS_OBJECT_ID targetId,
[out] IVdsAsync **ppAsync
);
}
//
// IVdsIscsiInitiatorPortal:
// Implemented by: iSCSI initiator portal object
// Implemented where: common layer
// Accessed by: applications
//
[
object,
uuid(38a0a9ab-7cc8-4693-ac07-1f28bd03c3da),
pointer_default(unique)
]
interface IVdsIscsiInitiatorPortal : IUnknown
{
[helpstring("method GetProperties")]
HRESULT GetProperties(
[out] VDS_ISCSI_INITIATOR_PORTAL_PROP *pInitiatorPortalProp
);
[helpstring("method GetInitiatorAdapter")]
HRESULT GetInitiatorAdapter(
[out] IVdsIscsiInitiatorAdapter **ppInitiatorAdapter
);
[helpstring("method SetIpsecTunnelAddress")]
HRESULT SetIpsecTunnelAddress(
[in] VDS_IPADDRESS *pTunnelAddress,
[in] VDS_IPADDRESS *pDestinationAddress
);
[helpstring("method GetIpsecSecurity")]
HRESULT GetIpsecSecurity(
[in] VDS_OBJECT_ID targetPortalId,
[out] ULONGLONG *pullSecurityFlags
);
[helpstring("method SetIpsecSecurity")]
HRESULT SetIpsecSecurity(
[in] VDS_OBJECT_ID targetPortalId,
[in] ULONGLONG ullSecurityFlags,
[in,unique] VDS_ISCSI_IPSEC_KEY *pIpsecKey
);
}
// IVdsDiskPartitionMF:
// The common layer adds this interface for each disk object. It provides
// additional partition file system management functions.
// Implemented by: disk object
// Implemented where: common layer
// Accessed by: applications
[
object,
uuid(538684e0-ba3d-4bc0-aca9-164aff85c2a9),
pointer_default(unique)
]
interface IVdsDiskPartitionMF : IUnknown
{
// GetPartitionFileSystemLabel:
// Retrieve information for the file system on the partition.
[helpstring("method GetPartitionFileSystemProperties")]
HRESULT GetPartitionFileSystemProperties(
[in] ULONGLONG ullOffset,
[out] VDS_FILE_SYSTEM_PROP *pFileSystemProp
);
// GetPartitionFileSystemTypeName:
// Retrieve the name of the file system type returned by the partition
// file system attibutes.
[helpstring("method GetPartitionFileSystemTypeName")]
HRESULT GetPartitionFileSystemTypeName(
[in] ULONGLONG ullOffset,
[out, string] LPWSTR *ppwszFileSystemTypeName
);
// QueryPartitionFileSystemFormatSupport:
// Retrieve the file systems that are supported for formatting the
// partition.
[helpstring("method QueryPartitionFileSystemFormatSupport")]
HRESULT QueryPartitionFileSystemFormatSupport(
[in] ULONGLONG ullOffset,
[out, size_is(,*plNumberOfFileSystems)]
VDS_FILE_SYSTEM_FORMAT_SUPPORT_PROP **ppFileSystemSupportProps,
[out] LONG *plNumberOfFileSystems
);
// FormatPartitionEx:
// Format the partition using the desired settings. Defaults are used
// for file system type and allocation unit size if NULL and 0 are used,
// respectively.
[helpstring("method FormatPartitionEx")]
HRESULT FormatPartitionEx(
[in] ULONGLONG ullOffset,
[in, unique, string] LPWSTR pwszFileSystemTypeName,
[in] USHORT usFileSystemRevision,
[in] ULONG ulDesiredUnitAllocationSize,
[in, unique, string] LPWSTR pwszLabel,
[in] BOOL bForce,
[in] BOOL bQuickFormat,
[in] BOOL bEnableCompression,
[out] IVdsAsync **ppAsync
);
}
// IVdsVolumeMF:
// The common layer adds this interface for each volume object. It provides
// access path and file system management functions.
// Implemented by: volume object
// Implemented where: common layer
// Accessed by: applications
[
object,
uuid(ee2d5ded-6236-4169-931d-b9778ce03dc6),
pointer_default(unique)
]
interface IVdsVolumeMF : IUnknown
{
// GetFileSystemProperties:
// Retrieve information for the file system on the volume.
[helpstring("method queryFileSystemProperties")]
HRESULT GetFileSystemProperties(
[out] VDS_FILE_SYSTEM_PROP *pFileSystemProp
);
[helpstring("method Format")]
HRESULT Format(
[in] VDS_FILE_SYSTEM_TYPE type,
[in, string] LPWSTR pwszLabel,
[in] DWORD dwUnitAllocationSize,
[in] BOOL bForce,
[in] BOOL bQuickFormat,
[in] BOOL bEnableCompression,
[out] IVdsAsync **ppAsync
);
// AddAccessPath:
// Add both drive letter and mount paths. Drive letter must be in the
// form of "D:\", "C:\". Trailing backslash is required.
[helpstring("method AddAccessPath")]
HRESULT AddAccessPath(
[in, max_is(MAX_PATH-1), string] LPWSTR pwszPath
);
// QueryAccessPaths:
// Retrieves all access paths, including drive letter. The drive letter
// is returned as the first access path in pwszPathArray.
[helpstring("method QueryAccessPaths")]
HRESULT QueryAccessPaths(
[out, string, size_is(,*plNumberOfAccessPaths)]
LPWSTR **pwszPathArray,
[out] LONG *plNumberOfAccessPaths
);
// QueryReparsePoints:
// Retrieves reparse points to a volume. Each reparse point is
// represented as a tuple of source volume id and path on the volume.
// Unlike QueryAccessPaths(), this method does not return redundant
// access paths.
[helpstring("method QueryReparsePoints")]
HRESULT QueryReparsePoints(
[out, size_is(,*plNumberOfReparsePointProps)]
VDS_REPARSE_POINT_PROP **ppReparsePointProps,
[out] LONG *plNumberOfReparsePointProps
);
[helpstring("method DeleteAccessPath")]
HRESULT DeleteAccessPath(
[in, max_is(MAX_PATH-1), string] LPWSTR pwszPath,
[in] BOOL bForce
);
[helpstring("method Mount")]
HRESULT Mount(
void
);
[helpstring("method Dismount")]
HRESULT Dismount(
[in] BOOL bForce,
[in] BOOL bPermanent
);
// SetFlags:
// Only VDS_FPF_COMPRESSED can be set.
[helpstring("method SetFileSystemFlags")]
HRESULT SetFileSystemFlags(
[in] ULONG ulFlags
);
// ClearFlags:
// Only VDS_FPF_COMPRESSED can be cleared.
[helpstring("method ClearFileSystemFlags")]
HRESULT ClearFileSystemFlags(
[in] ULONG ulFlags
);
}
// IVdsVolumeMF2:
// The common layer adds this interface for each volume object. It provides
// additional file system management functions.
// Implemented by: volume object
// Implemented where: common layer
// Accessed by: applications
[
object,
uuid(4dbcee9a-6343-4651-b85f-5e75d74d983c),
pointer_default(unique)
]
interface IVdsVolumeMF2 : IUnknown
{
// GetFileSystemTypeName:
// Retrieve the name of the file system type returned by the volume file
// system attibutes.
[helpstring("method GetFileSystemTypeName")]
HRESULT GetFileSystemTypeName(
[out, string] LPWSTR *ppwszFileSystemTypeName
);
// QueryFileSystemFormatSupport:
// Retrieve the file systems that are supported for formatting the
// volume.
[helpstring("method QueryFileSystemFormatSupport")]
HRESULT QueryFileSystemFormatSupport(
[out, size_is(,*plNumberOfFileSystems)]
VDS_FILE_SYSTEM_FORMAT_SUPPORT_PROP **ppFileSystemSupportProps,
[out] LONG *plNumberOfFileSystems
);
// FormatEx:
// Format the volume using the desired settings. Defaults are used for
// file system type and allocation unit size if NULL and 0 are used,
// respectively.
[helpstring("method FormatEx")]
HRESULT FormatEx(
[in, unique, string] LPWSTR pwszFileSystemTypeName,
[in] USHORT usFileSystemRevision,
[in] ULONG ulDesiredUnitAllocationSize,
[in, unique, string] LPWSTR pwszLabel,
[in] BOOL bForce,
[in] BOOL bQuickFormat,
[in] BOOL bEnableCompression,
[out] IVdsAsync **ppAsync
);
}
// IVdsVolumeShrink:
// The common layer adds this interface for each volume object. It provides
// volume shrink functionality.
// Implemented by: volume object
// Implemented where: common layer
// Accessed by: applications
[
object,
uuid(d68168c9-82a2-4f85-b6e9-74707c49a58f),
pointer_default(unique)
]
interface IVdsVolumeShrink : IUnknown
{
//
// QueryMaxReclaimableBytes
// This method will return the maximum number of bytes which can be
// salvaged from the current volume.
//
[helpstring("method QueryMaxReclaimableBytes")]
HRESULT QueryMaxReclaimableBytes(
[out] ULONGLONG *pullMaxNumberOfReclaimableBytes
);
// Shrink:
// This method shrinks the volume and all plexes and return the
// released extents.
//
// The file system will be shrunk first. In order to shrink a volume,
// the file system must support shrink.
//
[helpstring("method Shrink")]
HRESULT Shrink(
[in] ULONGLONG ullDesiredNumberOfReclaimableBytes,
[in] ULONGLONG ullMinNumberOfReclaimableBytes,
[out] IVdsAsync **ppAsync
);
}
//
// IVdsSubSystemImportTarget:
//
// Implemented by: subsystem object
// Implemented where: common layer
// Accessed by: applications
//
[
object,
uuid(83bfb87f-43fb-4903-baa6-127f01029eec),
pointer_default(unique)
]
interface IVdsSubSystemImportTarget : IUnknown
{
[helpstring("method GetImportTarget")]
HRESULT GetImportTarget(
[out,string] LPWSTR *ppwszIscsiName
);
[helpstring("method SetImportTarget")]
HRESULT SetImportTarget(
[in,unique,string] LPWSTR pwszIscsiName
);
}
//
// IVdsIscsiPortalLocal:
//
// Implemented by: iSCSI target portal object
// Implemented where: common layer
// Accessed by: applications
[
object,
uuid(ad837c28-52c1-421d-bf04-fae7da665396),
pointer_default(unique)
]
interface IVdsIscsiPortalLocal : IUnknown
{
[helpstring("method SetIpsecSecurityLocal")]
HRESULT SetIpsecSecurityLocal(
[in] ULONGLONG ullSecurityFlags,
[in,unique] VDS_ISCSI_IPSEC_KEY *pIpsecKey
);
}
//
// IVdsServiceSAN:
//
// Provides disk online/offline management functions.
// Implemented by: Service object
// Implemented where: common layer
// Accessed by: applications
[
object,
uuid(FC5D23E8-A88B-41a5-8DE0-2D2F73C5A630),
pointer_default(unique)
]
interface IVdsServiceSAN : IUnknown
{
[helpstring("method GetSANPolicy")]
HRESULT GetSANPolicy(
[out] VDS_SAN_POLICY *pSanPolicy
);
[helpstring("method SetSANPolicy")]
HRESULT SetSANPolicy(
[in] VDS_SAN_POLICY SanPolicy
);
}
// IVdsVolumeMF3:
// The common layer adds this interface for each volume object. I
// Implemented by: volume object
// Implemented where: common layer
// Accessed by: applications
[
object,
uuid(6788FAF9-214E-4b85-BA59-266953616E09),
pointer_default(unique)
]
interface IVdsVolumeMF3 : IUnknown
{
//
// QueryVolumeGuidPathnames:
// Retrieve the list of volume GUID pathnames.
//
[helpstring("method QueryVolumeGuidPathnames")]
HRESULT QueryVolumeGuidPathnames(
[out, string, size_is(,*pulNumberOfPaths)] LPWSTR **pwszPathArray,
[out] ULONG *pulNumberOfPaths
);
//
// FormatEx2:
// Format the volume using the desired settings. Defaults are used for
// file system type and allocation unit size if NULL and 0 are used,
// respectively. Added a flag for duplicating UDF meta data. Changed flags
// to a bitmap.
//
[helpstring("method FormatEx2")]
HRESULT FormatEx2(
[in, unique, string] LPWSTR pwszFileSystemTypeName,
[in] USHORT usFileSystemRevision,
[in] ULONG ulDesiredUnitAllocationSize,
[in, unique, string] LPWSTR pwszLabel,
[in] DWORD Options,
[out] IVdsAsync **ppAsync
);
//
// OfflineVolume:
// Offline the volume by calling IOCTL_VOLUME_OFFLINE control code.
// If the volume is already offline it does not do anything, simply
// returns S_OK.
[helpstring("method OfflineVolume")]
HRESULT OfflineVolume(
void
);
}
// IVdsDiskPartitionMF2:
// The common layer adds this interface for each disk object. It provides
// additional partition file system management functions.
// Implemented by: disk object
// Implemented where: common layer
// Accessed by: applications
[
object,
uuid(9CBE50CA-F2D2-4bf4-ACE1-96896B729625),
pointer_default(unique)
]
interface IVdsDiskPartitionMF2 : IUnknown
{
//
// FormatPartitionEx2:
// Format the partition using the desired settings. Defaults are used
// for file system type and allocation unit size if NULL and 0 are used,
// respectively. Added a flag for duplicating UDF meta data. Changed flags
// to a bitmap.
//
[helpstring("method FormatPartitionEx2")]
HRESULT FormatPartitionEx2(
[in] ULONGLONG ullOffset,
[in, unique, string] LPWSTR pwszFileSystemTypeName,
[in] USHORT usFileSystemRevision,
[in] ULONG ulDesiredUnitAllocationSize,
[in, unique, string] LPWSTR pwszLabel,
[in] DWORD Options,
[out] IVdsAsync **ppAsync
);
}