1/**
   2 * This file has no copyright assigned and is placed in the Public Domain.
   3 * This file is part of the mingw-w64 runtime package.
   4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
   5 */
   6#ifndef _INC_VDS
   7#define _INC_VDS
   8
   9#if (_WIN32_WINNT >= 0x0600)
  10#include <diskguid.h>
  11#include <winioctl.h>
  12
  13#ifdef __cplusplus
  14extern "C" {
  15#endif
  16
  17#define GPT_PARTITION_NAME_LENGTH 36
  18
  19  typedef GUID VDS_OBJECT_ID;
  20  typedef UINT64 VDS_PATH_ID;
  21
  22  typedef enum _VDS_PARTITION_STYLE {
  23    VDS_PST_UNKNOWN   = 0,
  24    VDS_PST_MBR       = 1,
  25    VDS_PST_GPT       = 2 
  26  } VDS_PARTITION_STYLE;
  27
  28  typedef enum tag_VDS_PARTITION_STYLE {
  29    VDS_PARTITION_STYLE_MBR,
  30    VDS_PARTITION_STYLE_GPT,
  31    VDS_PARTITION_STYLE_RAW 
  32  } __VDS_PARTITION_STYLE;
  33
  34  typedef enum _VDS_ASYNC_OUTPUT_TYPE {
  35    VDS_ASYNCOUT_UNKNOWN             = 0,
  36    VDS_ASYNCOUT_CREATEVOLUME        = 1,
  37    VDS_ASYNCOUT_EXTENDVOLUME        = 2,
  38    VDS_ASYNCOUT_SHRINKVOLUME        = 3,
  39    VDS_ASYNCOUT_ADDVOLUMEPLEX       = 4,
  40    VDS_ASYNCOUT_BREAKVOLUMEPLEX     = 5,
  41    VDS_ASYNCOUT_REMOVEVOLUMEPLEX    = 6,
  42    VDS_ASYNCOUT_REPAIRVOLUMEPLEX    = 7,
  43    VDS_ASYNCOUT_RECOVERPACK         = 8,
  44    VDS_ASYNCOUT_REPLACEDISK         = 9,
  45    VDS_ASYNCOUT_CREATEPARTITION     = 10,
  46    VDS_ASYNCOUT_CLEAN               = 11,
  47    VDS_ASYNCOUT_CREATELUN           = 50,
  48    VDS_ASYNCOUT_ADDLUNPLEX          = 52,
  49    VDS_ASYNCOUT_REMOVELUNPLEX       = 53,
  50    VDS_ASYNCOUT_EXTENDLUN           = 54,
  51    VDS_ASYNCOUT_SHRINKLUN           = 55,
  52    VDS_ASYNCOUT_RECOVERLUN          = 56,
  53    VDS_ASYNCOUT_LOGINTOTARGET       = 60,
  54    VDS_ASYNCOUT_LOGOUTFROMTARGET    = 61,
  55    VDS_ASYNCOUT_CREATETARGET        = 62,
  56    VDS_ASYNCOUT_CREATEPORTALGROUP   = 63,
  57    VDS_ASYNCOUT_DELETETARGET        = 64,
  58    VDS_ASYNCOUT_ADDPORTAL           = 65,
  59    VDS_ASYNCOUT_REMOVEPORTAL        = 66,
  60    VDS_ASYNCOUT_DELETEPORTALGROUP   = 67,
  61    VDS_ASYNCOUT_FORMAT              = 101,
  62    VDS_ASYNCOUT_CREATE_VDISK        = 200,
  63    VDS_ASYNCOUT_ATTACH_VDISK        = 201,
  64    VDS_ASYNCOUT_COMPACT_VDISK       = 202,
  65    VDS_ASYNCOUT_MERGE_VDISK         = 203,
  66    VDS_ASYNCOUT_EXPAND_VDISK        = 204 
  67  } VDS_ASYNC_OUTPUT_TYPE;
  68
  69  typedef enum _VDS_HEALTH {
  70    VDS_H_UNKNOWN                     = 0,
  71    VDS_H_HEALTHY                     = 1,
  72    VDS_H_REBUILDING                  = 2,
  73    VDS_H_STALE                       = 3,
  74    VDS_H_FAILING                     = 4,
  75    VDS_H_FAILING_REDUNDANCY          = 5,
  76    VDS_H_FAILED_REDUNDANCY           = 6,
  77    VDS_H_FAILED_REDUNDANCY_FAILING   = 7,
  78    VDS_H_FAILED                      = 8,
  79    VDS_H_REPLACED                    = 9,
  80    VDS_H_PENDING_FAILURE             = 10,
  81    VDS_H_DEGRADED                    = 11 
  82  } VDS_HEALTH;
  83
  84  typedef enum _VDS_CONTROLLER_STATUS {
  85    VDS_CS_UNKNOWN     = 0,
  86    VDS_CS_ONLINE      = 1,
  87    VDS_CS_NOT_READY   = 2,
  88    VDS_CS_OFFLINE     = 4,
  89    VDS_CS_FAILED      = 5,
  90    VDS_CS_REMOVED     = 8 
  91  } VDS_CONTROLLER_STATUS;
  92
  93  typedef enum _VDS_DISK_EXTENT_TYPE {
  94    VDS_DET_UNKNOWN    = 0,
  95    VDS_DET_FREE       = 1,
  96    VDS_DET_DATA       = 2,
  97    VDS_DET_OEM        = 3,
  98    VDS_DET_ESP        = 4,
  99    VDS_DET_MSR        = 5,
 100    VDS_DET_LDM        = 6,
 101    VDS_DET_CLUSTER    = 7,
 102    VDS_DET_UNUSABLE   = 0x7FFF 
 103  } VDS_DISK_EXTENT_TYPE;
 104
 105  typedef enum _VDS_DISK_FLAG {
 106    VDS_DF_AUDIO_CD               = 0x1,
 107    VDS_DF_HOTSPARE               = 0x2,
 108    VDS_DF_RESERVE_CAPABLE        = 0x4,
 109    VDS_DF_MASKED                 = 0x8,
 110    VDS_DF_STYLE_CONVERTIBLE      = 0x10,
 111    VDS_DF_CLUSTERED              = 0x20,
 112    VDS_DF_READ_ONLY              = 0x40,
 113    VDS_DF_SYSTEM_DISK            = 0x80,
 114    VDS_DF_BOOT_DISK              = 0x100,
 115    VDS_DF_PAGEFILE_DISK          = 0x200,
 116    VDS_DF_HIBERNATIONFILE_DISK   = 0x400,
 117    VDS_DF_CRASHDUMP_DISK         = 0x800,
 118    VDS_DF_HAS_ARC_PATH           = 0x1000,
 119    VDS_DF_DYNAMIC                = 0x2000,
 120    VDS_DF_BOOT_FROM_DISK         = 0x4000,
 121    VDS_DF_CURRENT_READ_ONLY      = 0x8000 
 122  } VDS_DISK_FLAG;
 123
 124  typedef enum _VDS_NOTIFICATION_TARGET_TYPE {
 125    VDS_NTT_UNKNOWN        = 0,
 126    VDS_NTT_PACK           = 10,
 127    VDS_NTT_VOLUME         = 11,
 128    VDS_NTT_DISK           = 13,
 129    VDS_NTT_PARTITION      = 60,
 130    VDS_NTT_DRIVE_LETTER   = 61,
 131    VDS_NTT_FILE_SYSTEM    = 62,
 132    VDS_NTT_MOUNT_POINT    = 63,
 133    VDS_NTT_SUB_SYSTEM     = 30,
 134    VDS_NTT_CONTROLLER     = 31,
 135    VDS_NTT_DRIVE          = 32,
 136    VDS_NTT_LUN            = 33,
 137    VDS_NTT_PORT           = 35,
 138    VDS_NTT_PORTAL         = 36,
 139    VDS_NTT_TARGET         = 37,
 140    VDS_NTT_PORTAL_GROUP   = 38,
 141    VDS_NTT_SERVICE        = 200 
 142  } VDS_NOTIFICATION_TARGET_TYPE;
 143
 144  typedef enum _VDS_OBJECT_TYPE {
 145    VDS_OT_UNKNOWN        = 0,
 146    VDS_OT_PROVIDER       = 1,
 147    VDS_OT_PACK           = 10,
 148    VDS_OT_VOLUME         = 11,
 149    VDS_OT_VOLUME_PLEX    = 12,
 150    VDS_OT_DISK           = 13,
 151    VDS_OT_SUB_SYSTEM     = 30,
 152    VDS_OT_CONTROLLER     = 31,
 153    VDS_OT_DRIVE          = 32,
 154    VDS_OT_LUN            = 33,
 155    VDS_OT_LUN_PLEX       = 34,
 156    VDS_OT_PORT           = 35,
 157    VDS_OT_PORTAL         = 36,
 158    VDS_OT_TARGET         = 37,
 159    VDS_OT_PORTAL_GROUP   = 38,
 160    VDS_OT_STORAGE_POOL   = 39,
 161    VDS_OT_HBAPORT        = 90,
 162    VDS_OT_INIT_ADAPTER   = 91,
 163    VDS_OT_INIT_PORTAL    = 92,
 164    VDS_OT_ASYNC          = 100,
 165    VDS_OT_ENUM           = 101,
 166    VDS_OT_VDISK          = 200,
 167    VDS_OT_OPEN_VDISK     = 201 
 168  } VDS_OBJECT_TYPE;
 169
 170  typedef enum _VDS_STORAGE_BUS_TYPE {
 171    VDSBusTypeUnknown = 0x00,
 172    VDSBusTypeScsi = 0x01,
 173    VDSBusTypeAtapi = 0x02,
 174    VDSBusTypeAta = 0x03,
 175    VDSBusType1394 = 0x04,
 176    VDSBusTypeSsa = 0x05,
 177    VDSBusTypeFibre = 0x06,
 178    VDSBusTypeUsb = 0x07,
 179    VDSBusTypeRAID = 0x08,
 180    VDSBusTypeiScsi = 0x09,
 181    VDSBusTypeMaxReserved = 0x7F
 182  } VDS_STORAGE_BUS_TYPE;
 183
 184  typedef enum _VDS_DISK_STATUS {
 185    VDS_DS_UNKNOWN     = 0,
 186    VDS_DS_ONLINE      = 1,
 187    VDS_DS_NOT_READY   = 2,
 188    VDS_DS_NO_MEDIA    = 3,
 189    VDS_DS_OFFLINE     = 4,
 190    VDS_DS_FAILED      = 5,
 191    VDS_DS_MISSING     = 6 
 192  } VDS_DISK_STATUS;
 193
 194  typedef enum _VDS_DRIVE_FLAG {
 195    VDS_DRF_HOTSPARE           = 0x1,
 196    VDS_DRF_ASSIGNED           = 0x2,
 197    VDS_DRF_UNASSIGNED         = 0x4,
 198    VDS_DRF_HOTSPARE_IN_USE    = 0x8,
 199    VDS_DRF_HOTSPARE_STANDBY   = 0x10 
 200  } VDS_DRIVE_FLAG;
 201
 202  typedef enum _VDS_DRIVE_LETTER_FLAG {
 203    VDS_DLF_NON_PERSISTENT   = 0x1 
 204  } VDS_DRIVE_LETTER_FLAG;
 205
 206  typedef enum _VDS_DRIVE_STATUS {
 207    VDS_DRS_UNKNOWN     = 0,
 208    VDS_DRS_ONLINE      = 1,
 209    VDS_DRS_NOT_READY   = 2,
 210    VDS_DRS_OFFLINE     = 4,
 211    VDS_DRS_FAILED      = 5,
 212    VDS_DRS_REMOVED     = 8 
 213  } VDS_DRIVE_STATUS;
 214
 215  typedef enum _VDS_FILE_SYSTEM_FLAG {
 216    VDS_FSF_SUPPORT_FORMAT            = 0x1,
 217    VDS_FSF_SUPPORT_QUICK_FORMAT      = 0x2,
 218    VDS_FSF_SUPPORT_COMPRESS          = 0x4,
 219    VDS_FSF_SUPPORT_SPECIFY_LABEL     = 0x8,
 220    VDS_FSF_SUPPORT_MOUNT_POINT       = 0x10,
 221    VDS_FSF_SUPPORT_REMOVABLE_MEDIA   = 0x20,
 222    VDS_FSF_SUPPORT_EXTEND            = 0x40,
 223    VDS_FSF_ALLOCATION_UNIT_512       = 0x10000,
 224    VDS_FSF_ALLOCATION_UNIT_1K        = 0x20000,
 225    VDS_FSF_ALLOCATION_UNIT_2K        = 0x40000,
 226    VDS_FSF_ALLOCATION_UNIT_4K        = 0x80000,
 227    VDS_FSF_ALLOCATION_UNIT_8K        = 0x100000,
 228    VDS_FSF_ALLOCATION_UNIT_16K       = 0x200000,
 229    VDS_FSF_ALLOCATION_UNIT_32K       = 0x400000,
 230    VDS_FSF_ALLOCATION_UNIT_64K       = 0x800000,
 231    VDS_FSF_ALLOCATION_UNIT_128K      = 0x1000000,
 232    VDS_FSF_ALLOCATION_UNIT_256K      = 0x2000000 
 233  } VDS_FILE_SYSTEM_FLAG;
 234
 235  typedef enum _VDS_FILE_SYSTEM_FORMAT_SUPPORT_FLAG {
 236    VDS_FSS_DEFAULT             = 0x00000001,
 237    VDS_FSS_PREVIOUS_REVISION   = 0x00000002,
 238    VDS_FSS_RECOMMENDED         = 0x00000004 
 239  } VDS_FILE_SYSTEM_FORMAT_SUPPORT_FLAG;
 240
 241  typedef enum _VDS_FILE_SYSTEM_PROP_FLAG {
 242    VDS_FPF_COMPRESSED   = 0x1 
 243  } VDS_FILE_SYSTEM_PROP_FLAG;
 244
 245  typedef enum _VDS_FILE_SYSTEM_TYPE {
 246    VDS_FST_UNKNOWN   = 0,
 247    VDS_FST_RAW       = 1,
 248    VDS_FST_FAT       = 2,
 249    VDS_FST_FAT32     = 3,
 250    VDS_FST_NTFS      = 4,
 251    VDS_FST_CDFS      = 5,
 252    VDS_FST_UDF       = 6,
 253    VDS_FST_EXFAT     = 7 
 254  } VDS_FILE_SYSTEM_TYPE;
 255
 256  typedef enum _VDS_HBAPORT_SPEED_FLAG {
 257    VDS_HSF_UNKNOWN          = 0,
 258    VDS_HSF_1GBIT            = 0x1,
 259    VDS_HSF_2GBIT            = 0x2,
 260    VDS_HSF_10GBIT           = 0x4,
 261    VDS_HSF_4GBIT            = 0x8,
 262    VDS_HSF_NOT_NEGOTIATED   = 0x8000 
 263  } VDS_HBAPORT_SPEED_FLAG;
 264
 265  typedef enum _VDS_HBAPORT_STATUS {
 266    VDS_HPS_UNKNOWN       = 1,
 267    VDS_HPS_ONLINE        = 2,
 268    VDS_HPS_OFFLINE       = 3,
 269    VDS_HPS_BYPASSED      = 4,
 270    VDS_HPS_DIAGNOSTICS   = 5,
 271    VDS_HPS_LINKDOWN      = 6,
 272    VDS_HPS_ERROR         = 7,
 273    VDS_HPS_LOOPBACK      = 8 
 274  } VDS_HBAPORT_STATUS;
 275
 276  typedef enum _VDS_HBAPORT_TYPE {
 277    VDS_HPT_UNKNOWN      = 1,
 278    VDS_HPT_OTHER        = 2,
 279    VDS_HPT_NOTPRESENT   = 3,
 280    VDS_HPT_NPORT        = 5,
 281    VDS_HPT_NLPORT       = 6,
 282    VDS_HPT_FLPORT       = 7,
 283    VDS_HPT_FPORT        = 8,
 284    VDS_HPT_EPORT        = 9,
 285    VDS_HPT_GPORT        = 10,
 286    VDS_HPT_LPORT        = 20,
 287    VDS_HPT_PTP          = 21 
 288  } VDS_HBAPORT_TYPE;
 289
 290  typedef enum _VDS_HWPROVIDER_TYPE {
 291    VDS_HWT_UNKNOWN         = 0,
 292    VDS_HWT_PCI_RAID        = 1,
 293    VDS_HWT_FIBRE_CHANNEL   = 2,
 294    VDS_HWT_ISCSI           = 3,
 295    VDS_HWT_SAS             = 4,
 296    VDS_HWT_HYBRID          = 5 
 297  } VDS_HWPROVIDER_TYPE;
 298
 299  typedef enum _VDS_INTERCONNECT_ADDRESS_TYPE {
 300    VDS_IA_UNKNOWN = 0,
 301    VDS_IA_FCFS = 1,
 302    VDS_IA_FCPH = 2,
 303    VDS_IA_FCPH3 = 3,
 304    VDS_IA_MAC = 4,
 305    VDS_IA_SCSI = 5
 306  } VDS_INTERCONNECT_ADDRESS_TYPE;
 307
 308  typedef enum VDS_IPADDRESS_TYPE {
 309    VDS_IPT_TEXT    = 0,
 310    VDS_IPT_IPV4    = 1,
 311    VDS_IPT_IPV6    = 2,
 312    VDS_IPT_EMPTY   = 3 
 313  } VDS_IPADDRESS_TYPE;
 314
 315  typedef enum _VDS_ISCSI_AUTH_TYPE {
 316    VDS_IAT_NONE          = 0,
 317    VDS_IAT_CHAP          = 1,
 318    VDS_IAT_MUTUAL_CHAP   = 2 
 319  } VDS_ISCSI_AUTH_TYPE;
 320
 321  typedef enum _VDS_ISCSI_LOGIN_FLAG {
 322    VDS_ILF_REQUIRE_IPSEC       = 0x1,
 323    VDS_ILF_MULTIPATH_ENABLED   = 0x2 
 324  } VDS_ISCSI_LOGIN_FLAG;
 325
 326  typedef enum _VDS_ISCSI_LOGIN_TYPE {
 327    VDS_ILT_MANUAL       = 0,
 328    VDS_ILT_PERSISTENT   = 1,
 329    VDS_ILT_BOOT         = 2 
 330  } VDS_ISCSI_LOGIN_TYPE;
 331
 332  typedef enum _VDS_ISCSI_PORTAL_STATUS {
 333    VDS_IPS_UNKNOWN     = 0,
 334    VDS_IPS_ONLINE      = 1,
 335    VDS_IPS_NOT_READY   = 2,
 336    VDS_IPS_OFFLINE     = 4,
 337    VDS_IPS_FAILED      = 5 
 338  } VDS_ISCSI_PORTAL_STATUS;
 339
 340  typedef enum _VDS_LOADBALANCE_POLICY_ENUM {
 341    VDS_LBP_UNKNOWN                   = 0,
 342    VDS_LBP_FAILOVER                  = 1,
 343    VDS_LBP_ROUND_ROBIN               = 2,
 344    VDS_LBP_ROUND_ROBIN_WITH_SUBSET   = 3,
 345    VDS_LBP_DYN_LEAST_QUEUE_DEPTH     = 4,
 346    VDS_LBP_WEIGHTED_PATHS            = 5,
 347    VDS_LBP_LEAST_BLOCKS              = 6,
 348    VDS_LBP_VENDOR_SPECIFIC           = 7 
 349  } VDS_LOADBALANCE_POLICY_ENUM;
 350
 351  typedef enum _VDS_LUN_FLAG {
 352    VDS_LF_LBN_REMAP_ENABLED               = 0x01,
 353    VDS_LF_READ_BACK_VERIFY_ENABLED        = 0x02,
 354    VDS_LF_WRITE_THROUGH_CACHING_ENABLED   = 0x04,
 355    VDS_LF_HARDWARE_CHECKSUM_ENABLED       = 0x08,
 356    VDS_LF_READ_CACHE_ENABLED              = 0x10,
 357    VDS_LF_WRITE_CACHE_ENABLED             = 0x20,
 358    VDS_LF_MEDIA_SCAN_ENABLED              = 0x40,
 359    VDS_LF_CONSISTENCY_CHECK_ENABLED       = 0x80,
 360    VDS_LF_SNAPSHOT                        = 0x100 
 361  } VDS_LUN_FLAG;
 362
 363  typedef enum _VDS_LUN_PLEX_FLAG  {
 364    VDS_LPF_LBN_REMAP_ENABLED   = 0x1 
 365  } VDS_LUN_PLEX_FLAG;
 366
 367  typedef enum _VDS_TRANSITION_STATE {
 368    VDS_TS_UNKNOWN       = 0,
 369    VDS_TS_STABLE        = 1,
 370    VDS_TS_EXTENDING     = 2,
 371    VDS_TS_SHRINKING     = 3,
 372    VDS_TS_RECONFIGING   = 4,
 373    VDS_TS_RESTRIPING    = 8 
 374  } VDS_TRANSITION_STATE;
 375
 376  typedef enum _VDS_LUN_PLEX_STATUS {
 377    VDS_LPS_UNKNOWN     = 0,
 378    VDS_LPS_ONLINE      = 1,
 379    VDS_LPS_NOT_READY   = 2,
 380    VDS_LPS_OFFLINE     = 4,
 381    VDS_LPS_FAILED      = 5 
 382  } VDS_LUN_PLEX_STATUS;
 383
 384  typedef enum _VDS_LUN_PLEX_TYPE {
 385    VDS_LPT_UNKNOWN   = 0,
 386    VDS_LPT_SIMPLE    = 10,
 387    VDS_LPT_SPAN      = 11,
 388    VDS_LPT_STRIPE    = 12,
 389    VDS_LPT_PARITY    = 14,
 390    VDS_LPT_RAID2     = 15,
 391    VDS_LPT_RAID3     = 16,
 392    VDS_LPT_RAID4     = 17,
 393    VDS_LPT_RAID5     = 18,
 394    VDS_LPT_RAID6     = 19,
 395    VDS_LPT_RAID03    = 21,
 396    VDS_LPT_RAID05    = 22,
 397    VDS_LPT_RAID10    = 23,
 398    VDS_LPT_RAID15    = 24,
 399    VDS_LPT_RAID30    = 25,
 400    VDS_LPT_RAID50    = 26,
 401    VDS_LPT_RAID53    = 28,
 402    VDS_LPT_RAID60    = 29 
 403  } VDS_LUN_PLEX_TYPE;
 404
 405  typedef enum _VDS_LUN_STATUS {
 406    VDS_LS_UNKNOWN     = 0,
 407    VDS_LS_ONLINE      = 1,
 408    VDS_LS_NOT_READY   = 2,
 409    VDS_LS_OFFLINE     = 4,
 410    VDS_LS_FAILED      = 5 
 411  } VDS_LUN_STATUS;
 412
 413  typedef enum _VDS_LUN_TYPE {
 414    VDS_LT_UNKNOWN              = 0,
 415    VDS_LT_DEFAULT              = 1,
 416    VDS_LT_FAULT_TOLERANT       = 2,
 417    VDS_LT_NON_FAULT_TOLERANT   = 3,
 418    VDS_LT_SIMPLE               = 10,
 419    VDS_LT_SPAN                 = 11,
 420    VDS_LT_STRIPE               = 12,
 421    VDS_LT_MIRROR               = 13,
 422    VDS_LT_PARITY               = 14,
 423    VDS_LT_RAID2                = 15,
 424    VDS_LT_RAID3                = 16,
 425    VDS_LT_RAID4                = 17,
 426    VDS_LT_RAID5                = 18,
 427    VDS_LT_RAID6                = 19,
 428    VDS_LT_RAID01               = 20,
 429    VDS_LT_RAID03               = 21,
 430    VDS_LT_RAID05               = 22,
 431    VDS_LT_RAID10               = 23,
 432    VDS_LT_RAID15               = 24,
 433    VDS_LT_RAID30               = 25,
 434    VDS_LT_RAID50               = 26,
 435    VDS_LT_RAID51               = 27,
 436    VDS_LT_RAID53               = 28,
 437    VDS_LT_RAID60               = 29,
 438    VDS_LT_RAID61               = 30 
 439  } VDS_LUN_TYPE;
 440
 441  typedef enum _VDS_MAINTENANCE_OPERATION {
 442    BlinkLight   = 1,
 443    BeepAlarm    = 2,
 444    SpinDown     = 3,
 445    SpinUp       = 4,
 446    Ping         = 5 
 447  } VDS_MAINTENANCE_OPERATION;
 448
 449  typedef enum _VDS_PACK_FLAG {
 450    VDS_PKF_FOREIGN        = 0x1,
 451    VDS_PKF_NOQUORUM       = 0x2,
 452    VDS_PKF_POLICY         = 0x4,
 453    VDS_PKF_CORRUPTED      = 0x8,
 454    VDS_PKF_ONLINE_ERROR   = 0x10 
 455  } VDS_PACK_FLAG;
 456
 457  typedef enum _VDS_PACK_STATUS {
 458    VDS_PS_UNKNOWN   = 0,
 459    VDS_PS_ONLINE    = 1,
 460    VDS_PS_OFFLINE   = 4 
 461  } VDS_PACK_STATUS;
 462
 463  typedef enum _VDS_PARTITION_FLAG {
 464    VDS_PTF_SYSTEM   = 0x1 
 465  } VDS_PARTITION_FLAG;
 466
 467  typedef enum _VDS_PATH_STATUS {
 468    VDS_MPS_UNKNOWN   = 0,
 469    VDS_MPS_ONLINE    = 1,
 470    VDS_MPS_FAILED    = 5,
 471    VDS_MPS_STANDBY   = 7 
 472  } VDS_PATH_STATUS;
 473
 474  typedef enum _VDS_PORT_STATUS {
 475    VDS_PRS_UNKNOWN     = 0,
 476    VDS_PRS_ONLINE      = 1,
 477    VDS_PRS_NOT_READY   = 2,
 478    VDS_PRS_OFFLINE     = 4,
 479    VDS_PRS_FAILED      = 5,
 480    VDS_PRS_REMOVED     = 8 
 481  } VDS_PORT_STATUS;
 482
 483  typedef enum _VDS_PROVIDER_FLAG {
 484    VDS_PF_DYNAMIC                           = 0x00000001,
 485    VDS_PF_INTERNAL_HARDWARE_PROVIDER        = 0x00000002,
 486    VDS_PF_ONE_DISK_ONLY_PER_PACK            = 0x00000004,
 487    VDS_PF_ONE_PACK_ONLINE_ONLY              = 0x00000008,
 488    VDS_PF_VOLUME_SPACE_MUST_BE_CONTIGUOUS   = 0x00000010,
 489    VDS_PF_SUPPORT_DYNAMIC                   = 0x80000000,
 490    VDS_PF_SUPPORT_FAULT_TOLERANT            = 0x40000000,
 491    VDS_PF_SUPPORT_DYNAMIC_1394              = 0x20000000,
 492    VDS_PF_SUPPORT_MIRROR                    = 0x00000020,
 493    VDS_PF_SUPPORT_RAID5                     = 0x00000040 
 494  } VDS_PROVIDER_FLAG;
 495
 496  typedef enum _VDS_PROVIDER_LBSUPPORT_FLAG {
 497    VDS_LBF_FAILOVER                  = 0x1,
 498    VDS_LBF_ROUND_ROBIN               = 0x2,
 499    VDS_LBF_ROUND_ROBIN_WITH_SUBSET   = 0x4,
 500    VDS_LBF_DYN_LEAST_QUEUE_DEPTH     = 0x8,
 501    VDS_LBF_WEIGHTED_PATHS            = 0x10,
 502    VDS_LBF_LEAST_BLOCKS              = 0x20,
 503    VDS_LBF_VENDOR_SPECIFIC           = 0x40 
 504  } VDS_PROVIDER_LBSUPPORT_FLAG;
 505
 506  typedef enum _VDS_PROVIDER_TYPE {
 507    VDS_PT_UNKNOWN       = 0,
 508    VDS_PT_SOFTWARE      = 1,
 509    VDS_PT_HARDWARE      = 2,
 510    VDS_PT_VIRTUALDISK   = 3,
 511    VDS_PT_MAX           = 4 
 512  } VDS_PROVIDER_TYPE;
 513
 514  typedef enum _VDS_QUERY_PROVIDER_FLAG {
 515    VDS_QUERY_SOFTWARE_PROVIDERS   = 0x1,
 516    VDS_QUERY_HARDWARE_PROVIDERS   = 0x2 
 517  } VDS_QUERY_PROVIDER_FLAG;
 518
 519  typedef enum _VDS_SAN_POLICY {
 520    VDS_SP_UNKNOWN          = 0x0,
 521    VDS_SP_ONLINE           = 0x1,
 522    VDS_SP_OFFLINE_SHARED   = 0x2,
 523    VDS_SP_OFFLINE          = 0x3 
 524  } VDS_SAN_POLICY;
 525
 526  typedef enum _VDS_SERVICE_FLAG {
 527    VDS_SVF_SUPPORT_DYNAMIC              = 0x1,
 528    VDS_SVF_SUPPORT_FAULT_TOLERANT       = 0x2,
 529    VDS_SVF_SUPPORT_GPT                  = 0x4,
 530    VDS_SVF_SUPPORT_DYNAMIC_1394         = 0x8,
 531    VDS_SVF_CLUSTER_SERVICE_CONFIGURED   = 0x10,
 532    VDS_SVF_AUTO_MOUNT_OFF               = 0x20,
 533    VDS_SVF_OS_UNINSTALL_VALID           = 0x40,
 534    VDS_SVF_EFI                          = 0x80,
 535    VDS_SVF_SUPPORT_MIRROR               = 0x100,
 536    VDS_SVF_SUPPORT_RAID5                = 0x200 
 537  } VDS_SERVICE_FLAG;
 538
 539  typedef enum _VDS_STORAGE_IDENTIFIER_CODE_SET {
 540    VDSStorageIdCodeSetReserved = 0,
 541    VDSStorageIdCodeSetBinary = 1,
 542    VDSStorageIdCodeSetAscii = 2
 543  } VDS_STORAGE_IDENTIFIER_CODE_SET;
 544
 545  typedef enum VDS_STORAGE_IDENTIFIER_TYPE {
 546    VDSStorageIdTypeVendorSpecific = 0,
 547    VDSStorageIdTypeVendorId = 1,
 548    VDSStorageIdTypeEUI64 = 2,
 549    VDSStorageIdTypeFCPHName = 3,
 550    VDSStorageIdTypeSCSINameString = 8
 551  } VDS_STORAGE_IDENTIFIER_TYPE;
 552
 553  typedef enum _VDS_SUB_SYSTEM_FLAG {
 554    VDS_SF_LUN_MASKING_CAPABLE                = 0x1,
 555    VDS_SF_LUN_PLEXING_CAPABLE                = 0x2,
 556    VDS_SF_LUN_REMAPPING_CAPABLE              = 0x4,
 557    VDS_SF_DRIVE_EXTENT_CAPABLE               = 0x8,
 558    VDS_SF_HARDWARE_CHECKSUM_CAPABLE          = 0x10,
 559    VDS_SF_RADIUS_CAPABLE                     = 0x20,
 560    VDS_SF_READ_BACK_VERIFY_CAPABLE           = 0x40,
 561    VDS_SF_WRITE_THROUGH_CACHING_CAPABLE      = 0x80,
 562    VDS_SF_SUPPORTS_FAULT_TOLERANT_LUNS       = 0x200,
 563    VDS_SF_SUPPORTS_NON_FAULT_TOLERANT_LUNS   = 0x400,
 564    VDS_SF_SUPPORTS_SIMPLE_LUNS               = 0x800,
 565    VDS_SF_SUPPORTS_SPAN_LUNS                 = 0x1000,
 566    VDS_SF_SUPPORTS_STRIPE_LUNS               = 0x2000,
 567    VDS_SF_SUPPORTS_MIRROR_LUNS               = 0x4000,
 568    VDS_SF_SUPPORTS_PARITY_LUNS               = 0x8000,
 569    VDS_SF_SUPPORTS_AUTH_CHAP                 = 0x10000,
 570    VDS_SF_SUPPORTS_AUTH_MUTUAL_CHAP          = 0x20000,
 571    VDS_SF_SUPPORTS_SIMPLE_TARGET_CONFIG      = 0x40000,
 572    VDS_SF_SUPPORTS_LUN_NUMBER                = 0x80000,
 573    VDS_SF_SUPPORTS_MIRRORED_CACHE            = 0x100000,
 574    VDS_SF_READ_CACHING_CAPABLE               = 0x200000,
 575    VDS_SF_WRITE_CACHING_CAPABLE              = 0x400000,
 576    VDS_SF_MEDIA_SCAN_CAPABLE                 = 0x800000,
 577    VDS_SF_CONSISTENCY_CHECK_CAPABLE          = 0x1000000 
 578  } VDS_SUB_SYSTEM_FLAG;
 579
 580  typedef enum _VDS_SUB_SYSTEM_STATUS {
 581    VDS_SSS_UNKNOWN             = 0,
 582    VDS_SSS_ONLINE              = 1,
 583    VDS_SSS_NOT_READY           = 2,
 584    VDS_SSS_OFFLINE             = 4,
 585    VDS_SSS_FAILED              = 5,
 586    VDS_SSS_PARTIALLY_MANAGED   = 9 
 587  } VDS_SUB_SYSTEM_STATUS;
 588
 589  typedef enum _VDS_VERSION_SUPPORT_FLAG {
 590    VDS_VSF_1_0   = 0x1,
 591    VDS_VSF_1_1   = 0x2,
 592    VDS_VSF_2_0   = 0x4,
 593    VDS_VSF_2_1   = 0x8,
 594    VDS_VSF_3_0   = 0x10 
 595  } VDS_VERSION_SUPPORT_FLAG;
 596
 597  typedef enum _VDS_VOLUME_FLAG {
 598    VDS_VF_SYSTEM_VOLUME                  = 0x1,
 599    VDS_VF_BOOT_VOLUME                    = 0x2,
 600    VDS_VF_ACTIVE                         = 0x4,
 601    VDS_VF_READONLY                       = 0x8,
 602    VDS_VF_HIDDEN                         = 0x10,
 603    VDS_VF_CAN_EXTEND                     = 0x20,
 604    VDS_VF_CAN_SHRINK                     = 0x40,
 605    VDS_VF_PAGEFILE                       = 0x80,
 606    VDS_VF_HIBERNATION                    = 0x100,
 607    VDS_VF_CRASHDUMP                      = 0x200,
 608    VDS_VF_INSTALLABLE                    = 0x400,
 609    VDS_VF_LBN_REMAP_ENABLED              = 0x800,
 610    VDS_VF_FORMATTING                     = 0x1000,
 611    VDS_VF_NOT_FORMATTABLE                = 0x2000,
 612    VDS_VF_NTFS_NOT_SUPPORTED             = 0x4000,
 613    VDS_VF_FAT32_NOT_SUPPORTED            = 0x8000,
 614    VDS_VF_FAT_NOT_SUPPORTED              = 0x10000,
 615    VDS_VF_NO_DEFAULT_DRIVE_LETTER        = 0x20000,
 616    VDS_VF_PERMANENTLY_DISMOUNTED         = 0x40000,
 617    VDS_VF_PERMANENT_DISMOUNT_SUPPORTED   = 0x80000,
 618    VDS_VF_SHADOW_COPY                    = 0x100000,
 619    VDS_VF_FVE_ENABLED                    = 0x200000,
 620    VDS_VF_DIRTY                          = 0x400000 
 621  } VDS_VOLUME_FLAG;
 622
 623  typedef enum _VDS_VOLUME_PLEX_STATUS {
 624    VDS_VPS_UNKNOWN    = 0,
 625    VDS_VPS_ONLINE     = 1,
 626    VDS_VPS_NO_MEDIA   = 3,
 627    VDS_VPS_FAILED     = 5 
 628  } VDS_VOLUME_PLEX_STATUS;
 629
 630  typedef enum _VDS_VOLUME_PLEX_TYPE {
 631    VDS_VPT_UNKNOWN   = 0,
 632    VDS_VPT_SIMPLE    = 10,
 633    VDS_VPT_SPAN      = 11,
 634    VDS_VPT_STRIPE    = 12,
 635    VDS_VPT_PARITY    = 14 
 636  } VDS_VOLUME_PLEX_TYPE;
 637
 638  typedef enum _VDS_VOLUME_STATUS {
 639    VDS_VS_UNKNOWN    = 0,
 640    VDS_VS_ONLINE     = 1,
 641    VDS_VS_NO_MEDIA   = 3,
 642    VDS_VS_FAILED     = 5,
 643    VDS_VS_OFFLINE    = 4 
 644  } VDS_VOLUME_STATUS;
 645
 646  typedef enum _VDS_VOLUME_TYPE {
 647    VDS_VT_UNKNOWN   = 0,
 648    VDS_VT_SIMPLE    = 10,
 649    VDS_VT_SPAN      = 11,
 650    VDS_VT_STRIPE    = 12,
 651    VDS_VT_MIRROR    = 13,
 652    VDS_VT_PARITY    = 14 
 653  } VDS_VOLUME_TYPE;
 654
 655  typedef struct _VDS_PARTITION_INFO_GPT {
 656    GUID      partitionType;
 657    GUID      partitionId;
 658    ULONGLONG attributes;
 659    WCHAR     name[GPT_PARTITION_NAME_LENGTH];
 660  } VDS_PARTITION_INFO_GPT;
 661
 662  typedef struct _CHANGE_ATTRIBUTES_PARAMETERS {
 663    VDS_PARTITION_STYLE style;
 664    __C89_NAMELESS union {
 665      struct {
 666	BOOLEAN bootIndicator;
 667      } MbrPartInfo;
 668      struct {
 669	ULONGLONG attributes;
 670      } GptPartInfo;
 671    };
 672  } CHANGE_ATTRIBUTES_PARAMETERS;
 673
 674  typedef struct _CHANGE_PARTITION_TYPE_PARAMETERS {
 675    VDS_PARTITION_STYLE style;
 676    __C89_NAMELESS union {
 677      struct {
 678        BYTE partitionType;
 679      } MbrPartInfo;
 680      struct {
 681        GUID partitionType;
 682      } GptPartInfo;
 683    } ;
 684  } CHANGE_PARTITION_TYPE_PARAMETERS, *PCHANGE_PARTITION_TYPE_PARAMETERS;
 685
 686
 687  typedef struct _CREATE_PARTITION_PARAMETERS {
 688    VDS_PARTITION_STYLE style;
 689    __C89_NAMELESS union {
 690      struct {
 691	BYTE    partitionType;
 692	BOOLEAN bootIndicator;
 693      } MbrPartInfo;
 694      struct {
 695	GUID      partitionType;
 696	GUID      partitionId;
 697	ULONGLONG attributes;
 698	WCHAR     name[GPT_PARTITION_NAME_LENGTH];
 699      } GptPartInfo;
 700    };
 701  } CREATE_PARTITION_PARAMETERS;
 702
 703  typedef struct _VDS_ASYNC_OUTPUT {
 704    VDS_ASYNC_OUTPUT_TYPE type;
 705    /*[switch(type)] */__C89_NAMELESS union {
 706      /*[case(VDS_ASYNCOUT_CREATEPARTITION)]*/
 707      struct {
 708	ULONGLONG     ullOffset;
 709	VDS_OBJECT_ID volumeId;
 710      } cp;
 711      /*[case(VDS_ASYNCOUT_CREATEVOLUME)]*/
 712      struct {
 713	IUnknown *pVolumeUnk;
 714      } cv;
 715      /*[case(VDS_ASYNCOUT_BREAKVOLUMEPLEX)]*/
 716      struct {
 717	IUnknown *pVolumeUnk;
 718      } bvp;
 719      /*[case(VDS_ASYNCOUT_CREATELUN)]*/
 720      struct {
 721	IUnknown *pLunUnk;
 722      } cl;
 723      /*[case(VDS_ASYNCOUT_CREATETARGET)]*/
 724      struct {
 725	IUnknown *pTargetUnk;
 726      } ct;
 727      /*[case(VDS_ASYNCOUT_CREATEPORTALGROUP)]*/
 728      struct {
 729	IUnknown *pPortalGroupUnk;
 730      } cpg;
 731      /*[case(VDS_ASYNCOUT_CREATE_VDISK)]*/
 732      struct {
 733	IUnknown *pVDiskUnk;
 734      } cvd;
 735    };
 736  }  VDS_ASYNC_OUTPUT;
 737
 738#define VDS_NF_CONTROLLER_ARRIVE 103
 739#define VDS_NF_CONTROLLER_DEPART 104
 740#define VDS_NF_CONTROLLER_MODIFY 350
 741#define VDS_NF_CONTROLLER_REMOVED 351
 742
 743  typedef struct _VDS_CONTROLLER_NOTIFICATION {
 744    ULONG         ulEvent;
 745    VDS_OBJECT_ID controllerId;
 746  } VDS_CONTROLLER_NOTIFICATION;
 747
 748  typedef struct _VDS_CONTROLLER_PROP {
 749    VDS_OBJECT_ID         id;
 750    LPWSTR                pwszFriendlyName;
 751    LPWSTR                pwszIdentification;
 752    VDS_CONTROLLER_STATUS status;
 753    VDS_HEALTH            health;
 754    SHORT                 sNumberOfPorts;
 755  } VDS_CONTROLLER_PROP;
 756
 757  typedef struct _VDS_DISK_EXTENT {
 758    VDS_OBJECT_ID        diskId;
 759    VDS_DISK_EXTENT_TYPE type;
 760    ULONGLONG            ullOffset;
 761    ULONGLONG            ullSize;
 762    VDS_OBJECT_ID        volumeId;
 763    VDS_OBJECT_ID        plexId;
 764    ULONG                memberIdx;
 765  } VDS_DISK_EXTENT, *PVDS_DISK_EXTENT;
 766
 767  typedef struct _VDS_DISK_NOTIFICATION {
 768    ULONG         ulEvent;
 769    VDS_OBJECT_ID diskId;
 770  } VDS_DISK_NOTIFICATION;
 771
 772  typedef struct _VDS_PACK_NOTIFICATION {
 773    ULONG         ulEvent;
 774    VDS_OBJECT_ID packId;
 775  } VDS_PACK_NOTIFICATION;
 776
 777  typedef struct _VDS_VOLUME_NOTIFICATION {
 778    ULONG         ulEvent;
 779    VDS_OBJECT_ID volumeId;
 780    VDS_OBJECT_ID plexId;
 781    ULONG         ulPercentCompleted;
 782  } VDS_VOLUME_NOTIFICATION;
 783
 784  typedef struct _VDS_PARTITION_NOTIFICATION {
 785    ULONG         ulEvent;
 786    VDS_OBJECT_ID diskId;
 787    ULONGLONG     ullOffset;
 788  } VDS_PARTITION_NOTIFICATION;
 789
 790  typedef struct _VDS_DRIVE_LETTER_NOTIFICATION {
 791    ULONG         ulEvent;
 792    WCHAR         wcLetter;
 793    VDS_OBJECT_ID volumeId;
 794  } VDS_DRIVE_LETTER_NOTIFICATION;
 795
 796  typedef struct _VDS_FILE_SYSTEM_NOTIFICATION {
 797    ULONG         ulEvent;
 798    VDS_OBJECT_ID volumeId;
 799    DWORD         dwPercentCompleted;
 800  } VDS_FILE_SYSTEM_NOTIFICATION;
 801
 802  typedef struct _VDS_MOUNT_POINT_NOTIFICATION {
 803    ULONG         ulEvent;
 804    VDS_OBJECT_ID volumeId;
 805  } VDS_MOUNT_POINT_NOTIFICATION;
 806
 807  typedef struct _VDS_SUB_SYSTEM_NOTIFICATION {
 808    ULONG         ulEvent;
 809    VDS_OBJECT_ID subSystemId;
 810  } VDS_SUB_SYSTEM_NOTIFICATION;
 811
 812  typedef struct _VDS_DRIVE_NOTIFICATION {
 813    ULONG         ulEvent;
 814    VDS_OBJECT_ID driveId;
 815  } VDS_DRIVE_NOTIFICATION;
 816
 817  typedef struct _VDS_LUN_NOTIFICATION {
 818    ULONG         ulEvent;
 819    VDS_OBJECT_ID LunId;
 820  } VDS_LUN_NOTIFICATION;
 821
 822  typedef struct _VDS_PORT_NOTIFICATION {
 823    ULONG         ulEvent;
 824    VDS_OBJECT_ID portId;
 825  } VDS_PORT_NOTIFICATION;
 826
 827  typedef struct _VDS_PORTAL_NOTIFICATION {
 828    ULONG         ulEvent;
 829    VDS_OBJECT_ID portalId;
 830  } VDS_PORTAL_NOTIFICATION;
 831
 832  typedef struct _VDS_TARGET_NOTIFICATION {
 833    ULONG         ulEvent;
 834    VDS_OBJECT_ID targetId;
 835  } VDS_TARGET_NOTIFICATION;
 836
 837  typedef struct _VDS_PORTAL_GROUP_NOTIFICATION {
 838    ULONG         ulEvent;
 839    VDS_OBJECT_ID portalGroupId;
 840  } VDS_PORTAL_GROUP_NOTIFICATION;
 841
 842  typedef struct _VDS_NOTIFICATION {
 843    VDS_NOTIFICATION_TARGET_TYPE objectType;
 844    __C89_NAMELESS union {
 845      VDS_PACK_NOTIFICATION         Pack;
 846      VDS_DISK_NOTIFICATION         Disk;
 847      VDS_VOLUME_NOTIFICATION       Volume;
 848      VDS_PARTITION_NOTIFICATION    Partition;
 849      VDS_DRIVE_LETTER_NOTIFICATION Letter;
 850      VDS_FILE_SYSTEM_NOTIFICATION  FileSystem;
 851      VDS_MOUNT_POINT_NOTIFICATION  MountPoint;
 852      VDS_SUB_SYSTEM_NOTIFICATION   SubSystem;
 853      VDS_CONTROLLER_NOTIFICATION   Controller;
 854      VDS_DRIVE_NOTIFICATION        Drive;
 855      VDS_LUN_NOTIFICATION          Lun;
 856      VDS_PORT_NOTIFICATION         Port;
 857      VDS_PORTAL_NOTIFICATION       Portal;
 858      VDS_TARGET_NOTIFICATION       Target;
 859      VDS_PORTAL_GROUP_NOTIFICATION PortalGroup;
 860    };
 861  } VDS_NOTIFICATION;
 862
 863  typedef enum _VDS_LUN_RESERVE_MODE {
 864    VDS_LRM_NONE = 0x00000000,
 865    VDS_LRM_EXCLUSIVE_RW = 0x00000001,
 866    VDS_LRM_EXCLUSIVE_RO = 0x00000002,
 867    VDS_LRM_SHARED_RO = 0x00000003,
 868    VDS_LRM_SHARED_RW = 0x00000004
 869  } VDS_LUN_RESERVE_MODE;
 870
 871  typedef struct _VDS_DISK_PROP {
 872    VDS_OBJECT_ID        id;
 873    VDS_DISK_STATUS      status;
 874    VDS_LUN_RESERVE_MODE ReserveMode;
 875    VDS_HEALTH           health;
 876    DWORD                dwDeviceType;
 877    DWORD                dwMediaType;
 878    ULONGLONG            ullSize;
 879    ULONG                ulBytesPerSector;
 880    ULONG                ulSectorsPerTrack;
 881    ULONG                ulTracksPerCylinder;
 882    ULONG                ulFlags;
 883    VDS_STORAGE_BUS_TYPE BusType;
 884    VDS_PARTITION_STYLE  PartitionStyle;
 885    __C89_NAMELESS union {
 886      DWORD dwSignature;
 887      GUID  DiskGuid;
 888    };
 889    LPWSTR               pwszDiskAddress;
 890    LPWSTR               pwszName;
 891    LPWSTR               pwszFriendlyName;
 892    LPWSTR               pwszAdaptorName;
 893    LPWSTR               pwszDevicePath;
 894  } VDS_DISK_PROP, *PVDS_DISK_PROP;
 895
 896  typedef struct _VDS_DRIVE_EXTENT {
 897    VDS_OBJECT_ID id;
 898    VDS_OBJECT_ID LunId;
 899    ULONGLONG     ullSize;
 900    WINBOOL       bUsed;
 901  } VDS_DRIVE_EXTENT;
 902
 903#define VDS_NF_DRIVE_LETTER_FREE 201
 904#define VDS_NF_DRIVE_LETTER_ASSIGN 202
 905
 906  typedef struct _VDS_DRIVE_LETTER_PROP {
 907    WCHAR         wcLetter;
 908    VDS_OBJECT_ID volumeId;
 909    ULONG         ulFlags;
 910    WINBOOL       bUsed;
 911  } VDS_DRIVE_LETTER_PROP, *PVDS_DRIVE_LETTER_PROP;
 912
 913#define VDS_NF_DRIVE_ARRIVE 105
 914#define VDS_NF_DRIVE_DEPART 106
 915#define VDS_NF_DRIVE_MODIFY 107
 916#define VDS_NF_DRIVE_REMOVED 354
 917
 918  typedef struct _VDS_DRIVE_PROP {
 919    VDS_OBJECT_ID    id;
 920    ULONGLONG        ullSize;
 921    LPWSTR           pwszFriendlyName;
 922    LPWSTR           pwszIdentification;
 923    ULONG            ulFlags;
 924    VDS_DRIVE_STATUS status;
 925    VDS_HEALTH       health;
 926    SHORT            sInternalBusNumber;
 927    SHORT            sSlotNumber;
 928  } VDS_DRIVE_PROP;
 929
 930  typedef struct _VDS_FILE_SYSTEM_FORMAT_SUPPORT_PROP {
 931    ULONG  ulFlags;
 932    USHORT usRevision;
 933    ULONG  ulDefaultUnitAllocationSize;
 934    ULONG  rgulAllowedUnitAllocationSizes;
 935    WCHAR  wszName;
 936  } VDS_FILE_SYSTEM_FORMAT_SUPPORT_PROP, *PVDS_FILE_SYSTEM_FORMAT_SUPPORT_PROP;
 937
 938#define VDS_NF_FILE_SYSTEM_MODIFY 203
 939#define VDS_NF_FILE_SYSTEM_FORMAT_PROGRESS 204
 940
 941  typedef struct _VDS_FILE_SYSTEM_PROP {
 942    VDS_FILE_SYSTEM_TYPE type;
 943    VDS_OBJECT_ID        volumeId;
 944    ULONG                ulFlags;
 945    ULONGLONG            ullTotalAllocationUnits;
 946    ULONGLONG            ullAvailableAllocationUnits;
 947    ULONG                ulAllocationUnitSize;
 948    LPWSTR               pwszLabel;
 949  } VDS_FILE_SYSTEM_PROP, *PVDS_FILE_SYSTEM_PROP;
 950
 951#define MAX_FS_NAME_SIZE 8
 952
 953  typedef struct _VDS_FILE_SYSTEM_TYPE_PROP {
 954    VDS_FILE_SYSTEM_TYPE type;
 955    WCHAR                wszName[MAX_FS_NAME_SIZE];
 956    ULONG                ulFlags;
 957    ULONG                ulCompressionFlags;
 958    ULONG                ulMaxLableLength;
 959    LPWSTR               pwszIllegalLabelCharSet;
 960  } VDS_FILE_SYSTEM_TYPE_PROP, *PVDS_FILE_SYSTEM_TYPE_PROP;
 961
 962  typedef struct _VDS_WWN {
 963    UCHAR rguchWwn[8];
 964  } VDS_WWN;
 965
 966  typedef struct _VDS_HBAPORT_PROP {
 967    VDS_OBJECT_ID      id;
 968    VDS_WWN            wwnNode;
 969    VDS_WWN            wwnPort;
 970    VDS_HBAPORT_TYPE   type;
 971    VDS_HBAPORT_STATUS status;
 972    ULONG              ulPortSpeed;
 973    ULONG              ulSupportedPortSpeed;
 974  } VDS_HBAPORT_PROP;
 975
 976#define VDS_HINT_FASTCRASHRECOVERYREQUIRED   0x0000000000000001ULL
 977#define VDS_HINT_MOSTLYREADS                 0x0000000000000002ULL
 978#define VDS_HINT_OPTIMIZEFORSEQUENTIALREADS  0x0000000000000004ULL
 979#define VDS_HINT_OPTIMIZEFORSEQUENTIALWRITES 0x0000000000000008ULL
 980#define VDS_HINT_READBACKVERIFYENABLED       0x0000000000000010ULL
 981#define VDS_HINT_REMAPENABLED                0x0000000000000020ULL
 982#define VDS_HINT_WRITETHROUGHCACHINGENABLED  0x0000000000000040ULL
 983#define VDS_HINT_HARDWARECHECKSUMENABLED     0x0000000000000080ULL
 984#define VDS_HINT_ISYANKABLE                  0x0000000000000100ULL
 985#define VDS_HINT_ALLOCATEHOTSPARE            0x0000000000000200ULL
 986#define VDS_HINT_BUSTYPE                     0x0000000000000400ULL
 987#define VDS_HINT_USEMIRROREDCACHE            0x0000000000000800ULL
 988#define VDS_HINT_READCACHINGENABLED          0x0000000000001000ULL
 989#define VDS_HINT_WRITECACHINGENABLED         0x0000000000002000ULL
 990#define VDS_HINT_MEDIASCANENABLED            0x0000000000004000ULL
 991#define VDS_HINT_CONSISTENCYCHECKENABLED     0x0000000000008000ULL
 992
 993  typedef struct _VDS_HINTS {
 994    ULONGLONG ullHintMask;
 995    ULONGLONG ullExpectedMaximumSize;
 996    ULONG     ulOptimalReadSize;
 997    ULONG     ulOptimalReadAlignment;
 998    ULONG     ulOptimalWriteSize;
 999    ULONG     ulOptimalWriteAlignment;
1000    ULONG     ulMaximumDriveCount;
1001    ULONG     ulStripeSize;
1002    WINBOOL   bFastCrashRecoveryRequired;
1003    WINBOOL   bMostlyReads;
1004    WINBOOL   bOptimizeForSequentialReads;
1005    WINBOOL   bOptimizeForSequentialWrites;
1006    WINBOOL   bRemapEnabled;
1007    WINBOOL   bReadBackVerifyEnabled;
1008    WINBOOL   bWriteThroughCachingEnabled;
1009    WINBOOL   bHardwareChecksumEnabled;
1010    WINBOOL   bIsYankable;
1011    SHORT     sRebuildPriority;
1012  } VDS_HINTS, *PVDS_HINTS;
1013
1014  typedef struct _VDS_INPUT_DISK {
1015    VDS_OBJECT_ID diskId;
1016    ULONGLONG     ullSize;
1017    VDS_OBJECT_ID plexId;
1018    ULONG         memberIdx;
1019  } VDS_INPUT_DISK;
1020
1021  typedef struct _VDS_IPADDRESS {
1022    VDS_IPADDRESS_TYPE type;
1023    ULONG              ipv4Address;
1024    UCHAR              ipv6Address[16];
1025    ULONG              ulIpv6FlowInfo;
1026    ULONG              ulIpv6ScopeId;
1027    WCHAR              wszTextAddress[256 + 1];
1028    ULONG              ulPort;
1029  } VDS_IPADDRESS;
1030
1031  typedef struct _VDS_ISCSI_INITIATOR_ADAPTER_PROP {
1032    VDS_OBJECT_ID id;
1033    LPWSTR        pwszName;
1034  } VDS_ISCSI_INITIATOR_ADAPTER_PROP;
1035
1036  typedef struct _VDS_ISCSI_INITIATOR_PORTAL_PROP {
1037    VDS_OBJECT_ID id;
1038    VDS_IPADDRESS address;
1039    ULONG         ulPortIndex;
1040  } VDS_ISCSI_INITIATOR_PORTAL_PROP;
1041
1042  typedef struct _VDS_ISCSI_PORTAL_PROP {
1043    VDS_OBJECT_ID           id;
1044    VDS_IPADDRESS           address;
1045    VDS_ISCSI_PORTAL_STATUS status;
1046  } VDS_ISCSI_PORTAL_PROP;
1047
1048  typedef USHORT VDS_ISCSI_PORTALGROUP_TAG;
1049
1050  typedef struct _VDS_ISCSI_PORTALGROUP_PROP {
1051    VDS_OBJECT_ID             id;
1052    VDS_ISCSI_PORTALGROUP_TAG tag;
1053  } VDS_ISCSI_PORTALGROUP_PROP;
1054
1055  typedef struct _VDS_ISCSI_SHARED_SECRET {
1056    UCHAR *pSharedSecret;
1057    ULONG ulSharedSecretSize;
1058  } VDS_ISCSI_SHARED_SECRET;
1059
1060  typedef struct _VDS_ISCSI_TARGET_PROP {
1061    VDS_OBJECT_ID id;
1062    LPWSTR        pwszIscsiName;
1063    LPWSTR        pwszFriendlyName;
1064    WINBOOL       bChapEnabled;
1065  } VDS_ISCSI_TARGET_PROP;
1066
1067  typedef struct _VDS_STORAGE_IDENTIFIER {
1068    VDS_STORAGE_IDENTIFIER_CODE_SET m_CodeSet;
1069    VDS_STORAGE_IDENTIFIER_TYPE m_Type;
1070    ULONG m_cbIdentifier;
1071    BYTE* m_rgbIdentifier;
1072  } VDS_STORAGE_IDENTIFIER;
1073
1074  typedef struct _VDS_STORAGE_DEVICE_ID_DESCRIPTOR {
1075    ULONG m_version;
1076    ULONG m_cIdentifiers;
1077    VDS_STORAGE_IDENTIFIER* m_rgIdentifiers;
1078  } VDS_STORAGE_DEVICE_ID_DESCRIPTOR;
1079
1080#define VDS_NF_LUN_ARRIVE 108
1081#define VDS_NF_LUN_DEPART 109
1082#define VDS_NF_LUN_MODIFY 110
1083
1084  typedef struct _VDS_LUN_PLEX_PROP {
1085    VDS_OBJECT_ID        id;
1086    ULONGLONG            ullSize;
1087    VDS_LUN_PLEX_TYPE    type;
1088    VDS_LUN_PLEX_STATUS  status;
1089    VDS_HEALTH           health;
1090    VDS_TRANSITION_STATE TransitionState;
1091    ULONG                ulFlags;
1092    ULONG                ulStripeSize;
1093    SHORT                sRebuildPriority;
1094  } VDS_LUN_PLEX_PROP;
1095
1096  typedef struct _VDS_LUN_PROP {
1097    VDS_OBJECT_ID        id;
1098    ULONGLONG            ullSize;
1099    LPWSTR               pwszFriendlyName;
1100    LPWSTR               pwszIdentification;
1101    LPWSTR               pwszUnmaskingList;
1102    ULONG                ulFlags;
1103    VDS_LUN_TYPE         type;
1104    VDS_LUN_STATUS       status;
1105    VDS_HEALTH           health;
1106    VDS_TRANSITION_STATE TransitionState;
1107    SHORT                sRebuildPriority;
1108  } VDS_LUN_PROP, *PVDS_LUN_PROP;
1109
1110#define VDS_NF_MOUNT_POINTS_CHANGE 205
1111
1112#define VDS_NF_PACK_ARRIVE 1
1113#define VDS_NF_PACK_DEPART 2
1114#define VDS_NF_PACK_MODIFY 3
1115
1116  typedef struct _VDS_PACK_PROP {
1117    VDS_OBJECT_ID   id;
1118    LPWSTR          pwszName;
1119    VDS_PACK_STATUS status;
1120    ULONG           ulFlags;
1121  } VDS_PACK_PROP, *PVDS_PACK_PROP;
1122
1123  typedef struct _VDS_PARTITION_INFO_MBR {
1124    BYTE    partitionType;
1125    BOOLEAN bootIndicator;
1126    BOOLEAN recognizedPartition;
1127    DWORD   hiddenSectors;
1128  } VDS_PARTITION_INFO_MBR;
1129
1130#define VDS_NF_PARTITION_ARRIVE 11
1131#define VDS_NF_PARTITION_DEPART 12
1132#define VDS_NF_PARTITION_MODIFY 13
1133
1134  typedef struct _VDS_PARTITION_PROP {
1135    VDS_PARTITION_STYLE PartitionStyle;
1136    ULONG               ulFlags;
1137    ULONG               ulPartitionNumber;
1138    ULONGLONG           ullOffset;
1139    ULONGLONG           ullSize;
1140    __C89_NAMELESS union {
1141      VDS_PARTITION_INFO_MBR Mbr;
1142      VDS_PARTITION_INFO_GPT Gpt;
1143    };
1144  } VDS_PARTITION_PROP;
1145
1146  typedef struct _VDS_PATH_INFO {
1147    VDS_PATH_ID         pathId;
1148    VDS_HWPROVIDER_TYPE type;
1149    VDS_PATH_STATUS     status;
1150    __C89_NAMELESS union {
1151      VDS_OBJECT_ID controllerPortId;
1152      VDS_OBJECT_ID targetPortalId;
1153    };
1154    __C89_NAMELESS union {
1155      VDS_OBJECT_ID hbaPortId;
1156      VDS_OBJECT_ID initiatorAdapterId;
1157    };
1158    __C89_NAMELESS union {
1159      VDS_HBAPORT_PROP *pHbaPortProp;
1160      VDS_IPADDRESS    *pInitiatorPortalIpAddr;
1161    };
1162  } VDS_PATH_INFO;
1163
1164  typedef struct _VDS_PATH_POLICY {
1165    VDS_PATH_ID pathId;
1166    BOOL        bPrimaryPath;
1167    ULONG       ulWeight;
1168  } VDS_PATH_POLICY;
1169
1170#define VDS_NF_PORT_ARRIVE 121
1171#define VDS_NF_PORT_DEPART 122
1172#define VDS_NF_PORT_MODIFY 352
1173#define VDS_NF_PORT_REMOVED 353
1174
1175  typedef struct _VDS_PORT_PROP {
1176    VDS_OBJECT_ID   id;
1177    LPWSTR          pwszFriendlyName;
1178    LPWSTR          pwszIdentification;
1179    VDS_PORT_STATUS status;
1180  } VDS_PORT_PROP;
1181
1182#define VDS_NF_PORTAL_GROUP_ARRIVE 129
1183#define VDS_NF_PORTAL_GROUP_DEPART 130
1184#define VDS_NF_PORTAL_GROUP_MODIFY 131
1185#define VDS_NF_PORTAL_ARRIVE 123
1186#define VDS_NF_PORTAL_DEPART 124
1187#define VDS_NF_PORTAL_MODIFY 125
1188
1189  typedef struct _VDS_PROVIDER_PROP {
1190    VDS_OBJECT_ID     id;
1191    LPWSTR            pwszName;
1192    GUID              guidVersionId;
1193    LPWSTR            pwszVersion;
1194    VDS_PROVIDER_TYPE type;
1195    ULONG             ulFlags;
1196    ULONG             ulStripeSizeFlags;
1197    SHORT             sRebuildPriority;
1198  } VDS_PROVIDER_PROP;
1199
1200  typedef struct VDS_REPARSE_POINT_PROP {
1201    VDS_OBJECT_ID SourceVolumeId;
1202    LPWSTR        pwszPath;
1203  } VDS_REPARSE_POINT_PROP, *PVDS_REPARSE_POINT_PROP;
1204
1205  typedef struct _VDS_SERVICE_PROP {
1206    LPWSTR pwszVersion;
1207    ULONG  ulFlags;
1208  } VDS_SERVICE_PROP;
1209
1210#define VDS_NF_SUB_SYSTEM_ARRIVE 101
1211#define VDS_NF_SUB_SYSTEM_DEPART 102
1212#define VDS_NF_SUB_SYSTEM_MODIFY 151
1213
1214  typedef struct _VDS_SUB_SYSTEM_PROP {
1215    VDS_OBJECT_ID         id;
1216    LPWSTR                pwszFriendlyName;
1217    LPWSTR                pwszIdentification;
1218    ULONG                 ulFlags;
1219    ULONG                 ulStripeSizeFlags;
1220    VDS_SUB_SYSTEM_STATUS status;
1221    VDS_HEALTH            health;
1222    SHORT                 sNumberOfInternalBuses;
1223    SHORT                 sMaxNumberOfSlotsEachBus;
1224    SHORT                 sMaxNumberOfControllers;
1225    SHORT                 sRebuildPriority;
1226  } VDS_SUB_SYSTEM_PROP;
1227
1228#define VDS_NF_TARGET_ARRIVE 126
1229#define VDS_NF_TARGET_DEPART 127
1230#define VDS_NF_TARGET_MODIFY 128
1231#define VDS_NF_VOLUME_ARRIVE 4
1232#define VDS_NF_VOLUME_DEPART 5
1233#define VDS_NF_VOLUME_MODIFY 6
1234#define VDS_NF_VOLUME_REBUILDING 7
1235
1236  typedef struct _VDS_VOLUME_PLEX_PROP {
1237    VDS_OBJECT_ID          id;
1238    VDS_VOLUME_PLEX_TYPE   type;
1239    VDS_VOLUME_PLEX_STATUS status;
1240    VDS_HEALTH             health;
1241    VDS_TRANSITION_STATE   TransitionState;
1242    ULONGLONG              ullSize;
1243    ULONG                  ulStripeSize;
1244    ULONG                  ulNumberOfMembers;
1245  } VDS_VOLUME_PLEX_PROP, *PVDS_VOLUME_PLEX_PROP;
1246
1247  typedef struct _VDS_VOLUME_PROP {
1248    VDS_OBJECT_ID        id;
1249    VDS_VOLUME_TYPE      type;
1250    VDS_VOLUME_STATUS    status;
1251    VDS_HEALTH           health;
1252    VDS_TRANSITION_STATE TransitionState;
1253    ULONGLONG            ullSize;
1254    ULONG                ulFlags;
1255    VDS_FILE_SYSTEM_TYPE RecommendedFileSystemType;
1256    LPWSTR               pwszName;
1257  } VDS_VOLUME_PROP, *PVDS_VOLUME_PROP;
1258
1259#ifdef __cplusplus
1260}
1261#endif
1262
1263#endif /*(_WIN32_WINNT >= 0x0600)*/
1264
1265#include <vdslun.h>
1266
1267#if (_WIN32_WINNT >= 0x0601)
1268#ifdef __cplusplus
1269extern "C" {
1270#endif
1271typedef enum _VDS_DISK_OFFLINE_REASON {
1272  VDSDiskOfflineReasonNone            = 0,
1273  VDSDiskOfflineReasonPolicy          = 1,
1274  VDSDiskOfflineReasonRedundantPath   = 2,
1275  VDSDiskOfflineReasonSnapshot        = 3,
1276  VDSDiskOfflineReasonCollision       = 4 
1277} VDS_DISK_OFFLINE_REASON;
1278
1279typedef enum _VDS_STORAGE_POOL_STATUS {
1280  VDS_SPS_UNKNOWN     = 0,
1281  VDS_SPS_ONLINE      = 1,
1282  VDS_SPS_NOT_READY   = 2,
1283  VDS_SPS_OFFLINE     = 4 
1284} VDS_STORAGE_POOL_STATUS;
1285
1286typedef enum _VDS_SUB_SYSTEM_SUPPORTED_RAID_TYPE_FLAG {
1287  VDS_SF_SUPPORTS_RAID2_LUNS    = 0x1,
1288  VDS_SF_SUPPORTS_RAID3_LUNS    = 0x2,
1289  VDS_SF_SUPPORTS_RAID4_LUNS    = 0x4,
1290  VDS_SF_SUPPORTS_RAID5_LUNS    = 0x8,
1291  VDS_SF_SUPPORTS_RAID6_LUNS    = 0x10,
1292  VDS_SF_SUPPORTS_RAID01_LUNS   = 0x20,
1293  VDS_SF_SUPPORTS_RAID03_LUNS   = 0x40,
1294  VDS_SF_SUPPORTS_RAID05_LUNS   = 0x80,
1295  VDS_SF_SUPPORTS_RAID10_LUNS   = 0x100,
1296  VDS_SF_SUPPORTS_RAID15_LUNS   = 0x200,
1297  VDS_SF_SUPPORTS_RAID30_LUNS   = 0x400,
1298  VDS_SF_SUPPORTS_RAID50_LUNS   = 0x800,
1299  VDS_SF_SUPPORTS_RAID51_LUNS   = 0x1000,
1300  VDS_SF_SUPPORTS_RAID53_LUNS   = 0x2000,
1301  VDS_SF_SUPPORTS_RAID60_LUNS   = 0x4000,
1302  VDS_SF_SUPPORTS_RAID61_LUNS   = 0x8000 
1303} VDS_SUB_SYSTEM_SUPPORTED_RAID_TYPE_FLAG;
1304
1305typedef enum VDS_FORMAT_OPTION_FLAGS {
1306  VDS_FSOF_NONE                 = 0x00000000,
1307  VDS_FSOF_FORCE                = 0x00000001,
1308  VDS_FSOF_QUICK                = 0x00000002,
1309  VDS_FSOF_COMPRESSION          = 0x00000004,
1310  VDS_FSOF_DUPLICATE_METADATA   = 0x00000008 
1311} VDS_FORMAT_OPTION_FLAGS;
1312
1313typedef enum _VDS_INTERCONNECT_FLAG {
1314  VDS_ITF_PCI_RAID        = 0x1,
1315  VDS_ITF_FIBRE_CHANNEL   = 0x2,
1316  VDS_ITF_ISCSI           = 0x4,
1317  VDS_ITF_SAS             = 0x8 
1318} VDS_INTERCONNECT_FLAG;
1319
1320typedef enum _VDS_RAID_TYPE {
1321  VDS_RT_UNKNOWN   = 0,
1322  VDS_RT_RAID0     = 10,
1323  VDS_RT_RAID1     = 11,
1324  VDS_RT_RAID2     = 12,
1325  VDS_RT_RAID3     = 13,
1326  VDS_RT_RAID4     = 14,
1327  VDS_RT_RAID5     = 15,
1328  VDS_RT_RAID6     = 16,
1329  VDS_RT_RAID01    = 17,
1330  VDS_RT_RAID03    = 18,
1331  VDS_RT_RAID05    = 19,
1332  VDS_RT_RAID10    = 20,
1333  VDS_RT_RAID15    = 21,
1334  VDS_RT_RAID30    = 22,
1335  VDS_RT_RAID50    = 23,
1336  VDS_RT_RAID51    = 24,
1337  VDS_RT_RAID53    = 25,
1338  VDS_RT_RAID60    = 26,
1339  VDS_RT_RAID61    = 27 
1340} VDS_RAID_TYPE;
1341
1342typedef enum _VDS_STORAGE_POOL_TYPE {
1343  VDS_SPT_UNKNOWN      = 0,
1344  VDS_SPT_PRIMORDIAL   = 0x1,
1345  VDS_SPT_CONCRETE     = 0x2 
1346} VDS_STORAGE_POOL_TYPE;
1347
1348typedef enum _VDS_VDISK_STATE {
1349  VDS_VST_UNKNOWN             = 0,
1350  VDS_VST_ADDED               = 1,
1351  VDS_VST_OPEN                = 2,
1352  VDS_VST_ATTACH_PENDING      = 3,
1353  VDS_VST_ATTACHED_NOT_OPEN   = 4,
1354  VDS_VST_ATTACHED            = 5,
1355  VDS_VST_DETACH_PENDING      = 6,
1356  VDS_VST_COMPACTING          = 7,
1357  VDS_VST_MERGING             = 8,
1358  VDS_VST_EXPANDING           = 9,
1359  VDS_VST_DELETED             = 10,
1360  VDS_VST_MAX                 = 11 
1361} VDS_VDISK_STATE;
1362
1363typedef struct _VDS_CREATE_VDISK_PARAMETERS {
1364  GUID      UniqueId;
1365  ULONGLONG MaximumSize;
1366  ULONG     BlockSizeInBytes;
1367  ULONG     SectorSizeInBytes;
1368  LPWSTR    pParentPath;
1369  LPWSTR    pSourcePath;
1370} VDS_CREATE_VDISK_PARAMETERS, *PVDS_CREATE_VDISK_PARAMETERS;
1371
1372typedef struct _VDS_DISK_FREE_EXTENT {
1373  VDS_OBJECT_ID diskId;
1374  ULONGLONG     ullOffset;
1375  ULONGLONG     ullSize;
1376} VDS_DISK_FREE_EXTENT, *PVDS_DISK_FREE_EXTENT;
1377
1378typedef struct _VDS_DISK_PROP2 {
1379  VDS_OBJECT_ID           id;
1380  VDS_DISK_STATUS         status;
1381  VDS_DISK_OFFLINE_REASON OfflineReason;
1382  VDS_LUN_RESERVE_MODE    ReserveMode;
1383  VDS_HEALTH              health;
1384  DWORD                   dwDeviceType;
1385  DWORD                   dwMediaType;
1386  ULONGLONG               ullSize;
1387  ULONG                   ulBytesPerSector;
1388  ULONG                   ulSectorsPerTrack;
1389  ULONG                   ulTracksPerCylinder;
1390  ULONG                   ulFlags;
1391  VDS_STORAGE_BUS_TYPE    BusType;
1392  VDS_PARTITION_STYLE     PartitionStyle;
1393  __C89_NAMELESS union {
1394    DWORD dwSignature;
1395    GUID  DiskGuid;
1396  };
1397  LPWSTR                  pwszDiskAddress;
1398  LPWSTR                  pwszName;
1399  LPWSTR                  pwszFriendlyName;
1400  LPWSTR                  pwszAdaptorName;
1401  LPWSTR                  pwszDevicePath;
1402  LPWSTR                  pwszLocationPath;
1403} VDS_DISK_PROP2, *PVDS_DISK_PROP2;
1404
1405typedef struct _VDS_DRIVE_PROP2 {
1406  VDS_OBJECT_ID        id;
1407  ULONGLONG            ullSize;
1408  LPWSTR               pwszFriendlyName;
1409  LPWSTR               pwszIdentification;
1410  ULONG                ulFlags;
1411  VDS_DRIVE_STATUS     status;
1412  VDS_HEALTH           health;
1413  SHORT                sInternalBusNumber;
1414  SHORT                sSlotNumber;
1415  ULONG                ulEnclosureNumber;
1416  VDS_STORAGE_BUS_TYPE busType;
1417  ULONG                ulSpindleSpeed;
1418} VDS_DRIVE_PROP2, *PVDS_DRIVE_PROP2;
1419
1420typedef struct _VDS_HINTS2 {
1421  ULONGLONG            ullHintMask;
1422  ULONGLONG            ullExpectedMaximumSize;
1423  ULONG                ulOptimalReadSize;
1424  ULONG                ulOptimalReadAlignment;
1425  ULONG                ulOptimalWriteSize;
1426  ULONG                ulOptimalWriteAlignment;
1427  ULONG                ulMaximumDriveCount;
1428  ULONG                ulStripeSize;
1429  ULONG                ulReserved1;
1430  ULONG                ulReserved2;
1431  ULONG                ulReserved3;
1432  WINBOOL              bFastCrashRecoveryRequired;
1433  WINBOOL              bMostlyReads;
1434  WINBOOL              bOptimizeForSequentialReads;
1435  WINBOOL              bOptimizeForSequentialWrites;
1436  WINBOOL              bRemapEnabled;
1437  WINBOOL              bReadBackVerifyEnabled;
1438  WINBOOL              bWriteThroughCachingEnabled;
1439  WINBOOL              bHardwareChecksumEnabled;
1440  WINBOOL              bIsYankable;
1441  WINBOOL              bAllocateHotSpare;
1442  WINBOOL              bUseMirroredCache;
1443  WINBOOL              bReadCachingEnabled;
1444  WINBOOL              bWriteCachingEnabled;
1445  WINBOOL              bMediaScanEnabled;
1446  WINBOOL              bConsistencyCheckEnabled;
1447  VDS_STORAGE_BUS_TYPE BusType;
1448  WINBOOL              bReserved1;
1449  WINBOOL              bReserved2;
1450  WINBOOL              bReserved3;
1451  SHORT                sRebuildPriority;
1452} VDS_HINTS2, *PVDS_HINTS2;
1453
1454typedef struct _VDS_POOL_CUSTOM_ATTRIBUTES {
1455  LPWSTR pwszName;
1456  LPWSTR pwszValue;
1457} VDS_POOL_CUSTOM_ATTRIBUTES, *PVDS_POOL_CUSTOM_ATTRIBUTES;
1458
1459typedef struct _VDS_POOL_ATTRIBUTES {
1460  ULONGLONG                  ullAttributeMask;
1461  VDS_RAID_TYPE              raidType;
1462  VDS_STORAGE_BUS_TYPE       busType;
1463  LPWSTR                     pwszIntendedUsage;
1464  WINBOOL                    bSpinDown;
1465  WINBOOL                    bIsThinProvisioned;
1466  ULONGLONG                  ullProvisionedSpace;
1467  WINBOOL                    bNoSinglePointOfFailure;
1468  ULONG                      ulDataRedundancyMax;
1469  ULONG                      ulDataRedundancyMin;
1470  ULONG                      ulDataRedundancyDefault;
1471  ULONG                      ulPackageRedundancyMax;
1472  ULONG                      ulPackageRedundancyMin;
1473  ULONG                      ulPackageRedundancyDefault;
1474  ULONG                      ulStripeSize;
1475  ULONG                      ulStripeSizeMax;
1476  ULONG                      ulStripeSizeMin;
1477  ULONG                      ulDefaultStripeSize;
1478  ULONG                      ulNumberOfColumns;
1479  ULONG                      ulNumberOfColumnsMax;
1480  ULONG                      ulNumberOfColumnsMin;
1481  ULONG                      ulDefaultNumberofColumns;
1482  ULONG                      ulDataAvailabilityHint;
1483  ULONG                      ulAccessRandomnessHint;
1484  ULONG                      ulAccessDirectionHint;
1485  ULONG                      ulAccessSizeHint;
1486  ULONG                      ulAccessLatencyHint;
1487  ULONG                      ulAccessBandwidthWeightHint;
1488  ULONG                      ulStorageCostHint;
1489  ULONG                      ulStorageEfficiencyHint;
1490  ULONG                      ulNumOfCustomAttributes;
1491  VDS_POOL_CUSTOM_ATTRIBUTES *pPoolCustomAttributes;
1492  WINBOOL                    bReserved1;
1493  WINBOOL                    bReserved2;
1494  ULONG                      ulReserved1;
1495  ULONG                      ulReserved2;
1496  ULONGLONG                  ullReserved1;
1497  ULONGLONG                  ullReserved2;
1498} VDS_POOL_ATTRIBUTES, *PVDS_POOL_ATTRIBUTES;
1499
1500typedef struct _VDS_STORAGE_POOL_DRIVE_EXTENT {
1501  VDS_OBJECT_ID id;
1502  ULONGLONG     ullSize;
1503  WINBOOL       bUsed;
1504} VDS_STORAGE_POOL_DRIVE_EXTENT, *PVDS_STORAGE_POOL_DRIVE_EXTENT;
1505
1506typedef struct _VDS_STORAGE_POOL_PROP {
1507  VDS_OBJECT_ID           id;
1508  VDS_STORAGE_POOL_STATUS status;
1509  VDS_HEALTH              health;
1510  VDS_STORAGE_POOL_TYPE   type;
1511  LPWSTR                  pwszName;
1512  LPWSTR                  pwszDescription;
1513  ULONGLONG               ullTotalConsumedSpace;
1514  ULONGLONG               ullTotalManagedSpace;
1515  ULONGLONG               ullRemainingFreeSpace;
1516} VDS_STORAGE_POOL_PROP, *PVDS_STORAGE_POOL_PROP;
1517
1518typedef struct _VDS_SUB_SYSTEM_PROP2 {
1519  VDS_OBJECT_ID         id;
1520  LPWSTR                pwszFriendlyName;
1521  LPWSTR                pwszIdentification;
1522  ULONG                 ulFlags;
1523  ULONG                 ulStripeSizeFlags;
1524  ULONG                 ulSupportedRaidTypeFlags;
1525  VDS_SUB_SYSTEM_STATUS status;
1526  VDS_HEALTH            health;
1527  SHORT                 sNumberOfInternalBuses;
1528  SHORT                 sMaxNumberOfSlotsEachBus;
1529  SHORT                 sMaxNumberOfControllers;
1530  SHORT                 sRebuildPriority;
1531  ULONG                 ulNumberOfEnclosures;
1532} VDS_SUB_SYSTEM_PROP2, *PVDS_SUB_SYSTEM_PROP2;
1533
1534typedef struct _VDS_VDISK_PROPERTIES {
1535  VDS_OBJECT_ID        Id;
1536  VDS_VDISK_STATE      State;
1537  VIRTUAL_STORAGE_TYPE VirtualDeviceType;
1538  ULONGLONG            VirtualSize;
1539  ULONGLONG            PhysicalSize;
1540  LPWSTR               pPath;
1541  LPWSTR               pDeviceName;
1542  DEPENDENT_DISK_FLAG  DiskFlag;
1543  WINBOOL              bIsChild;
1544  LPWSTR               pParentPath;
1545} VDS_VDISK_PROPERTIES, *PVDS_VDISK_PROPERTIES;
1546
1547typedef struct _VDS_VOLUME_PROP2 {
1548  VDS_OBJECT_ID        id;
1549  VDS_VOLUME_TYPE      type;
1550  VDS_VOLUME_STATUS    status;
1551  VDS_HEALTH           health;
1552  VDS_TRANSITION_STATE TransitionState;
1553  ULONGLONG            ullSize;
1554  ULONG                ulFlags;
1555  VDS_FILE_SYSTEM_TYPE RecommendedFileSystemType;
1556  ULONG                cbUniqueId;
1557  LPWSTR               pwszName;
1558  BYTE                 *pUniqueId;
1559} VDS_VOLUME_PROP2, *PVDS_VOLUME_PROP2;
1560
1561#ifdef __cplusplus
1562}
1563#endif
1564#endif /*(_WIN32_WINNT >= 0x0601)*/
1565
1566#endif /*_INC_VDS*/