Home | History | Annotate | Download | only in include
      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
     14 extern "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
   1269 extern "C" {
   1270 #endif
   1271 typedef 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 
   1279 typedef 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 
   1286 typedef 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 
   1305 typedef 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 
   1313 typedef 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 
   1320 typedef 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 
   1342 typedef 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 
   1348 typedef 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 
   1363 typedef 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 
   1372 typedef 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 
   1378 typedef 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 
   1405 typedef 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 
   1420 typedef 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 
   1454 typedef struct _VDS_POOL_CUSTOM_ATTRIBUTES {
   1455   LPWSTR pwszName;
   1456   LPWSTR pwszValue;
   1457 } VDS_POOL_CUSTOM_ATTRIBUTES, *PVDS_POOL_CUSTOM_ATTRIBUTES;
   1458 
   1459 typedef 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 
   1500 typedef 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 
   1506 typedef 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 
   1518 typedef 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 
   1534 typedef 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 
   1547 typedef 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*/
   1567