1use shared::minwindef::{BOOL, BYTE, DWORD, FILETIME, UINT};
8use shared::wtypes::BSTR;
9use um::unknwnbase::{IUnknown, IUnknownVtbl};
10use um::vss::{VSS_ID, VSS_ROLLFORWARD_TYPE};
11use um::winnt::{HRESULT, LPCWSTR, VOID};
12ENUM!{enum VSS_USAGE_TYPE {
13 VSS_UT_UNDEFINED = 0,
14 VSS_UT_BOOTABLESYSTEMSTATE = 1,
15 VSS_UT_SYSTEMSERVICE = 2,
16 VSS_UT_USERDATA = 3,
17 VSS_UT_OTHER = 4,
18}}
19ENUM!{enum VSS_SOURCE_TYPE {
20 VSS_ST_UNDEFINED = 0,
21 VSS_ST_TRANSACTEDDB = 1,
22 VSS_ST_NONTRANSACTEDDB = 2,
23 VSS_ST_OTHER = 3,
24}}
25ENUM!{enum VSS_RESTOREMETHOD_ENUM {
26 VSS_RME_UNDEFINED = 0,
27 VSS_RME_RESTORE_IF_NOT_THERE = 1,
28 VSS_RME_RESTORE_IF_CAN_REPLACE = 2,
29 VSS_RME_STOP_RESTORE_START = 3,
30 VSS_RME_RESTORE_TO_ALTERNATE_LOCATION = 4,
31 VSS_RME_RESTORE_AT_REBOOT = 5,
32 VSS_RME_RESTORE_AT_REBOOT_IF_CANNOT_REPLACE = 6,
33 VSS_RME_CUSTOM = 7,
34 VSS_RME_RESTORE_STOP_START = 8,
35}}
36ENUM!{enum VSS_WRITERRESTORE_ENUM {
37 VSS_WRE_UNDEFINED = 0,
38 VSS_WRE_NEVER = 1,
39 VSS_WRE_IF_REPLACE_FAILS = 2,
40 VSS_WRE_ALWAYS = 3,
41}}
42ENUM!{enum VSS_COMPONENT_TYPE {
43 VSS_CT_UNDEFINED = 0,
44 VSS_CT_DATABASE = 1,
45 VSS_CT_FILEGROUP = 2,
46}}
47ENUM!{enum VSS_ALTERNATE_WRITER_STATE {
48 VSS_AWS_UNDEFINED = 0,
49 VSS_AWS_NO_ALTERNATE_WRITER = 1,
50 VSS_AWS_ALTERNATE_WRITER_EXISTS = 2,
51 VSS_AWS_THIS_IS_ALTERNATE_WRITER = 3,
52}}
53ENUM!{enum VSS_SUBSCRIBE_MASK {
54 VSS_SM_POST_SNAPSHOT_FLAG = 0x00000001,
55 VSS_SM_BACKUP_EVENTS_FLAG = 0x00000002,
56 VSS_SM_RESTORE_EVENTS_FLAG = 0x00000004,
57 VSS_SM_IO_THROTTLING_FLAG = 0x00000008,
58 VSS_SM_ALL_FLAGS = 0xffffffff,
59}}
60ENUM!{enum VSS_RESTORE_TARGET {
61 VSS_RT_UNDEFINED = 0,
62 VSS_RT_ORIGINAL = 1,
63 VSS_RT_ALTERNATE = 2,
64 VSS_RT_DIRECTED = 3,
65 VSS_RT_ORIGINAL_LOCATION = 4,
66}}
67ENUM!{enum VSS_FILE_RESTORE_STATUS {
68 VSS_RS_UNDEFINED = 0,
69 VSS_RS_NONE = 1,
70 VSS_RS_ALL = 2,
71 VSS_RS_FAILED = 3,
72}}
73ENUM!{enum VSS_COMPONENT_FLAGS {
74 VSS_CF_BACKUP_RECOVERY = 0x00000001,
75 VSS_CF_APP_ROLLBACK_RECOVERY = 0x00000002,
76 VSS_CF_NOT_SYSTEM_STATE = 0x00000004,
77}}
78RIDL!{#[uuid(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)]
79interface IVssWMFiledesc(IVssWMFiledescVtbl): IUnknown(IUnknownVtbl) {
80 fn GetPath(
81 pbstrPath: *mut BSTR,
82 ) -> HRESULT,
83 fn GetFilespec(
84 pbstrFilespec: *mut BSTR,
85 ) -> HRESULT,
86 fn GetRecursive(
87 pbRecursive: *mut bool,
88 ) -> HRESULT,
89 fn GetAlternateLocation(
90 pbstrAlternateLocation: *mut BSTR,
91 ) -> HRESULT,
92 fn GetBackupTypeMask(
93 pdwTypeMask: *mut DWORD,
94 ) -> HRESULT,
95}}
96RIDL!{#[uuid(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)]
97interface IVssWMDependency(IVssWMDependencyVtbl): IUnknown(IUnknownVtbl) {
98 fn GetWriterId(
99 pWriterId: *mut VSS_ID,
100 ) -> HRESULT,
101 fn GetLogicalPath(
102 pbstrLogicalPath: *mut BSTR,
103 ) -> HRESULT,
104 fn GetComponentName(
105 pbstrComponentName: *mut BSTR,
106 ) -> HRESULT,
107}}
108RIDL!{#[uuid(0xd2c72c96, 0xc121, 0x4518, 0xb6, 0x27, 0xe5, 0xa9, 0x3d, 0x01, 0x0e, 0xad)]
109interface IVssComponent(IVssComponentVtbl): IUnknown(IUnknownVtbl) {
110 fn GetLogicalPath(
111 pbstrPath: *mut BSTR,
112 ) -> HRESULT,
113 fn GetComponentType(
114 pct: *mut VSS_COMPONENT_TYPE,
115 ) -> HRESULT,
116 fn GetComponentName(
117 pbstrName: *mut BSTR,
118 ) -> HRESULT,
119 fn GetBackupSucceeded(
120 pbSucceeded: *mut bool,
121 ) -> HRESULT,
122 fn GetAlternateLocationMappingCount(
123 pcMappings: *mut UINT,
124 ) -> HRESULT,
125 fn GetAlternateLocationMapping(
126 iMapping: UINT,
127 ppFiledesc: *mut *mut IVssWMFiledesc,
128 ) -> HRESULT,
129 fn SetBackupMetadata(
130 wszData: LPCWSTR,
131 ) -> HRESULT,
132 fn GetBackupMetadata(
133 pbstrData: *mut BSTR,
134 ) -> HRESULT,
135 fn AddPartialFile(
136 wszPath: LPCWSTR,
137 wszFilename: LPCWSTR,
138 wszRanges: LPCWSTR,
139 wszMetadata: LPCWSTR,
140 ) -> HRESULT,
141 fn GetPartialFileCount(
142 pcPartialFiles: *mut UINT,
143 ) -> HRESULT,
144 fn GetPartialFile(
145 iPartialFile: UINT,
146 pbstrPath: *mut BSTR,
147 pbstrFilename: *mut BSTR,
148 pbstrRange: *mut BSTR,
149 pbstrMetadata: *mut BSTR,
150 ) -> HRESULT,
151 fn IsSelectedForRestore(
152 pbSelectedForRestore: *mut bool,
153 ) -> HRESULT,
154 fn GetAdditionalRestores(
155 pbAdditionalRestores: *mut bool,
156 ) -> HRESULT,
157 fn GetNewTargetCount(
158 pcNewTarget: *mut UINT,
159 ) -> HRESULT,
160 fn GetNewTarget(
161 iNewTarget: UINT,
162 ppFiledesc: *mut *mut IVssWMFiledesc,
163 ) -> HRESULT,
164 fn AddDirectedTarget(
165 wszSourcePath: LPCWSTR,
166 wszSourceFilename: LPCWSTR,
167 wszSourceRangeList: LPCWSTR,
168 wszDestinationPath: LPCWSTR,
169 wszDestinationFilename: LPCWSTR,
170 wszDestinationRangeList: LPCWSTR,
171 ) -> HRESULT,
172 fn GetDirectedTargetCount(
173 pcDirectedTarget: *mut UINT,
174 ) -> HRESULT,
175 fn GetDirectedTarget(
176 iDirectedTarget: UINT,
177 pbstrSourcePath: *mut BSTR,
178 pbstrSourceFileName: *mut BSTR,
179 pbstrSourceRangeList: *mut BSTR,
180 pbstrDestinationPath: *mut BSTR,
181 pbstrDestinationFilename: *mut BSTR,
182 pbstrDestinationRangeList: *mut BSTR,
183 ) -> HRESULT,
184 fn SetRestoreMetadata(
185 wszRestoreMetadata: LPCWSTR,
186 ) -> HRESULT,
187 fn GetRestoreMetadata(
188 pbstrRestoreMetadata: *mut BSTR,
189 ) -> HRESULT,
190 fn SetRestoreTarget(
191 target: VSS_RESTORE_TARGET,
192 ) -> HRESULT,
193 fn GetRestoreTarget(
194 pTarget: *mut VSS_RESTORE_TARGET,
195 ) -> HRESULT,
196 fn SetPreRestoreFailureMsg(
197 wszPreRestoreFailureMsg: LPCWSTR,
198 ) -> HRESULT,
199 fn GetPreRestoreFailureMsg(
200 pbstrPreRestoreFailureMsg: *mut BSTR,
201 ) -> HRESULT,
202 fn SetPostRestoreFailureMsg(
203 wszPostRestoreFailureMsg: LPCWSTR,
204 ) -> HRESULT,
205 fn GetPostRestoreFailureMsg(
206 pbstrPostRestoreFailureMsg: *mut BSTR,
207 ) -> HRESULT,
208 fn SetBackupStamp(
209 wszBackupStamp: LPCWSTR,
210 ) -> HRESULT,
211 fn GetBackupStamp(
212 pbstrBackupStamp: *mut BSTR,
213 ) -> HRESULT,
214 fn GetPreviousBackupStamp(
215 pbstrBackupStamp: *mut BSTR,
216 ) -> HRESULT,
217 fn GetBackupOptions(
218 pbstrBackupOptions: *mut BSTR,
219 ) -> HRESULT,
220 fn GetRestoreOptions(
221 pbstrRestoreOptions: *mut BSTR,
222 ) -> HRESULT,
223 fn GetRestoreSubcomponentCount(
224 pcRestoreSubcomponent: *mut UINT,
225 ) -> HRESULT,
226 fn GetRestoreSubcomponent(
227 iComponent: UINT,
228 pbstrLogicalPath: *mut BSTR,
229 pbstrComponentName: *mut BSTR,
230 pbRepair: *mut bool,
231 ) -> HRESULT,
232 fn GetFileRestoreStatus(
233 pStatus: *mut VSS_FILE_RESTORE_STATUS,
234 ) -> HRESULT,
235 fn AddDifferencedFilesByLastModifyTime(
236 wszPath: LPCWSTR,
237 wszFilespec: LPCWSTR,
238 bRecursive: BOOL,
239 ftLastModifyTime: FILETIME,
240 ) -> HRESULT,
241 fn AddDifferencedFilesByLastModifyLSN(
242 wszPath: LPCWSTR,
243 wszFilespec: LPCWSTR,
244 bRecursive: BOOL,
245 bstrLsnString: BSTR,
246 ) -> HRESULT,
247 fn GetDifferencedFilesCount(
248 pcDifferencedFiles: *mut UINT,
249 ) -> HRESULT,
250 fn GetDifferencedFile(
251 iDifferencedFile: UINT,
252 pbstrPath: *mut BSTR,
253 pbstrFilespec: *mut BSTR,
254 pbRecursive: *mut BOOL,
255 pbstrLsnString: *mut BSTR,
256 pftLastModifyTime: *mut FILETIME,
257 ) -> HRESULT,
258}}
259RIDL!{#[uuid(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)]
260interface IVssWriterComponents(IVssWriterComponentsVtbl) {
261 fn GetComponentCount(
262 pcComponents: *mut UINT,
263 ) -> HRESULT,
264 fn GetWriterInfo(
265 pidInstance: *mut VSS_ID,
266 pidWriter: *mut VSS_ID,
267 ) -> HRESULT,
268 fn GetComponent(
269 iComponent: UINT,
270 ppComponent: *mut *mut IVssComponent,
271 ) -> HRESULT,
272}}
273RIDL!{#[uuid(0x156c8b5e, 0xf131, 0x4bd7, 0x9c, 0x97, 0xd1, 0x92, 0x3b, 0xe7, 0xe1, 0xfa)]
274interface IVssComponentEx(IVssComponentExVtbl): IVssComponent(IVssComponentVtbl) {
275 fn SetPrepareForBackupFailureMsg(
276 wszFailureMsg: LPCWSTR,
277 ) -> HRESULT,
278 fn SetPostSnapshotFailureMsg(
279 wszFailureMsg: LPCWSTR,
280 ) -> HRESULT,
281 fn GetPrepareForBackupFailureMsg(
282 pbstrFailureMsg: *mut BSTR,
283 ) -> HRESULT,
284 fn GetPostSnapshotFailureMsg(
285 pbstrFailureMsg: *mut BSTR,
286 ) -> HRESULT,
287 fn GetAuthoritativeRestore(
288 pbAuth: *mut bool,
289 ) -> HRESULT,
290 fn GetRollForward(
291 pRollType: *mut VSS_ROLLFORWARD_TYPE,
292 pbstrPoint: *mut BSTR,
293 ) -> HRESULT,
294 fn GetRestoreName(
295 pbstrName: *mut BSTR,
296 ) -> HRESULT,
297}}
298RIDL!{#[uuid(0x3b5be0f2, 0x07a9, 0x4e4b, 0xbd, 0xd3, 0xcf, 0xdc, 0x8e, 0x2c, 0x0d, 0x2d)]
299interface IVssComponentEx2(IVssComponentEx2Vtbl): IVssComponentEx(IVssComponentExVtbl) {
300 fn SetFailure(
301 hr: HRESULT,
302 hrApplication: HRESULT,
303 wszApplicationMessage: LPCWSTR,
304 dwReserved: DWORD,
305 ) -> HRESULT,
306 fn GetFailure(
307 phr: *mut HRESULT,
308 phrApplication: *mut HRESULT,
309 pbstrApplicationMessage: *mut BSTR,
310 pdwReserved: *mut DWORD,
311 ) -> HRESULT,
312}}
313RIDL!{#[uuid(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)]
314interface IVssCreateWriterMetadata(IVssCreateWriterMetadataVtbl) {
315 fn AddIncludeFiles(
316 wszPath: LPCWSTR,
317 wszFilespec: LPCWSTR,
318 bRecursive: bool,
319 wszAlternateLocation: LPCWSTR,
320 ) -> HRESULT,
321 fn AddExcludeFiles(
322 wszPath: LPCWSTR,
323 wszFilespec: LPCWSTR,
324 bRecursive: bool,
325 ) -> HRESULT,
326 fn AddComponent(
327 ct: VSS_COMPONENT_TYPE,
328 wszLogicalPath: LPCWSTR,
329 wszComponentName: LPCWSTR,
330 wszCaption: LPCWSTR,
331 pbIcon: *const BYTE,
332 cbIcon: UINT,
333 bRestoreMetadata: bool,
334 bNotifyOnBackupComplete: bool,
335 bSelectableForRestore: bool,
336 dwComponentFlags: DWORD,
337 ) -> HRESULT,
338 fn AddDatabaseFiles(
339 wszLogicalPath: LPCWSTR,
340 wszDatabaseName: LPCWSTR,
341 wszPath: LPCWSTR,
342 wszFilespec: LPCWSTR,
343 dwBackupTypeMask: DWORD,
344 ) -> HRESULT,
345 fn AddDatabaseLogFiles(
346 wszLogicalPath: LPCWSTR,
347 wszDatabaseName: LPCWSTR,
348 wszPath: LPCWSTR,
349 wszFilespec: LPCWSTR,
350 dwBackupTypeMask: DWORD,
351 ) -> HRESULT,
352 fn AddFilesToFileGroup(
353 wszLogicalPath: LPCWSTR,
354 wszGroupName: LPCWSTR,
355 wszPath: LPCWSTR,
356 wszFilespec: LPCWSTR,
357 bRecursive: bool,
358 wszAlternateLocation: LPCWSTR,
359 dwBackupTypeMask: DWORD,
360 ) -> HRESULT,
361 fn SetRestoreMethod(
362 method: VSS_RESTOREMETHOD_ENUM,
363 wszService: LPCWSTR,
364 wszUserProcedure: LPCWSTR,
365 writerRestore: VSS_WRITERRESTORE_ENUM,
366 bRebootRequired: bool,
367 ) -> HRESULT,
368 fn AddAlternateLocationMapping(
369 wszSourcePath: LPCWSTR,
370 wszSourceFilespec: LPCWSTR,
371 bRecursive: bool,
372 wszDestination: LPCWSTR,
373 ) -> HRESULT,
374 fn AddComponentDependency(
375 wszForLogicalPath: LPCWSTR,
376 wszForComponentName: LPCWSTR,
377 onWriterId: VSS_ID,
378 wszOnLogicalPath: LPCWSTR,
379 wszOnComponentName: LPCWSTR,
380 ) -> HRESULT,
381 fn SetBackupSchema(
382 dwSchemaMask: DWORD,
383 ) -> HRESULT,
384 fn GetDocument(
385 pDoc: *mut *mut VOID,
386 ) -> HRESULT, fn SaveAsXML(
388 pbstrXML: *mut BSTR,
389 ) -> HRESULT,
390}}
391