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