1 // Copyright © 2015, Brian Vincent
2 // Licensed under the MIT License <LICENSE.md>
3 //! VSS header file
4 ENUM!{enum VSS_OBJECT_TYPE {
5     VSS_OBJECT_UNKNOWN = 0,
6     VSS_OBJECT_NONE = 1,
7     VSS_OBJECT_SNAPSHOT_SET = 2,
8     VSS_OBJECT_SNAPSHOT = 3,
9     VSS_OBJECT_PROVIDER = 4,
10     VSS_OBJECT_TYPE_COUNT = 5,
11 }}
12 pub type PVSS_OBJECT_TYPE = *mut VSS_OBJECT_TYPE;
13 ENUM!{enum VSS_SNAPSHOT_STATE {
14     VSS_SS_UNKNOWN = 0x00,
15     VSS_SS_PREPARING = 0x01,
16     VSS_SS_PROCESSING_PREPARE = 0x02,
17     VSS_SS_PREPARED = 0x03,
18     VSS_SS_PROCESSING_PRECOMMIT = 0x04,
19     VSS_SS_PRECOMMITTED = 0x05,
20     VSS_SS_PROCESSING_COMMIT = 0x06,
21     VSS_SS_COMMITTED = 0x07,
22     VSS_SS_PROCESSING_POSTCOMMIT = 0x08,
23     VSS_SS_PROCESSING_PREFINALCOMMIT = 0x09,
24     VSS_SS_PREFINALCOMMITTED = 0x0a,
25     VSS_SS_PROCESSING_POSTFINALCOMMIT = 0x0b,
26     VSS_SS_CREATED = 0x0c,
27     VSS_SS_ABORTED = 0x0d,
28     VSS_SS_DELETED = 0x0e,
29     VSS_SS_POSTCOMMITTED = 0x0f,
30     VSS_SS_COUNT = 0x10,
31 }}
32 pub type PVSS_SNAPSHOT_STATE = *mut VSS_SNAPSHOT_STATE;
33 pub type VSS_VOLUME_SNAPSHOT_ATTRIBUTES = ::LONG;
34 pub const VSS_VOLSNAP_ATTR_PERSISTENT: ::LONG = 0x00000001;
35 pub const VSS_VOLSNAP_ATTR_NO_AUTORECOVERY: ::LONG = 0x00000002;
36 pub const VSS_VOLSNAP_ATTR_CLIENT_ACCESSIBLE: ::LONG = 0x00000004;
37 pub const VSS_VOLSNAP_ATTR_NO_AUTO_RELEASE: ::LONG = 0x00000008;
38 pub const VSS_VOLSNAP_ATTR_NO_WRITERS: ::LONG = 0x00000010;
39 pub const VSS_VOLSNAP_ATTR_TRANSPORTABLE: ::LONG = 0x00000020;
40 pub const VSS_VOLSNAP_ATTR_NOT_SURFACED: ::LONG = 0x00000040;
41 pub const VSS_VOLSNAP_ATTR_NOT_TRANSACTED: ::LONG = 0x00000080;
42 pub const VSS_VOLSNAP_ATTR_HARDWARE_ASSISTED: ::LONG = 0x00010000;
43 pub const VSS_VOLSNAP_ATTR_DIFFERENTIAL: ::LONG = 0x00020000;
44 pub const VSS_VOLSNAP_ATTR_PLEX: ::LONG = 0x00040000;
45 pub const VSS_VOLSNAP_ATTR_IMPORTED: ::LONG = 0x00080000;
46 pub const VSS_VOLSNAP_ATTR_EXPOSED_LOCALLY: ::LONG = 0x00100000;
47 pub const VSS_VOLSNAP_ATTR_EXPOSED_REMOTELY: ::LONG = 0x00200000;
48 pub const VSS_VOLSNAP_ATTR_AUTORECOVER: ::LONG = 0x00400000;
49 pub const VSS_VOLSNAP_ATTR_ROLLBACK_RECOVERY: ::LONG = 0x00800000;
50 pub const VSS_VOLSNAP_ATTR_DELAYED_POSTSNAPSHOT: ::LONG = 0x01000000;
51 pub const VSS_VOLSNAP_ATTR_TXF_RECOVERY: ::LONG = 0x02000000;
52 pub const VSS_VOLSNAP_ATTR_FILE_SHARE: ::LONG = 0x04000000;
53 pub type PVSS_VOLUME_SNAPSHOT_ATTRIBUTES = *mut VSS_VOLUME_SNAPSHOT_ATTRIBUTES;
54 pub type VSS_SNAPSHOT_CONTEXT = ::LONG;
55 pub type PVSS_SNAPSHOT_CONTEXT = *mut VSS_SNAPSHOT_CONTEXT;
56 pub const VSS_CTX_BACKUP: ::LONG = 0;
57 pub const VSS_CTX_FILE_SHARE_BACKUP: ::LONG = VSS_VOLSNAP_ATTR_NO_WRITERS;
58 pub const VSS_CTX_NAS_ROLLBACK: ::LONG = VSS_VOLSNAP_ATTR_PERSISTENT
59     | VSS_VOLSNAP_ATTR_NO_AUTO_RELEASE | VSS_VOLSNAP_ATTR_NO_WRITERS;
60 pub const VSS_CTX_APP_ROLLBACK: ::LONG = VSS_VOLSNAP_ATTR_PERSISTENT
61     | VSS_VOLSNAP_ATTR_NO_AUTO_RELEASE;
62 pub const VSS_CTX_CLIENT_ACCESSIBLE: ::LONG = VSS_VOLSNAP_ATTR_PERSISTENT
63     | VSS_VOLSNAP_ATTR_CLIENT_ACCESSIBLE | VSS_VOLSNAP_ATTR_NO_AUTO_RELEASE
64     | VSS_VOLSNAP_ATTR_NO_WRITERS;
65 pub const VSS_CTX_CLIENT_ACCESSIBLE_WRITERS: ::LONG = VSS_VOLSNAP_ATTR_PERSISTENT
66     | VSS_VOLSNAP_ATTR_CLIENT_ACCESSIBLE | VSS_VOLSNAP_ATTR_NO_AUTO_RELEASE;
67 pub const VSS_CTX_ALL: ::LONG = 0xffffffffu32 as ::LONG;
68 pub type VSS_PROVIDER_CAPABILITIES = ::DWORD;
69 pub type PVSS_PROVIDER_CAPABILITIES = *mut VSS_PROVIDER_CAPABILITIES;
70 pub const VSS_PRV_CAPABILITY_LEGACY: ::DWORD = 0x1;
71 pub const VSS_PRV_CAPABILITY_COMPLIANT: ::DWORD = 0x2;
72 pub const VSS_PRV_CAPABILITY_LUN_REPOINT: ::DWORD = 0x4;
73 pub const VSS_PRV_CAPABILITY_LUN_RESYNC: ::DWORD = 0x8;
74 pub const VSS_PRV_CAPABILITY_OFFLINE_CREATION: ::DWORD = 0x10;
75 pub const VSS_PRV_CAPABILITY_MULTIPLE_IMPORT: ::DWORD = 0x20;
76 pub const VSS_PRV_CAPABILITY_RECYCLING: ::DWORD = 0x40;
77 pub const VSS_PRV_CAPABILITY_PLEX: ::DWORD = 0x80;
78 pub const VSS_PRV_CAPABILITY_DIFFERENTIAL: ::DWORD = 0x100;
79 pub const VSS_PRV_CAPABILITY_CLUSTERED: ::DWORD = 0x200;
80 pub type VSS_HARDWARE_OPTIONS = ::DWORD;
81 pub type PVSS_HARDWARE_OPTIONS = *mut VSS_HARDWARE_OPTIONS;
82 pub const VSS_BREAKEX_FLAG_MASK_LUNS: ::DWORD = 0x1;
83 pub const VSS_BREAKEX_FLAG_MAKE_READ_WRITE: ::DWORD = 0x2;
84 pub const VSS_BREAKEX_FLAG_REVERT_IDENTITY_ALL: ::DWORD = 0x4;
85 pub const VSS_BREAKEX_FLAG_REVERT_IDENTITY_NONE: ::DWORD = 0x8;
86 pub const VSS_ONLUNSTATECHANGE_NOTIFY_READ_WRITE: ::DWORD = 0x100;
87 pub const VSS_ONLUNSTATECHANGE_NOTIFY_LUN_PRE_RECOVERY: ::DWORD = 0x200;
88 pub const VSS_ONLUNSTATECHANGE_NOTIFY_LUN_POST_RECOVERY: ::DWORD = 0x400;
89 pub const VSS_ONLUNSTATECHANGE_DO_MASK_LUNS: ::DWORD = 0x800;
90 pub type VSS_RECOVERY_OPTIONS = ::DWORD;
91 pub type PVSS_RECOVERY_OPTIONS = *mut VSS_RECOVERY_OPTIONS;
92 pub const VSS_RECOVERY_REVERT_IDENTITY_ALL: ::DWORD = 0x00000100;
93 pub const VSS_RECOVERY_NO_VOLUME_CHECK: ::DWORD = 0x00000200;
94 ENUM!{enum VSS_WRITER_STATE {
95     VSS_WS_UNKNOWN = 0,
96     VSS_WS_STABLE = 1,
97     VSS_WS_WAITING_FOR_FREEZE = 2,
98     VSS_WS_WAITING_FOR_THAW = 3,
99     VSS_WS_WAITING_FOR_POST_SNAPSHOT = 4,
100     VSS_WS_WAITING_FOR_BACKUP_COMPLETE = 5,
101     VSS_WS_FAILED_AT_IDENTIFY = 6,
102     VSS_WS_FAILED_AT_PREPARE_BACKUP = 7,
103     VSS_WS_FAILED_AT_PREPARE_SNAPSHOT = 8,
104     VSS_WS_FAILED_AT_FREEZE = 9,
105     VSS_WS_FAILED_AT_THAW = 10,
106     VSS_WS_FAILED_AT_POST_SNAPSHOT = 11,
107     VSS_WS_FAILED_AT_BACKUP_COMPLETE = 12,
108     VSS_WS_FAILED_AT_PRE_RESTORE = 13,
109     VSS_WS_FAILED_AT_POST_RESTORE = 14,
110     VSS_WS_FAILED_AT_BACKUPSHUTDOWN = 15,
111     VSS_WS_COUNT = 16,
112 }}
113 pub type PVSS_WRITER_STATE = *mut VSS_WRITER_STATE;
114 ENUM!{enum VSS_BACKUP_TYPE {
115     VSS_BT_UNDEFINED = 0,
116     VSS_BT_FULL = 1,
117     VSS_BT_INCREMENTAL = 2,
118     VSS_BT_DIFFERENTIAL = 3,
119     VSS_BT_LOG = 4,
120     VSS_BT_COPY = 5,
121     VSS_BT_OTHER = 6,
122 }}
123 pub type PVSS_BACKUP_TYPE = *mut VSS_BACKUP_TYPE;
124 ENUM!{enum VSS_RESTORE_TYPE {
125     VSS_RTYPE_UNDEFINED = 0,
126     VSS_RTYPE_BY_COPY = 1,
127     VSS_RTYPE_IMPORT = 2,
128     VSS_RTYPE_OTHER = 3,
129 }}
130 pub type PVSS_RESTORE_TYPE = *mut VSS_RESTORE_TYPE;
131 ENUM!{enum VSS_ROLLFORWARD_TYPE {
132     VSS_RF_UNDEFINED = 0,
133     VSS_RF_NONE = 1,
134     VSS_RF_ALL = 2,
135     VSS_RF_PARTIAL = 3,
136 }}
137 pub type PVSS_ROLLFORWARD_TYPE = *mut VSS_ROLLFORWARD_TYPE;
138 ENUM!{enum VSS_PROVIDER_TYPE {
139     VSS_PROV_UNKNOWN = 0,
140     VSS_PROV_SYSTEM = 1,
141     VSS_PROV_SOFTWARE = 2,
142     VSS_PROV_HARDWARE = 3,
143     VSS_PROV_FILESHARE = 4,
144 }}
145 pub type PVSS_PROVIDER_TYPE = *mut VSS_PROVIDER_TYPE;
146 ENUM!{enum VSS_APPLICATION_LEVEL {
147     VSS_APP_UNKNOWN = 0,
148     VSS_APP_SYSTEM = 1,
149     VSS_APP_BACK_END = 2,
150     VSS_APP_FRONT_END = 3,
151     VSS_APP_SYSTEM_RM = 4,
152     VSS_APP_AUTO = -1i32 as u32,
153 }}
154 pub type PVSS_APPLICATION_LEVEL = *mut VSS_APPLICATION_LEVEL;
155 ENUM!{enum VSS_SNAPSHOT_PROPERTY_ID {
156     VSS_SPROPID_UNKNOWN = 0,
157     VSS_SPROPID_SNAPSHOT_ID = 0x1,
158     VSS_SPROPID_SNAPSHOT_SET_ID = 0x2,
159     VSS_SPROPID_SNAPSHOTS_COUNT = 0x3,
160     VSS_SPROPID_SNAPSHOT_DEVICE = 0x4,
161     VSS_SPROPID_ORIGINAL_VOLUME = 0x5,
162     VSS_SPROPID_ORIGINATING_MACHINE = 0x6,
163     VSS_SPROPID_SERVICE_MACHINE = 0x7,
164     VSS_SPROPID_EXPOSED_NAME = 0x8,
165     VSS_SPROPID_EXPOSED_PATH = 0x9,
166     VSS_SPROPID_PROVIDER_ID = 0xa,
167     VSS_SPROPID_SNAPSHOT_ATTRIBUTES = 0xb,
168     VSS_SPROPID_CREATION_TIMESTAMP = 0xc,
169     VSS_SPROPID_STATUS = 0xd,
170 }}
171 pub type PVSS_SNAPSHOT_PROPERTY_ID = *mut VSS_SNAPSHOT_PROPERTY_ID;
172 pub type VSS_FILE_SPEC_BACKUP_TYPE = ::DWORD;
173 pub type PVSS_FILE_SPEC_BACKUP_TYPE = *mut VSS_FILE_SPEC_BACKUP_TYPE;
174 pub const VSS_FSBT_FULL_BACKUP_REQUIRED: ::DWORD = 0x1;
175 pub const VSS_FSBT_DIFFERENTIAL_BACKUP_REQUIRED: ::DWORD = 0x2;
176 pub const VSS_FSBT_INCREMENTAL_BACKUP_REQUIRED: ::DWORD = 0x4;
177 pub const VSS_FSBT_LOG_BACKUP_REQUIRED: ::DWORD = 0x8;
178 pub const VSS_FSBT_FULL_SNAPSHOT_REQUIRED: ::DWORD = 0x100;
179 pub const VSS_FSBT_DIFFERENTIAL_SNAPSHOT_REQUIRED: ::DWORD = 0x200;
180 pub const VSS_FSBT_INCREMENTAL_SNAPSHOT_REQUIRED: ::DWORD = 0x400;
181 pub const VSS_FSBT_LOG_SNAPSHOT_REQUIRED: ::DWORD = 0x800;
182 pub const VSS_FSBT_CREATED_DURING_BACKUP: ::DWORD = 0x10000;
183 pub const VSS_FSBT_ALL_BACKUP_REQUIRED: ::DWORD = 0xf;
184 pub const VSS_FSBT_ALL_SNAPSHOT_REQUIRED: ::DWORD = 0xf00;
185 pub type VSS_BACKUP_SCHEMA = ::DWORD;
186 pub type PVSS_BACKUP_SCHEMA = *mut VSS_BACKUP_SCHEMA;
187 pub const VSS_BS_UNDEFINED: ::DWORD = 0;
188 pub const VSS_BS_DIFFERENTIAL: ::DWORD = 0x1;
189 pub const VSS_BS_INCREMENTAL: ::DWORD = 0x2;
190 pub const VSS_BS_EXCLUSIVE_INCREMENTAL_DIFFERENTIAL: ::DWORD = 0x4;
191 pub const VSS_BS_LOG: ::DWORD = 0x8;
192 pub const VSS_BS_COPY: ::DWORD = 0x10;
193 pub const VSS_BS_TIMESTAMPED: ::DWORD = 0x20;
194 pub const VSS_BS_LAST_MODIFY: ::DWORD = 0x40;
195 pub const VSS_BS_LSN: ::DWORD = 0x80;
196 pub const VSS_BS_WRITER_SUPPORTS_NEW_TARGET: ::DWORD = 0x100;
197 pub const VSS_BS_WRITER_SUPPORTS_RESTORE_WITH_MOVE: ::DWORD = 0x200;
198 pub const VSS_BS_INDEPENDENT_SYSTEM_STATE: ::DWORD = 0x400;
199 pub const VSS_BS_ROLLFORWARD_RESTORE: ::DWORD = 0x1000;
200 pub const VSS_BS_RESTORE_RENAME: ::DWORD = 0x2000;
201 pub const VSS_BS_AUTHORITATIVE_RESTORE: ::DWORD = 0x4000;
202 pub const VSS_BS_WRITER_SUPPORTS_PARALLEL_RESTORES: ::DWORD = 0x8000;
203 pub type VSS_ID = ::GUID;
204 pub type VSS_PWSZ = *mut ::WCHAR;
205 pub type VSS_TIMESTAMP = ::LONGLONG;
206 STRUCT!{struct VSS_SNAPSHOT_PROP {
207     m_SnapshotId: ::VSS_ID,
208     m_SnapshotSetId: ::VSS_ID,
209     m_lSnapshotsCount: ::LONG,
210     m_pwszSnapshotDeviceObject: ::VSS_PWSZ,
211     m_pwszOriginalVolumeName: ::VSS_PWSZ,
212     m_pwszOriginatingMachine: ::VSS_PWSZ,
213     m_pwszServiceMachine: ::VSS_PWSZ,
214     m_pwszExposedName: ::VSS_PWSZ,
215     m_pwszExposedPath: ::VSS_PWSZ,
216     m_ProviderId: ::VSS_ID,
217     m_lSnapshotAttributes: ::LONG,
218     m_tsCreationTimestamp: ::VSS_TIMESTAMP,
219     m_eStatus: ::VSS_SNAPSHOT_STATE,
220 }}
221 type PVSS_SNAPSHOT_PROP = *mut VSS_SNAPSHOT_PROP;
222 STRUCT!{struct VSS_PROVIDER_PROP {
223     m_ProviderId: ::VSS_ID,
224     m_pwszProviderName: ::VSS_PWSZ,
225     m_eProviderType: ::VSS_PROVIDER_TYPE,
226     m_pwszProviderVersion: ::VSS_PWSZ,
227     m_ProviderVersionId: ::VSS_ID,
228     m_ClassId: ::CLSID,
229 }}
230 type PVSS_PROVIDER_PROP = *mut VSS_PROVIDER_PROP;
231 STRUCT!{struct VSS_OBJECT_UNION {
232     Snap: ::VSS_SNAPSHOT_PROP,
233 }}
234 UNION!(VSS_OBJECT_UNION, Snap, Prov, Prov_mut, VSS_PROVIDER_PROP);
235 STRUCT!{struct VSS_OBJECT_PROP {
236     Type: ::VSS_OBJECT_TYPE,
237     Obj: ::VSS_OBJECT_UNION,
238 }}
239 type PVSS_OBJECT_PROP = *mut VSS_OBJECT_PROP;
240 RIDL!(
241 interface IVssEnumObject(IVssEnumObjectVtbl): IUnknown(IUnknownVtbl) {
242     fn Next(
243         &mut self, celt: ::ULONG, rgelt: *mut ::VSS_OBJECT_PROP, pceltFetched: *mut ::ULONG
244     ) -> ::HRESULT,
245     fn Skip(&mut self, celt: ::ULONG) -> ::HRESULT,
246     fn Reset(&mut self) -> ::HRESULT,
247     fn Clone(&mut self, ppenum: *mut *mut ::IVssEnumObject) -> ::HRESULT
248 }
249 );
250 RIDL!(
251 interface IVssAsync(IVssAsyncVtbl): IUnknown(IUnknownVtbl) {
252     fn Cancel(&mut self) -> ::HRESULT,
253     fn Wait(&mut self, dwMilliseconds: ::DWORD) -> ::HRESULT,
254     fn QueryStatus(&mut self, pHrResult: *mut ::HRESULT, pReserved: *mut ::INT) -> ::HRESULT
255 }
256 );
257