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