mirror of https://github.com/UMSKT/xpmgr.git
1091 lines
33 KiB
Plaintext
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
|
|
);
|
|
|
|
}
|
|
|