mirror of https://github.com/UMSKT/xpmgr.git
1308 lines
33 KiB
Plaintext
1308 lines
33 KiB
Plaintext
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 2000
|
|
//
|
|
// File: vdscmmn.idl
|
|
//
|
|
// Abstract:
|
|
// declarations of interfaces and types common to the common layer,
|
|
// software providers, and hardware providers.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
import "vdserr.h";
|
|
|
|
interface IEnumVdsObject;
|
|
interface IVdsAsync;
|
|
interface IVdsAdviseSink;
|
|
interface IVdsProvider;
|
|
interface IVdsProviderSupport;
|
|
|
|
//
|
|
// All possible object status
|
|
//
|
|
#define STATUS_UNKNOWN 0
|
|
#define STATUS_ONLINE 1
|
|
#define STATUS_NOT_READY 2
|
|
#define STATUS_NO_MEDIA 3
|
|
#define STATUS_OFFLINE 4
|
|
#define STATUS_FAILED 5
|
|
#define STATUS_MISSING 6
|
|
#define STATUS_STANDBY 7
|
|
#define STATUS_REMOVED 8
|
|
#define STATUS_PARTIALLY_MANAGED 9
|
|
|
|
//
|
|
// Object IDs
|
|
//
|
|
typedef GUID VDS_OBJECT_ID;
|
|
|
|
//
|
|
// Object types
|
|
//
|
|
typedef enum _VDS_OBJECT_TYPE
|
|
{
|
|
// values >=0 and <10 are exposed to the service, client, and provider.
|
|
// values >=10 and <30 are reserved for software providers.
|
|
// values >=30 and <60 are reserved for hardware providers.
|
|
// values >=90 are reserved by the VDS service and not exposed to providers.
|
|
// values >=100 are used internally by the VDS service and not exposed to
|
|
// clients and providers.
|
|
// values >=200 are reserved for virtual disk storage providers.
|
|
|
|
VDS_OT_UNKNOWN = 0,
|
|
VDS_OT_PROVIDER = 1,
|
|
|
|
VDS_OT_PACK = 10,
|
|
VDS_OT_VOLUME = 11,
|
|
VDS_OT_VOLUME_PLEX = 12,
|
|
VDS_OT_DISK = 13,
|
|
|
|
VDS_OT_SUB_SYSTEM = 30,
|
|
VDS_OT_CONTROLLER = 31,
|
|
VDS_OT_DRIVE = 32,
|
|
VDS_OT_LUN = 33,
|
|
VDS_OT_LUN_PLEX = 34,
|
|
VDS_OT_PORT = 35,
|
|
VDS_OT_PORTAL = 36,
|
|
VDS_OT_TARGET = 37,
|
|
VDS_OT_PORTAL_GROUP = 38,
|
|
VDS_OT_STORAGE_POOL = 39,
|
|
|
|
VDS_OT_HBAPORT = 90,
|
|
VDS_OT_INIT_ADAPTER = 91,
|
|
VDS_OT_INIT_PORTAL = 92,
|
|
|
|
VDS_OT_ASYNC = 100,
|
|
VDS_OT_ENUM = 101,
|
|
|
|
VDS_OT_VDISK = 200,
|
|
VDS_OT_OPEN_VDISK = 201,
|
|
} VDS_OBJECT_TYPE;
|
|
// Partitions and extents are not COM objects.
|
|
|
|
//
|
|
// Provider Types
|
|
//
|
|
typedef enum _VDS_PROVIDER_TYPE
|
|
{
|
|
VDS_PT_UNKNOWN = 0,
|
|
VDS_PT_SOFTWARE = 1,
|
|
VDS_PT_HARDWARE = 2,
|
|
VDS_PT_VIRTUALDISK = 3,
|
|
VDS_PT_MAX = 4
|
|
} VDS_PROVIDER_TYPE;
|
|
|
|
//
|
|
// Provider Flags
|
|
//
|
|
typedef enum _VDS_PROVIDER_FLAG
|
|
{
|
|
//
|
|
// This flag is set by dynamic providers. Applications can tell from
|
|
// this flag if a disk is dynamic or not.
|
|
//
|
|
|
|
VDS_PF_DYNAMIC = 0x00000001,
|
|
|
|
//
|
|
// The hardware provider manages an in-box hardware controller,
|
|
// instead of a external RAID cabinet.
|
|
//
|
|
|
|
VDS_PF_INTERNAL_HARDWARE_PROVIDER = 0x00000002,
|
|
|
|
//
|
|
// This flag is for basic provider which does not really have the
|
|
// concept of pack. We fake a pack for each basic disk. The pack
|
|
// contains only one disk.
|
|
//
|
|
|
|
VDS_PF_ONE_DISK_ONLY_PER_PACK = 0x00000004,
|
|
|
|
//
|
|
// This flag is for downrev provider. On a downrev machine, multiple
|
|
// disk groups(pack) are not supported. Only one pack can be online
|
|
// at a time.
|
|
//
|
|
|
|
VDS_PF_ONE_PACK_ONLINE_ONLY = 0x00000008,
|
|
|
|
//
|
|
// All volumes managed by this provider must have contiguous space.
|
|
// This flag currently applies to basic provider only. We may remove
|
|
// it if we think it's enough to have VDS_PF_DYNAMIC flag.
|
|
//
|
|
|
|
VDS_PF_VOLUME_SPACE_MUST_BE_CONTIGUOUS = 0x00000010,
|
|
|
|
//
|
|
// These three are internal flags that will be translated to
|
|
// VDS_SVF_SUPPORT_DYNAMIC, VDS_SVF_SUPPORT_FAULT_TOLERANT
|
|
// VDS_SVF_SUPPORT_DYNAMIC_1394 by the service.
|
|
//
|
|
|
|
VDS_PF_SUPPORT_DYNAMIC = 0x80000000,
|
|
VDS_PF_SUPPORT_FAULT_TOLERANT = 0x40000000, // Indicates that both mirrors and RAID5 are supported.
|
|
VDS_PF_SUPPORT_DYNAMIC_1394 = 0x20000000,
|
|
|
|
|
|
//
|
|
// Added for Windows 7. Client SKUs support mirrors but not RAID5.
|
|
// No change to server SKUs, both mirrors and RAID5 are supported.
|
|
//
|
|
|
|
VDS_PF_SUPPORT_MIRROR = 0x00000020,
|
|
VDS_PF_SUPPORT_RAID5 = 0x00000040
|
|
|
|
} VDS_PROVIDER_FLAG;
|
|
|
|
//
|
|
// Recover Actions
|
|
//
|
|
typedef enum _VDS_RECOVER_ACTION
|
|
{
|
|
VDS_RA_UNKNOWN = 0,
|
|
VDS_RA_REFRESH = 1,
|
|
VDS_RA_RESTART = 2
|
|
|
|
} VDS_RECOVER_ACTION;
|
|
|
|
//
|
|
// Notification Target Types
|
|
//
|
|
typedef enum _VDS_NOTIFICATION_TARGET_TYPE
|
|
{
|
|
VDS_NTT_UNKNOWN = 0,
|
|
|
|
VDS_NTT_PACK = VDS_OT_PACK,
|
|
VDS_NTT_VOLUME = VDS_OT_VOLUME,
|
|
VDS_NTT_DISK = VDS_OT_DISK,
|
|
VDS_NTT_PARTITION = 60,
|
|
|
|
VDS_NTT_DRIVE_LETTER = 61,
|
|
VDS_NTT_FILE_SYSTEM = 62,
|
|
VDS_NTT_MOUNT_POINT = 63,
|
|
|
|
VDS_NTT_SUB_SYSTEM = VDS_OT_SUB_SYSTEM,
|
|
VDS_NTT_CONTROLLER = VDS_OT_CONTROLLER,
|
|
VDS_NTT_DRIVE = VDS_OT_DRIVE,
|
|
VDS_NTT_LUN = VDS_OT_LUN,
|
|
VDS_NTT_PORT = VDS_OT_PORT,
|
|
VDS_NTT_PORTAL = VDS_OT_PORTAL,
|
|
VDS_NTT_TARGET = VDS_OT_TARGET,
|
|
VDS_NTT_PORTAL_GROUP = VDS_OT_PORTAL_GROUP,
|
|
|
|
VDS_NTT_SERVICE = 200
|
|
|
|
} VDS_NOTIFICATION_TARGET_TYPE;
|
|
|
|
//
|
|
// Event types
|
|
// software providers notifications range from 1 to 100.
|
|
// hardware provider notifications range from 101 to 200.
|
|
// service notifications range from 201 to 300.
|
|
// common notifications range from 301 to 400.
|
|
//
|
|
|
|
//
|
|
// pack notifications
|
|
//
|
|
const ULONG VDS_NF_PACK_ARRIVE = 1;
|
|
// When a pack is created
|
|
const ULONG VDS_NF_PACK_DEPART = 2;
|
|
// When a pack is deleted
|
|
const ULONG VDS_NF_PACK_MODIFY = 3;
|
|
// When a pack is modified(including online, offline)
|
|
|
|
//
|
|
// volume notifications
|
|
//
|
|
const ULONG VDS_NF_VOLUME_ARRIVE = 4;
|
|
// When a volume is created or discovered.
|
|
const ULONG VDS_NF_VOLUME_DEPART = 5;
|
|
// When a volume is deleted or disappears.
|
|
const ULONG VDS_NF_VOLUME_MODIFY = 6;
|
|
// When something changed in the volume's VDS_VOLUME_PROP structure.
|
|
const ULONG VDS_NF_VOLUME_REBUILDING_PROGRESS = 7;
|
|
// When a volume is in rebuilding process.
|
|
|
|
|
|
//
|
|
// disk notifications
|
|
//
|
|
const ULONG VDS_NF_DISK_ARRIVE = 8;
|
|
// When a spindle is plugged in, or a RAID controller surfaced a LUN
|
|
// that is local to the host.
|
|
const ULONG VDS_NF_DISK_DEPART = 9;
|
|
// When a spindle is unplugged, or a RAID controller unbound a LUN
|
|
// that was local to the host.
|
|
const ULONG VDS_NF_DISK_MODIFY = 10;
|
|
// When something changed in the disk's VDS_DISK_PROP structure.
|
|
|
|
//
|
|
// partition notifications
|
|
//
|
|
const ULONG VDS_NF_PARTITION_ARRIVE = 11;
|
|
// When a partition is created. If the partition is also a volume,
|
|
// a volume arrival notification will also be sent.
|
|
const ULONG VDS_NF_PARTITION_DEPART = 12;
|
|
// When a partition is deleted. If the partition is also a volume,
|
|
// a volume removal notification will also be sent.
|
|
const ULONG VDS_NF_PARTITION_MODIFY = 13;
|
|
// When a partition is changed. If the partition is also a volume,
|
|
// and if the partition attributes change, a volume change notification
|
|
// will also be sent.
|
|
|
|
//
|
|
// subsystem notifications
|
|
//
|
|
|
|
const ULONG VDS_NF_SUB_SYSTEM_ARRIVE = 101;
|
|
// When a new subsystem is discovered.
|
|
const ULONG VDS_NF_SUB_SYSTEM_DEPART = 102;
|
|
// When a subsystem is disconnected.
|
|
// NOTE: more subystem notifications continue below starting at 151
|
|
|
|
//
|
|
// controller notifications
|
|
//
|
|
const ULONG VDS_NF_CONTROLLER_ARRIVE = 103; // ONLINE
|
|
// When a controller goes online.
|
|
const ULONG VDS_NF_CONTROLLER_DEPART = 104; // OFFLINE
|
|
// When a controller goes offline.
|
|
|
|
//
|
|
// drive notifications
|
|
//
|
|
const ULONG VDS_NF_DRIVE_ARRIVE = 105;
|
|
// When a spindle is plugged in behind a RAID controller.
|
|
const ULONG VDS_NF_DRIVE_DEPART = 106;
|
|
// When a spindle is unplugged behind a RAID controller.
|
|
const ULONG VDS_NF_DRIVE_MODIFY = 107;
|
|
// When something changed in the spindle's VDS_DRIVE_PROP structure.
|
|
|
|
//
|
|
// LUN notifications
|
|
// The three LUN notifications will be sent only when the LUN is not
|
|
// local to the machine. Otherwise, disk notifications will be sent.
|
|
//
|
|
const ULONG VDS_NF_LUN_ARRIVE = 108;
|
|
// When a LUN is created.
|
|
const ULONG VDS_NF_LUN_DEPART = 109;
|
|
// When a LUN is deleted.
|
|
const ULONG VDS_NF_LUN_MODIFY = 110;
|
|
// When something changed in the LUN's VDS_LUN_PROP structure.
|
|
// TODO: add VDS_NF_LUN_REBUILDING_PROGRESS?
|
|
|
|
//
|
|
// controller port notifications
|
|
//
|
|
const ULONG VDS_NF_PORT_ARRIVE = 121; // ONLINE
|
|
// When a controller port goes online.
|
|
const ULONG VDS_NF_PORT_DEPART = 122; // OFFLINE
|
|
// When a controller port goes offline.
|
|
|
|
//
|
|
// portal notifications
|
|
//
|
|
const ULONG VDS_NF_PORTAL_ARRIVE = 123;
|
|
// When an iSCSI portal is created.
|
|
const ULONG VDS_NF_PORTAL_DEPART = 124;
|
|
// When an iSCSI portal is removed.
|
|
const ULONG VDS_NF_PORTAL_MODIFY = 125;
|
|
// When something changed in the iSCSI portal's VDS_ISCSI_PORTAL_PROP structure.
|
|
|
|
//
|
|
// target notifications
|
|
//
|
|
const ULONG VDS_NF_TARGET_ARRIVE = 126;
|
|
// When an iSCSI target is created.
|
|
const ULONG VDS_NF_TARGET_DEPART = 127;
|
|
// When an iSCSI target is deleted.
|
|
const ULONG VDS_NF_TARGET_MODIFY = 128;
|
|
// When something changed in the iSCSI portal's VDS_ISCSI_TARGET_PROP structure.
|
|
|
|
//
|
|
// portal group notifications
|
|
//
|
|
const ULONG VDS_NF_PORTAL_GROUP_ARRIVE = 129;
|
|
// When an iSCSI portal group is created.
|
|
const ULONG VDS_NF_PORTAL_GROUP_DEPART = 130;
|
|
// When an iSCSI portal group is deleted.
|
|
const ULONG VDS_NF_PORTAL_GROUP_MODIFY = 131;
|
|
// When something changed in the iSCSI portal group's VDS_ISCSI_PORTALGROUP_PROP structure.
|
|
|
|
//
|
|
// more subsystem notifications
|
|
//
|
|
const ULONG VDS_NF_SUB_SYSTEM_MODIFY = 151;
|
|
// When something changed in the subsystem's VDS_SUB_SYSTEM_PROP structure.
|
|
|
|
//
|
|
// drive letter notifications
|
|
//
|
|
const ULONG VDS_NF_DRIVE_LETTER_FREE = 201;
|
|
// When a drive letter is freed.
|
|
const ULONG VDS_NF_DRIVE_LETTER_ASSIGN = 202;
|
|
// When a drive letter is assigned.
|
|
|
|
//
|
|
// file system notifications
|
|
//
|
|
const ULONG VDS_NF_FILE_SYSTEM_MODIFY = 203;
|
|
// When a volume gets a new label, or file system is extended or shrunk.
|
|
// Note, this does not include change of file system comression flags.
|
|
const ULONG VDS_NF_FILE_SYSTEM_FORMAT_PROGRESS = 204;
|
|
// When a file system is being formated.
|
|
// NOTE: more file system notifications continue below starting at 206
|
|
|
|
//
|
|
// mount point notification
|
|
//
|
|
const ULONG VDS_NF_MOUNT_POINTS_CHANGE = 205;
|
|
|
|
//
|
|
// more file system notifications
|
|
//
|
|
const ULONG VDS_NF_FILE_SYSTEM_SHRINKING_PROGRESS = 206;
|
|
// When a file system is in the process of shrinking
|
|
|
|
//
|
|
// common notifications
|
|
//
|
|
const ULONG VDS_NF_SERVICE_OUT_OF_SYNC = 301;
|
|
|
|
//
|
|
// Windows 7 notifications
|
|
//
|
|
|
|
//
|
|
// controller notifications
|
|
//
|
|
const ULONG VDS_NF_CONTROLLER_MODIFY = 350;
|
|
// When something changed in controller's properties.
|
|
const ULONG VDS_NF_CONTROLLER_REMOVED = 351;
|
|
// When a controller is removed.
|
|
|
|
//
|
|
// controller port notifications
|
|
//
|
|
const ULONG VDS_NF_PORT_MODIFY = 352;
|
|
// When something changed in controller port's properties.
|
|
const ULONG VDS_NF_PORT_REMOVED = 353;
|
|
// When a controller port is removed.
|
|
|
|
|
|
//
|
|
// drive notifications
|
|
//
|
|
const ULONG VDS_NF_DRIVE_REMOVED = 354;
|
|
// When a drive is removed.
|
|
|
|
//
|
|
// Notification Structs
|
|
//
|
|
|
|
typedef struct _VDS_PACK_NOTIFICATION
|
|
{
|
|
ULONG ulEvent;
|
|
VDS_OBJECT_ID packId;
|
|
|
|
} VDS_PACK_NOTIFICATION;
|
|
|
|
typedef struct _VDS_DISK_NOTIFICATION
|
|
{
|
|
ULONG ulEvent; // arrival, departure, modified.
|
|
VDS_OBJECT_ID diskId;
|
|
|
|
} VDS_DISK_NOTIFICATION;
|
|
|
|
typedef struct _VDS_VOLUME_NOTIFICATION
|
|
{
|
|
ULONG ulEvent;
|
|
// created, deleted, modified, resyncing progress
|
|
VDS_OBJECT_ID volumeId;
|
|
VDS_OBJECT_ID plexId;
|
|
// This is for resyncing and rebuilding only.
|
|
// resyncing can happen on more than one plex at
|
|
// different pace.
|
|
ULONG ulPercentCompleted;
|
|
|
|
} VDS_VOLUME_NOTIFICATION;
|
|
|
|
typedef struct _VDS_PARTITION_NOTIFICATION
|
|
{
|
|
ULONG ulEvent;
|
|
// created, deleted, modified, resyncing progress
|
|
VDS_OBJECT_ID diskId;
|
|
ULONGLONG ullOffset;
|
|
|
|
} VDS_PARTITION_NOTIFICATION;
|
|
|
|
typedef struct _VDS_SERVICE_NOTIFICATION
|
|
{
|
|
ULONG ulEvent;
|
|
VDS_RECOVER_ACTION action;
|
|
|
|
} VDS_SERVICE_NOTIFICATION;
|
|
|
|
typedef struct _VDS_DRIVE_LETTER_NOTIFICATION
|
|
{
|
|
ULONG ulEvent; // freed, used
|
|
WCHAR wcLetter;
|
|
VDS_OBJECT_ID volumeId;
|
|
|
|
} VDS_DRIVE_LETTER_NOTIFICATION;
|
|
|
|
typedef struct _VDS_FILE_SYSTEM_NOTIFICATION
|
|
{
|
|
ULONG ulEvent; // created, format progress
|
|
VDS_OBJECT_ID volumeId;
|
|
DWORD dwPercentCompleted;
|
|
|
|
} VDS_FILE_SYSTEM_NOTIFICATION;
|
|
|
|
typedef struct _VDS_MOUNT_POINT_NOTIFICATION
|
|
{
|
|
ULONG ulEvent; // mount points changed
|
|
VDS_OBJECT_ID volumeId;
|
|
|
|
} VDS_MOUNT_POINT_NOTIFICATION;
|
|
|
|
typedef struct _VDS_SUB_SYSTEM_NOTIFICATION
|
|
{
|
|
ULONG ulEvent;
|
|
VDS_OBJECT_ID subSystemId;
|
|
|
|
} VDS_SUB_SYSTEM_NOTIFICATION;
|
|
|
|
typedef struct _VDS_CONTROLLER_NOTIFICATION
|
|
{
|
|
ULONG ulEvent;
|
|
VDS_OBJECT_ID controllerId;
|
|
|
|
} VDS_CONTROLLER_NOTIFICATION;
|
|
|
|
typedef struct _VDS_DRIVE_NOTIFICATION
|
|
{
|
|
ULONG ulEvent;
|
|
VDS_OBJECT_ID driveId;
|
|
|
|
} VDS_DRIVE_NOTIFICATION;
|
|
|
|
typedef struct _VDS_LUN_NOTIFICATION
|
|
{
|
|
ULONG ulEvent;
|
|
VDS_OBJECT_ID LunId;
|
|
|
|
} VDS_LUN_NOTIFICATION;
|
|
|
|
typedef struct _VDS_PORT_NOTIFICATION
|
|
{
|
|
ULONG ulEvent;
|
|
VDS_OBJECT_ID portId;
|
|
|
|
} VDS_PORT_NOTIFICATION;
|
|
|
|
typedef struct _VDS_PORTAL_NOTIFICATION
|
|
{
|
|
ULONG ulEvent;
|
|
VDS_OBJECT_ID portalId;
|
|
|
|
} VDS_PORTAL_NOTIFICATION;
|
|
|
|
typedef struct _VDS_TARGET_NOTIFICATION
|
|
{
|
|
ULONG ulEvent;
|
|
VDS_OBJECT_ID targetId;
|
|
|
|
} VDS_TARGET_NOTIFICATION;
|
|
|
|
typedef struct _VDS_PORTAL_GROUP_NOTIFICATION
|
|
{
|
|
ULONG ulEvent;
|
|
VDS_OBJECT_ID portalGroupId;
|
|
|
|
} VDS_PORTAL_GROUP_NOTIFICATION;
|
|
|
|
typedef struct _VDS_NOTIFICATION
|
|
{
|
|
VDS_NOTIFICATION_TARGET_TYPE objectType;
|
|
[switch_is(objectType)] union
|
|
{
|
|
[case(VDS_NTT_PACK)]
|
|
VDS_PACK_NOTIFICATION Pack;
|
|
[case(VDS_NTT_DISK)]
|
|
VDS_DISK_NOTIFICATION Disk;
|
|
[case(VDS_NTT_VOLUME)]
|
|
VDS_VOLUME_NOTIFICATION Volume;
|
|
[case(VDS_NTT_PARTITION)]
|
|
VDS_PARTITION_NOTIFICATION Partition;
|
|
|
|
[case(VDS_NTT_DRIVE_LETTER)]
|
|
VDS_DRIVE_LETTER_NOTIFICATION Letter;
|
|
[case(VDS_NTT_FILE_SYSTEM)]
|
|
VDS_FILE_SYSTEM_NOTIFICATION FileSystem;
|
|
[case(VDS_NTT_MOUNT_POINT)]
|
|
VDS_MOUNT_POINT_NOTIFICATION MountPoint;
|
|
|
|
[case(VDS_NTT_SUB_SYSTEM)]
|
|
VDS_SUB_SYSTEM_NOTIFICATION SubSystem;
|
|
[case(VDS_NTT_CONTROLLER)]
|
|
VDS_CONTROLLER_NOTIFICATION Controller;
|
|
[case(VDS_NTT_DRIVE)]
|
|
VDS_DRIVE_NOTIFICATION Drive;
|
|
[case(VDS_NTT_LUN)]
|
|
VDS_LUN_NOTIFICATION Lun;
|
|
[case(VDS_NTT_PORT)]
|
|
VDS_PORT_NOTIFICATION Port;
|
|
[case(VDS_NTT_PORTAL)]
|
|
VDS_PORTAL_NOTIFICATION Portal;
|
|
[case(VDS_NTT_TARGET)]
|
|
VDS_TARGET_NOTIFICATION Target;
|
|
[case(VDS_NTT_PORTAL_GROUP)]
|
|
VDS_PORTAL_GROUP_NOTIFICATION PortalGroup;
|
|
|
|
[case(VDS_NTT_SERVICE)]
|
|
VDS_SERVICE_NOTIFICATION Service;
|
|
|
|
[default];
|
|
};
|
|
} VDS_NOTIFICATION;
|
|
|
|
//
|
|
// Async Output Type
|
|
//
|
|
typedef enum _VDS_ASYNC_OUTPUT_TYPE
|
|
{
|
|
VDS_ASYNCOUT_UNKNOWN = 0,
|
|
VDS_ASYNCOUT_CREATEVOLUME = 1,
|
|
VDS_ASYNCOUT_EXTENDVOLUME = 2,
|
|
VDS_ASYNCOUT_SHRINKVOLUME = 3,
|
|
VDS_ASYNCOUT_ADDVOLUMEPLEX = 4,
|
|
VDS_ASYNCOUT_BREAKVOLUMEPLEX = 5,
|
|
VDS_ASYNCOUT_REMOVEVOLUMEPLEX = 6,
|
|
VDS_ASYNCOUT_REPAIRVOLUMEPLEX = 7,
|
|
VDS_ASYNCOUT_RECOVERPACK = 8,
|
|
VDS_ASYNCOUT_REPLACEDISK = 9,
|
|
VDS_ASYNCOUT_CREATEPARTITION = 10,
|
|
VDS_ASYNCOUT_CLEAN = 11,
|
|
VDS_ASYNCOUT_CREATELUN = 50,
|
|
// VDS_ASYNCOUT_BREAKLUNPLEX = 51, // ** DEPRECATED **
|
|
VDS_ASYNCOUT_ADDLUNPLEX = 52,
|
|
VDS_ASYNCOUT_REMOVELUNPLEX = 53,
|
|
VDS_ASYNCOUT_EXTENDLUN = 54,
|
|
VDS_ASYNCOUT_SHRINKLUN = 55,
|
|
VDS_ASYNCOUT_RECOVERLUN = 56,
|
|
|
|
// iSCSI related asyncs
|
|
VDS_ASYNCOUT_LOGINTOTARGET = 60,
|
|
VDS_ASYNCOUT_LOGOUTFROMTARGET = 61,
|
|
VDS_ASYNCOUT_CREATETARGET = 62,
|
|
VDS_ASYNCOUT_CREATEPORTALGROUP = 63,
|
|
VDS_ASYNCOUT_DELETETARGET = 64,
|
|
VDS_ASYNCOUT_ADDPORTAL = 65,
|
|
VDS_ASYNCOUT_REMOVEPORTAL = 66,
|
|
VDS_ASYNCOUT_DELETEPORTALGROUP = 67,
|
|
|
|
VDS_ASYNCOUT_FORMAT = 101,
|
|
|
|
//
|
|
// Virtual disk related output.
|
|
//
|
|
VDS_ASYNCOUT_CREATE_VDISK = 200,
|
|
VDS_ASYNCOUT_ATTACH_VDISK = 201,
|
|
VDS_ASYNCOUT_COMPACT_VDISK = 202,
|
|
VDS_ASYNCOUT_MERGE_VDISK = 203,
|
|
VDS_ASYNCOUT_EXPAND_VDISK = 204
|
|
} VDS_ASYNC_OUTPUT_TYPE;
|
|
|
|
typedef struct _VDS_ASYNC_OUTPUT
|
|
{
|
|
VDS_ASYNC_OUTPUT_TYPE type;
|
|
|
|
[switch_is(type)] union
|
|
{
|
|
// CreatePartition() or CreatePartitionEx() return value.
|
|
[case(VDS_ASYNCOUT_CREATEPARTITION)]
|
|
struct _cp
|
|
{
|
|
ULONGLONG ullOffset; // acual offset of the create partition
|
|
VDS_OBJECT_ID volumeId; // ID of the associated volume if the
|
|
// partition is a volume.
|
|
} cp;
|
|
|
|
// CreateVolume() return value
|
|
[case(VDS_ASYNCOUT_CREATEVOLUME)]
|
|
struct _cv
|
|
{
|
|
IUnknown *pVolumeUnk;
|
|
|
|
} cv;
|
|
|
|
// BreakPlex() return value
|
|
[case(VDS_ASYNCOUT_BREAKVOLUMEPLEX)]
|
|
struct _bvp
|
|
{
|
|
IUnknown *pVolumeUnk;
|
|
|
|
} bvp;
|
|
|
|
// Shrink() return value
|
|
[case(VDS_ASYNCOUT_SHRINKVOLUME)]
|
|
struct _sv
|
|
{
|
|
ULONGLONG ullReclaimedBytes; // actual number of reclaimed bytes
|
|
} sv;
|
|
|
|
|
|
[case(VDS_ASYNCOUT_CREATELUN)]
|
|
struct _cl
|
|
{
|
|
IUnknown *pLunUnk;
|
|
|
|
} cl;
|
|
|
|
/** DEPRECATED **
|
|
* [case(VDS_ASYNCOUT_BREAKLUNPLEX)]
|
|
* struct _blp
|
|
* {
|
|
* IUnknown *pLunUnk;
|
|
*
|
|
* } blp;
|
|
*/
|
|
|
|
// CreateTarget() return value
|
|
[case(VDS_ASYNCOUT_CREATETARGET)]
|
|
struct _ct
|
|
{
|
|
IUnknown *pTargetUnk;
|
|
|
|
} ct;
|
|
|
|
// CreatePortalGroup() return value
|
|
[case(VDS_ASYNCOUT_CREATEPORTALGROUP)]
|
|
struct _cpg
|
|
{
|
|
IUnknown *pPortalGroupUnk;
|
|
|
|
} cpg;
|
|
|
|
[case(VDS_ASYNCOUT_CREATE_VDISK)]
|
|
struct _cvd
|
|
{
|
|
IUnknown *pVDiskUnk;
|
|
|
|
} cvd;
|
|
|
|
[default];
|
|
};
|
|
|
|
} VDS_ASYNC_OUTPUT;
|
|
|
|
|
|
//
|
|
// iSCSI Portal Group Tags
|
|
//
|
|
typedef USHORT VDS_ISCSI_PORTALGROUP_TAG;
|
|
|
|
|
|
//
|
|
// IP address type
|
|
//
|
|
typedef enum VDS_IPADDRESS_TYPE
|
|
{
|
|
VDS_IPT_TEXT = 0,
|
|
VDS_IPT_IPV4 = 1,
|
|
VDS_IPT_IPV6 = 2,
|
|
VDS_IPT_EMPTY = 3
|
|
} VDS_IPADDRESS_TYPE;
|
|
|
|
|
|
//
|
|
// Object Health
|
|
//
|
|
typedef enum _VDS_HEALTH
|
|
{
|
|
VDS_H_UNKNOWN = 0,
|
|
VDS_H_HEALTHY = 1,
|
|
VDS_H_REBUILDING = 2,
|
|
VDS_H_STALE = 3,
|
|
VDS_H_FAILING = 4,
|
|
VDS_H_FAILING_REDUNDANCY = 5,
|
|
VDS_H_FAILED_REDUNDANCY = 6,
|
|
VDS_H_FAILED_REDUNDANCY_FAILING = 7,
|
|
VDS_H_FAILED = 8,
|
|
VDS_H_REPLACED = 9,
|
|
VDS_H_PENDING_FAILURE = 10,
|
|
VDS_H_DEGRADED = 11
|
|
|
|
} VDS_HEALTH;
|
|
|
|
//
|
|
// Object TransitionState (configuration stability)
|
|
//
|
|
typedef enum _VDS_TRANSITION_STATE
|
|
{
|
|
VDS_TS_UNKNOWN = 0,
|
|
VDS_TS_STABLE = 1,
|
|
VDS_TS_EXTENDING = 2,
|
|
VDS_TS_SHRINKING = 3,
|
|
VDS_TS_RECONFIGING = 4, // Volume is changing location on disk.
|
|
VDS_TS_RESTRIPING = 5
|
|
|
|
} VDS_TRANSITION_STATE;
|
|
|
|
//
|
|
// File System Types
|
|
// NOTE: IVdsAdvancedDisk::FormatPartition() method in the software provider
|
|
// interface references this type, although this method is implemented
|
|
// only by the service.
|
|
//
|
|
typedef enum _VDS_FILE_SYSTEM_TYPE
|
|
{
|
|
VDS_FST_UNKNOWN = 0,
|
|
VDS_FST_RAW,
|
|
VDS_FST_FAT,
|
|
VDS_FST_FAT32,
|
|
VDS_FST_NTFS,
|
|
VDS_FST_CDFS,
|
|
VDS_FST_UDF,
|
|
VDS_FST_EXFAT
|
|
|
|
} VDS_FILE_SYSTEM_TYPE;
|
|
|
|
//
|
|
// --- HBA port related enums ---
|
|
//
|
|
|
|
//
|
|
// Types
|
|
//
|
|
typedef enum _VDS_HBAPORT_TYPE
|
|
{
|
|
// These types correspond to the definitions in the HBA API
|
|
VDS_HPT_UNKNOWN = 1, // Unknown
|
|
VDS_HPT_OTHER = 2, // Other
|
|
VDS_HPT_NOTPRESENT = 3, // Not present
|
|
VDS_HPT_NPORT = 5, // Fabric
|
|
VDS_HPT_NLPORT = 6, // Public Loop
|
|
VDS_HPT_FLPORT = 7, // Fabric on a Loop
|
|
VDS_HPT_FPORT = 8, // Fabric Port
|
|
VDS_HPT_EPORT = 9, // Fabric Expansion Port
|
|
VDS_HPT_GPORT = 10, // Generic Fabric Port
|
|
VDS_HPT_LPORT = 20, // Private Loop
|
|
VDS_HPT_PTP = 21 // Point to Point
|
|
|
|
} VDS_HBAPORT_TYPE;
|
|
|
|
//
|
|
// Status
|
|
//
|
|
typedef enum _VDS_HBAPORT_STATUS
|
|
{
|
|
// These states correspond to the definitions in the HBA API
|
|
VDS_HPS_UNKNOWN = 1, // Unknown
|
|
VDS_HPS_ONLINE = 2, // Operational
|
|
VDS_HPS_OFFLINE = 3, // User Offline
|
|
VDS_HPS_BYPASSED = 4, // Bypassed
|
|
VDS_HPS_DIAGNOSTICS = 5, // In Diagnostics Mode
|
|
VDS_HPS_LINKDOWN = 6, // Link Down
|
|
VDS_HPS_ERROR = 7, // Port Error
|
|
VDS_HPS_LOOPBACK = 8 // Loopback
|
|
|
|
} VDS_HBAPORT_STATUS;
|
|
|
|
//
|
|
// Flags
|
|
//
|
|
typedef enum _VDS_HBAPORT_SPEED_FLAG
|
|
{
|
|
// These flags correspond to the definitions in the HBA API
|
|
VDS_HSF_UNKNOWN = 0x0, // Unknown - transceiver incapable of reporting
|
|
VDS_HSF_1GBIT = 0x1, // 1 GBit/sec
|
|
VDS_HSF_2GBIT = 0x2, // 2 GBit/sec
|
|
VDS_HSF_10GBIT = 0x4, // 10 GBit/sec
|
|
VDS_HSF_4GBIT = 0x8, // 4 GBit/sec
|
|
VDS_HSF_NOT_NEGOTIATED = (1 << 15) // Speed not established
|
|
|
|
} VDS_HBAPORT_SPEED_FLAG;
|
|
|
|
|
|
//
|
|
// --- MPIO related enums ---
|
|
//
|
|
|
|
//
|
|
// Path Status
|
|
//
|
|
typedef enum _VDS_PATH_STATUS
|
|
{
|
|
VDS_MPS_UNKNOWN = STATUS_UNKNOWN,
|
|
VDS_MPS_ONLINE = STATUS_ONLINE,
|
|
VDS_MPS_FAILED = STATUS_FAILED,
|
|
VDS_MPS_STANDBY = STATUS_STANDBY
|
|
|
|
} VDS_PATH_STATUS;
|
|
|
|
|
|
//
|
|
// Load balance policy
|
|
//
|
|
typedef enum _VDS_LOADBALANCE_POLICY_ENUM
|
|
{
|
|
VDS_LBP_UNKNOWN = 0,
|
|
VDS_LBP_FAILOVER = 1,
|
|
VDS_LBP_ROUND_ROBIN = 2,
|
|
VDS_LBP_ROUND_ROBIN_WITH_SUBSET = 3,
|
|
VDS_LBP_DYN_LEAST_QUEUE_DEPTH = 4,
|
|
VDS_LBP_WEIGHTED_PATHS = 5,
|
|
VDS_LBP_LEAST_BLOCKS = 6,
|
|
VDS_LBP_VENDOR_SPECIFIC = 7
|
|
|
|
} VDS_LOADBALANCE_POLICY_ENUM;
|
|
|
|
|
|
//
|
|
// Load Balance Policy Support Flags
|
|
//
|
|
typedef enum _VDS_PROVIDER_LBSUPPORT_FLAG
|
|
{
|
|
VDS_LBF_FAILOVER = 0x01,
|
|
VDS_LBF_ROUND_ROBIN = 0x02,
|
|
VDS_LBF_ROUND_ROBIN_WITH_SUBSET = 0x04,
|
|
VDS_LBF_DYN_LEAST_QUEUE_DEPTH = 0x08,
|
|
VDS_LBF_WEIGHTED_PATHS = 0x10,
|
|
VDS_LBF_LEAST_BLOCKS = 0x20,
|
|
VDS_LBF_VENDOR_SPECIFIC = 0x40
|
|
|
|
} VDS_PROVIDER_LBSUPPORT_FLAG;
|
|
|
|
|
|
//
|
|
// --- Provider related enums ---
|
|
//
|
|
|
|
//
|
|
// Version Support Flags
|
|
//
|
|
typedef enum _VDS_VERSION_SUPPORT_FLAG
|
|
{
|
|
VDS_VSF_1_0 = 0x01,
|
|
VDS_VSF_1_1 = 0x02,
|
|
VDS_VSF_2_0 = 0x04,
|
|
VDS_VSF_2_1 = 0x08,
|
|
VDS_VSF_3_0 = 0x10
|
|
} VDS_VERSION_SUPPORT_FLAG;
|
|
|
|
|
|
//
|
|
// --- HwProvider related enums ---
|
|
//
|
|
|
|
//
|
|
// Types
|
|
//
|
|
typedef enum _VDS_HWPROVIDER_TYPE
|
|
{
|
|
VDS_HWT_UNKNOWN = 0,
|
|
VDS_HWT_PCI_RAID = 1,
|
|
VDS_HWT_FIBRE_CHANNEL = 2,
|
|
VDS_HWT_ISCSI = 3,
|
|
VDS_HWT_SAS = 4,
|
|
VDS_HWT_HYBRID = 5
|
|
} VDS_HWPROVIDER_TYPE;
|
|
|
|
|
|
//
|
|
// --- iSCSI related enums ---
|
|
//
|
|
|
|
//
|
|
// Login Types
|
|
//
|
|
typedef enum _VDS_ISCSI_LOGIN_TYPE
|
|
{
|
|
VDS_ILT_MANUAL = 0,
|
|
VDS_ILT_PERSISTENT = 1,
|
|
VDS_ILT_BOOT = 2
|
|
} VDS_ISCSI_LOGIN_TYPE;
|
|
|
|
|
|
//
|
|
// Authorization Types
|
|
//
|
|
typedef enum _VDS_ISCSI_AUTH_TYPE
|
|
{
|
|
VDS_IAT_NONE = 0,
|
|
VDS_IAT_CHAP = 1,
|
|
VDS_IAT_MUTUAL_CHAP = 2
|
|
} VDS_ISCSI_AUTH_TYPE;
|
|
|
|
|
|
//
|
|
// IPSEC Flags
|
|
//
|
|
typedef enum _VDS_ISCSI_IPSEC_FLAG
|
|
{
|
|
// These flags correspond to the definitions in the iSNS portal security bitmap
|
|
VDS_IIF_VALID = 0x01,
|
|
VDS_IIF_IKE = 0x02,
|
|
VDS_IIF_MAIN_MODE = 0x04,
|
|
VDS_IIF_AGGRESSIVE_MODE = 0x08,
|
|
VDS_IIF_PFS_ENABLE = 0x10,
|
|
VDS_IIF_TRANSPORT_MODE_PREFERRED = 0x20,
|
|
VDS_IIF_TUNNEL_MODE_PREFERRED = 0x40
|
|
} VDS_ISCSI_IPSEC_FLAG;
|
|
|
|
|
|
//
|
|
// Login Flags
|
|
//
|
|
typedef enum _VDS_ISCSI_LOGIN_FLAG
|
|
{
|
|
VDS_ILF_REQUIRE_IPSEC = 0x1,
|
|
VDS_ILF_MULTIPATH_ENABLED = 0x2
|
|
} VDS_ISCSI_LOGIN_FLAG;
|
|
|
|
|
|
//
|
|
// --- Miscellaneous Structures ---
|
|
//
|
|
|
|
//
|
|
// Path IDs
|
|
//
|
|
typedef struct _VDS_PATH_ID
|
|
{
|
|
ULONGLONG ullSourceId;
|
|
ULONGLONG ullPathId;
|
|
} VDS_PATH_ID;
|
|
|
|
|
|
//
|
|
// World Wide Name
|
|
//
|
|
typedef struct _VDS_WWN
|
|
{
|
|
// This structure corresponds to the HBA_WWN structure in the HBA API
|
|
UCHAR rguchWwn[8];
|
|
} VDS_WWN;
|
|
|
|
|
|
//
|
|
// IP Address
|
|
//
|
|
typedef struct _VDS_IPADDRESS
|
|
{
|
|
VDS_IPADDRESS_TYPE type;
|
|
ULONG ipv4Address;
|
|
UCHAR ipv6Address[16];
|
|
ULONG ulIpv6FlowInfo;
|
|
ULONG ulIpv6ScopeId;
|
|
WCHAR wszTextAddress[256 + 1];
|
|
ULONG ulPort;
|
|
} VDS_IPADDRESS;
|
|
|
|
//
|
|
// IPSEC Key
|
|
//
|
|
typedef struct _VDS_ISCSI_IPSEC_KEY
|
|
{
|
|
[size_is(ulKeySize)] UCHAR* pKey;
|
|
ULONG ulKeySize;
|
|
} VDS_ISCSI_IPSEC_KEY;
|
|
|
|
|
|
//
|
|
// CHAP Shared Secret
|
|
//
|
|
typedef struct _VDS_ISCSI_SHARED_SECRET
|
|
{
|
|
[size_is(ulSharedSecretSize)] UCHAR* pSharedSecret;
|
|
ULONG ulSharedSecretSize;
|
|
} VDS_ISCSI_SHARED_SECRET;
|
|
|
|
|
|
//
|
|
// --- VDS Object Properties ---
|
|
//
|
|
|
|
//
|
|
// HBA port properties
|
|
//
|
|
typedef struct _VDS_HBAPORT_PROP
|
|
{
|
|
VDS_OBJECT_ID id;
|
|
VDS_WWN wwnNode;
|
|
VDS_WWN wwnPort;
|
|
|
|
VDS_HBAPORT_TYPE type;
|
|
VDS_HBAPORT_STATUS status;
|
|
ULONG ulPortSpeed;
|
|
ULONG ulSupportedPortSpeed;
|
|
|
|
} VDS_HBAPORT_PROP;
|
|
|
|
|
|
//
|
|
// Initiator adapter properties
|
|
//
|
|
typedef struct _VDS_ISCSI_INITIATOR_ADAPTER_PROP
|
|
{
|
|
VDS_OBJECT_ID id;
|
|
[string] LPWSTR pwszName;
|
|
} VDS_ISCSI_INITIATOR_ADAPTER_PROP;
|
|
|
|
|
|
//
|
|
// Initiator portal properties
|
|
//
|
|
typedef struct _VDS_ISCSI_INITIATOR_PORTAL_PROP
|
|
{
|
|
VDS_OBJECT_ID id;
|
|
VDS_IPADDRESS address;
|
|
ULONG ulPortIndex;
|
|
} VDS_ISCSI_INITIATOR_PORTAL_PROP;
|
|
|
|
|
|
//
|
|
// Provider properties
|
|
//
|
|
typedef struct _VDS_PROVIDER_PROP
|
|
{
|
|
VDS_OBJECT_ID id;
|
|
[string] LPWSTR pwszName;
|
|
GUID guidVersionId;
|
|
[string] LPWSTR pwszVersion;
|
|
VDS_PROVIDER_TYPE type;
|
|
ULONG ulFlags;
|
|
ULONG ulStripeSizeFlags;
|
|
// This is for software provider only.
|
|
// Stripe size must be a power of 2. Each bit in the 32-bit integer
|
|
// represents a size. For example, if the nth bit is set, then stripe
|
|
// size of 2^n is supported. So bit 0 - through bit 31 can specify
|
|
// 2^0 through 2^31, which should be more than enough.
|
|
// Basic provider should set this to 0.
|
|
SHORT sRebuildPriority;
|
|
// This is for software provider only.
|
|
// All volumes managed by a provider have the same rebuild priority.
|
|
|
|
} VDS_PROVIDER_PROP;
|
|
|
|
|
|
//
|
|
// --- MPIO related Structures ---
|
|
//
|
|
|
|
//
|
|
// Path Information
|
|
//
|
|
typedef struct _VDS_PATH_INFO
|
|
{
|
|
VDS_PATH_ID pathId;
|
|
VDS_HWPROVIDER_TYPE type;
|
|
VDS_PATH_STATUS status;
|
|
|
|
// subsystem-side endpoint of the path
|
|
[switch_is(type)] union
|
|
{
|
|
[case(VDS_HWT_FIBRE_CHANNEL,VDS_HWT_SAS)]
|
|
VDS_OBJECT_ID controllerPortId;
|
|
[case(VDS_HWT_ISCSI)]
|
|
VDS_OBJECT_ID targetPortalId;
|
|
[default];
|
|
};
|
|
|
|
// local server-side endpoint of the path
|
|
[switch_is(type)] union
|
|
{
|
|
[case(VDS_HWT_FIBRE_CHANNEL,VDS_HWT_SAS)]
|
|
VDS_OBJECT_ID hbaPortId;
|
|
[case(VDS_HWT_ISCSI)]
|
|
VDS_OBJECT_ID initiatorAdapterId;
|
|
[default];
|
|
};
|
|
|
|
// additional information about the local server-side endpoint of the path
|
|
[switch_is(type)] union
|
|
{
|
|
[case(VDS_HWT_FIBRE_CHANNEL,VDS_HWT_SAS)]
|
|
VDS_HBAPORT_PROP* pHbaPortProp;
|
|
[case(VDS_HWT_ISCSI)]
|
|
VDS_IPADDRESS* pInitiatorPortalIpAddr;
|
|
[default];
|
|
};
|
|
|
|
} VDS_PATH_INFO;
|
|
|
|
|
|
//
|
|
// Path Policy
|
|
//
|
|
typedef struct _VDS_PATH_POLICY
|
|
{
|
|
VDS_PATH_ID pathId;
|
|
BOOL bPrimaryPath;
|
|
ULONG ulWeight; // only relevant for VDS_LBP_WEIGHTED_PATHS
|
|
|
|
} VDS_PATH_POLICY;
|
|
|
|
|
|
//
|
|
// LUN info data
|
|
//
|
|
|
|
import "vdslun.idl";
|
|
|
|
//
|
|
// --- Interface definitions ---
|
|
//
|
|
|
|
//
|
|
// IEnumVdsObject:
|
|
// This is an interface pointer to a generic VDS objects collection. Object
|
|
// can be providers, packs, volumes, disks, SubSystems, Controllers and
|
|
// spindles. But different types of objects do not mix in a collection.
|
|
// Implemented by: enum object
|
|
//
|
|
[
|
|
object,
|
|
uuid(118610b7-8d94-4030-b5b8-500889788e4e),
|
|
pointer_default(unique)
|
|
]
|
|
|
|
interface IEnumVdsObject : IUnknown
|
|
{
|
|
[helpstring("method Next")]
|
|
HRESULT Next(
|
|
[in] ULONG celt,
|
|
[out, size_is(celt), length_is(*pcFetched)]
|
|
IUnknown **ppObjectArray,
|
|
[out] ULONG *pcFetched
|
|
);
|
|
|
|
[helpstring("method Skip")]
|
|
HRESULT Skip(
|
|
[in] ULONG celt
|
|
);
|
|
|
|
[helpstring("method Reset")]
|
|
HRESULT Reset(
|
|
void
|
|
);
|
|
|
|
[helpstring("method Clone")]
|
|
HRESULT Clone(
|
|
[out] IEnumVdsObject **ppEnum
|
|
);
|
|
}
|
|
|
|
//
|
|
// IVdsAsync:
|
|
// Implemented by: async object
|
|
//
|
|
[
|
|
object,
|
|
uuid(d5d23b6d-5a55-4492-9889-397a3c2d2dbc),
|
|
pointer_default(unique)
|
|
]
|
|
|
|
interface IVdsAsync : IUnknown
|
|
{
|
|
[helpstring("method Cancel")]
|
|
HRESULT Cancel(
|
|
void
|
|
);
|
|
|
|
// Wait:
|
|
// If the asynchronous operation needs to return a result, it is
|
|
// returned through VDS_ASYNC_OUTPUT. Otherwise, the second argument
|
|
// is ignored.
|
|
[helpstring("method Wait")]
|
|
HRESULT Wait(
|
|
[out] HRESULT *pHrResult,
|
|
[out] VDS_ASYNC_OUTPUT *pAsyncOut
|
|
);
|
|
|
|
//QueryStatus:
|
|
// The argument reflects the progress of the operation Format.
|
|
// For CreateVolume, CreateLun, etc. the value is set to -1 to
|
|
// mean nothing. We want it so that simple programs/scripts that
|
|
// do not want to handle notification can still get progress info.
|
|
[helpstring("method QueryStatus")]
|
|
HRESULT QueryStatus(
|
|
[out] HRESULT *pHrResult,
|
|
[out] ULONG *pulPercentCompleted
|
|
);
|
|
}
|
|
|
|
//
|
|
// IVdsAdviseSink:
|
|
// Applications register this interface with the service in order to receive
|
|
// notifications from it. The service registers this interface with the
|
|
// providers in order to receive notifications from them, which it can also
|
|
// pass to the applications.
|
|
// Implemented by: callback object
|
|
// Implemented where: application, common layer
|
|
//
|
|
[
|
|
object,
|
|
uuid(8326cd1d-cf59-4936-b786-5efc08798e25),
|
|
pointer_default(unique)
|
|
]
|
|
|
|
interface IVdsAdviseSink : IUnknown
|
|
{
|
|
[helpstring("method OnNotify")]
|
|
HRESULT OnNotify(
|
|
[in, range(1, 100)] LONG lNumberOfNotifications,
|
|
[in, size_is(lNumberOfNotifications)]
|
|
VDS_NOTIFICATION *pNotificationArray
|
|
);
|
|
}
|
|
|
|
//
|
|
// IVdsProvider:
|
|
// Implemented by: provider object
|
|
// Implemented where: providers, common layer
|
|
// Accessed by: applications
|
|
//
|
|
[
|
|
object,
|
|
uuid(10c5e575-7984-4e81-a56b-431f5f92ae42),
|
|
pointer_default(unique)
|
|
]
|
|
|
|
interface IVdsProvider : IUnknown
|
|
{
|
|
[helpstring("method GetProperties")]
|
|
HRESULT GetProperties(
|
|
[out] VDS_PROVIDER_PROP *pProviderProp
|
|
);
|
|
}
|
|
|
|
//
|
|
// IVdsProviderSupport:
|
|
// Implemented by: provider object
|
|
// Implemented where: providers, common layer
|
|
// Accessed by: applications
|
|
//
|
|
[
|
|
object,
|
|
uuid(1732be13-e8f9-4a03-bfbc-5f616aa66ce1),
|
|
pointer_default(unique)
|
|
]
|
|
|
|
interface IVdsProviderSupport : IUnknown
|
|
{
|
|
[helpstring("method GetVersionSupport")]
|
|
HRESULT GetVersionSupport(
|
|
[out] ULONG *ulVersionSupport
|
|
);
|
|
|
|
}
|
|
|