1 // Copyright © 2015, Brian Vincent
2 // Licensed under the MIT License <LICENSE.md>
3 //! VSS Writer header file
4 ENUM!{enum VSS_USAGE_TYPE {
5     VSS_UT_UNDEFINED = 0,
6     VSS_UT_BOOTABLESYSTEMSTATE = 1,
7     VSS_UT_SYSTEMSERVICE = 2,
8     VSS_UT_USERDATA = 3,
9     VSS_UT_OTHER = 4,
10 }}
11 ENUM!{enum VSS_SOURCE_TYPE {
12     VSS_ST_UNDEFINED = 0,
13     VSS_ST_TRANSACTEDDB = 1,
14     VSS_ST_NONTRANSACTEDDB = 2,
15     VSS_ST_OTHER = 3,
16 }}
17 ENUM!{enum VSS_RESTOREMETHOD_ENUM {
18     VSS_RME_UNDEFINED = 0,
19     VSS_RME_RESTORE_IF_NOT_THERE = 1,
20     VSS_RME_RESTORE_IF_CAN_REPLACE = 2,
21     VSS_RME_STOP_RESTORE_START = 3,
22     VSS_RME_RESTORE_TO_ALTERNATE_LOCATION = 4,
23     VSS_RME_RESTORE_AT_REBOOT = 5,
24     VSS_RME_RESTORE_AT_REBOOT_IF_CANNOT_REPLACE = 6,
25     VSS_RME_CUSTOM = 7,
26     VSS_RME_RESTORE_STOP_START = 8,
27 }}
28 ENUM!{enum VSS_WRITERRESTORE_ENUM {
29     VSS_WRE_UNDEFINED = 0,
30     VSS_WRE_NEVER = 1,
31     VSS_WRE_IF_REPLACE_FAILS = 2,
32     VSS_WRE_ALWAYS = 3,
33 }}
34 ENUM!{enum VSS_COMPONENT_TYPE {
35     VSS_CT_UNDEFINED = 0,
36     VSS_CT_DATABASE = 1,
37     VSS_CT_FILEGROUP = 2,
38 }}
39 ENUM!{enum VSS_ALTERNATE_WRITER_STATE {
40     VSS_AWS_UNDEFINED = 0,
41     VSS_AWS_NO_ALTERNATE_WRITER = 1,
42     VSS_AWS_ALTERNATE_WRITER_EXISTS = 2,
43     VSS_AWS_THIS_IS_ALTERNATE_WRITER = 3,
44 }}
45 pub type VSS_SUBSCRIBE_MASK = ::DWORD;
46 pub const VSS_SM_POST_SNAPSHOT_FLAG: ::DWORD = 0x00000001;
47 pub const VSS_SM_BACKUP_EVENTS_FLAG: ::DWORD = 0x00000002;
48 pub const VSS_SM_RESTORE_EVENTS_FLAG: ::DWORD = 0x00000004;
49 pub const VSS_SM_IO_THROTTLING_FLAG: ::DWORD = 0x00000008;
50 pub const VSS_SM_ALL_FLAGS: ::DWORD = 0xffffffff;
51 ENUM!{enum VSS_RESTORE_TARGET {
52     VSS_RT_UNDEFINED = 0,
53     VSS_RT_ORIGINAL = 1,
54     VSS_RT_ALTERNATE = 2,
55     VSS_RT_DIRECTED = 3,
56     VSS_RT_ORIGINAL_LOCATION = 4,
57 }}
58 ENUM!{enum VSS_FILE_RESTORE_STATUS {
59     VSS_RS_UNDEFINED = 0,
60     VSS_RS_NONE = 1,
61     VSS_RS_ALL = 2,
62     VSS_RS_FAILED = 3,
63 }}
64 pub type VSS_COMPONENT_FLAGS = ::DWORD;
65 pub const VSS_CF_BACKUP_RECOVERY: ::DWORD = 0x00000001;
66 pub const VSS_CF_APP_ROLLBACK_RECOVERY: ::DWORD = 0x00000002;
67 pub const VSS_CF_NOT_SYSTEM_STATE: ::DWORD = 0x00000004;
68 RIDL!(
69 interface IVssWMFiledesc(IVssWMFiledescVtbl): IUnknown(IUnknownVtbl) {
70     fn GetPath(&mut self, pbstrPath: *mut ::BSTR) -> ::HRESULT,
71     fn GetFilespec(&mut self, pbstrFilespec: *mut ::BSTR) -> ::HRESULT,
72     fn GetRecursive(&mut self, pbRecursive: *mut bool) -> ::HRESULT,
73     fn GetAlternateLocation(&mut self, pbstrAlternateLocation: *mut ::BSTR) -> ::HRESULT,
74     fn GetBackupTypeMask(&mut self, pdwTypeMask: *mut ::DWORD) -> ::HRESULT
75 }
76 );
77 RIDL!(
78 interface IVssWMDependency(IVssWMDependencyVtbl): IUnknown(IUnknownVtbl) {
79     fn GetWriterId(&mut self, pWriterId: *mut ::VSS_ID) -> ::HRESULT,
80     fn GetLogicalPath(&mut self, pbstrLogicalPath: *mut ::BSTR) -> ::HRESULT,
81     fn GetComponentName(&mut self, pbstrComponentName: *mut ::BSTR) -> ::HRESULT
82 }
83 );
84 RIDL!(
85 interface IVssComponent(IVssComponentVtbl): IUnknown(IUnknownVtbl) {
86     fn GetLogicalPath(&mut self, pbstrPath: *mut ::BSTR) -> ::HRESULT,
87     fn GetComponentType(&mut self, pct: *mut ::VSS_COMPONENT_TYPE) -> ::HRESULT,
88     fn GetComponentName(&mut self, pbstrName: *mut ::BSTR) -> ::HRESULT,
89     fn GetBackupSucceeded(&mut self, pbSucceeded: *mut bool) -> ::HRESULT,
90     fn GetAlternateLocationMappingCount(&mut self, pcMappings: *mut ::UINT) -> ::HRESULT,
91     fn GetAlternateLocationMapping(
92         &mut self, iMapping: ::UINT, ppFiledesc: *mut *mut ::IVssWMFiledesc
93     ) -> ::HRESULT,
94     fn SetBackupMetadata(&mut self, wszData: ::LPCWSTR) -> ::HRESULT,
95     fn GetBackupMetadata(&mut self, pbstrData: *mut ::BSTR) -> ::HRESULT,
96     fn AddPartialFile(
97         &mut self, wszPath: ::LPCWSTR, wszFilename: ::LPCWSTR, wszRanges: ::LPCWSTR,
98         wszMetadata: ::LPCWSTR
99     ) -> ::HRESULT,
100     fn GetPartialFileCount(&mut self, pcPartialFiles: *mut ::UINT) -> ::HRESULT,
101     fn GetPartialFile(
102         &mut self, iPartialFile: ::UINT, pbstrPath: *mut ::BSTR, pbstrFilename: *mut ::BSTR,
103         pbstrRange: *mut ::BSTR, pbstrMetadata: *mut ::BSTR
104     ) -> ::HRESULT,
105     fn IsSelectedForRestore(&mut self, pbSelectedForRestore: *mut bool) -> ::HRESULT,
106     fn GetAdditionalRestores(&mut self, pbAdditionalRestores: *mut bool) -> ::HRESULT,
107     fn GetNewTargetCount(&mut self, pcNewTarget: *mut ::UINT) -> ::HRESULT,
108     fn GetNewTarget(
109         &mut self, iNewTarget: ::UINT, ppFiledesc: *mut *mut ::IVssWMFiledesc
110     ) -> ::HRESULT,
111     fn AddDirectedTarget(
112         &mut self, wszSourcePath: ::LPCWSTR, wszSourceFilename: ::LPCWSTR,
113         wszSourceRangeList: ::LPCWSTR, wszDestinationPath: ::LPCWSTR,
114         wszDestinationFilename: ::LPCWSTR, wszDestinationRangeList: ::LPCWSTR
115     ) -> ::HRESULT,
116     fn GetDirectedTargetCount(&mut self, pcDirectedTarget: *mut ::UINT) -> ::HRESULT,
117     fn GetDirectedTarget(
118         &mut self, iDirectedTarget: ::UINT, pbstrSourcePath: *mut ::BSTR,
119         pbstrSourceFileName: *mut ::BSTR, pbstrSourceRangeList: *mut ::BSTR,
120         pbstrDestinationPath: *mut ::BSTR, pbstrDestinationFilename: *mut ::BSTR,
121         pbstrDestinationRangeList: *mut ::BSTR
122     ) -> ::HRESULT,
123     fn SetRestoreMetadata(&mut self, wszRestoreMetadata: ::LPCWSTR) -> ::HRESULT,
124     fn GetRestoreMetadata(&mut self, pbstrRestoreMetadata: *mut ::BSTR) -> ::HRESULT,
125     fn SetRestoreTarget(&mut self, target: ::VSS_RESTORE_TARGET) -> ::HRESULT,
126     fn GetRestoreTarget(&mut self, pTarget: *mut ::VSS_RESTORE_TARGET) -> ::HRESULT,
127     fn SetPreRestoreFailureMsg(&mut self, wszPreRestoreFailureMsg: ::LPCWSTR) -> ::HRESULT,
128     fn GetPreRestoreFailureMsg(&mut self, pbstrPreRestoreFailureMsg: *mut ::BSTR) -> ::HRESULT,
129     fn SetPostRestoreFailureMsg(&mut self, wszPostRestoreFailureMsg: ::LPCWSTR) -> ::HRESULT,
130     fn GetPostRestoreFailureMsg(&mut self, pbstrPostRestoreFailureMsg: *mut ::BSTR) -> ::HRESULT,
131     fn SetBackupStamp(&mut self, wszBackupStamp: ::LPCWSTR) -> ::HRESULT,
132     fn GetBackupStamp(&mut self, pbstrBackupStamp: *mut ::BSTR) -> ::HRESULT,
133     fn GetPreviousBackupStamp(&mut self, pbstrBackupStamp: *mut ::BSTR) -> ::HRESULT,
134     fn GetBackupOptions(&mut self, pbstrBackupOptions: *mut ::BSTR) -> ::HRESULT,
135     fn GetRestoreOptions(&mut self, pbstrRestoreOptions: *mut ::BSTR) -> ::HRESULT,
136     fn GetRestoreSubcomponentCount(&mut self, pcRestoreSubcomponent: *mut ::UINT) -> ::HRESULT,
137     fn GetRestoreSubcomponent(
138         &mut self, iComponent: ::UINT, pbstrLogicalPath: *mut ::BSTR,
139         pbstrComponentName: *mut ::BSTR, pbRepair: *mut bool
140     ) -> ::HRESULT,
141     fn GetFileRestoreStatus(&mut self, pStatus: *mut VSS_FILE_RESTORE_STATUS) -> ::HRESULT,
142     fn AddDifferencedFilesByLastModifyTime(
143         &mut self, wszPath: ::LPCWSTR, wszFilespec: ::LPCWSTR, bRecursive: ::BOOL,
144         ftLastModifyTime: ::FILETIME
145     ) -> ::HRESULT,
146     fn AddDifferencedFilesByLastModifyLSN(
147         &mut self, wszPath: ::LPCWSTR, wszFilespec: ::LPCWSTR, bRecursive: ::BOOL,
148         bstrLsnString: ::BSTR
149     ) -> ::HRESULT,
150     fn GetDifferencedFilesCount(&mut self, pcDifferencedFiles: *mut ::UINT) -> ::HRESULT,
151     fn GetDifferencedFile(
152         &mut self, iDifferencedFile: ::UINT, pbstrPath: *mut ::BSTR, pbstrFilespec: *mut ::BSTR,
153         pbRecursive: *mut ::BOOL, pbstrLsnString: *mut ::BSTR, pftLastModifyTime: *mut ::FILETIME
154     ) -> ::HRESULT
155 }
156 );
157 RIDL!(
158 interface IVssWriterComponents(IVssWriterComponentsVtbl) {
159     fn GetComponentCount(&mut self, pcComponents: *mut ::UINT) -> ::HRESULT,
160     fn GetWriterInfo(
161         &mut self, pidInstance: *mut ::VSS_ID, pidWriter: *mut ::VSS_ID
162     ) -> ::HRESULT,
163     fn GetComponent(
164         &mut self, iComponent: ::UINT, ppComponent: *mut *mut ::IVssComponent
165     ) -> ::HRESULT
166 }
167 );
168 RIDL!(
169 interface IVssComponentEx(IVssComponentExVtbl): IVssComponent(IVssComponentVtbl) {
170     fn SetPrepareForBackupFailureMsg(&mut self, wszFailureMsg: ::LPCWSTR) -> ::HRESULT,
171     fn SetPostSnapshotFailureMsg(&mut self, wszFailureMsg: ::LPCWSTR) -> ::HRESULT,
172     fn GetPrepareForBackupFailureMsg(&mut self, pbstrFailureMsg: *mut ::BSTR) -> ::HRESULT,
173     fn GetPostSnapshotFailureMsg(&mut self, pbstrFailureMsg: *mut ::BSTR) -> ::HRESULT,
174     fn GetAuthoritativeRestore(&mut self, pbAuth: *mut bool) -> ::HRESULT,
175     fn GetRollForward(
176         &mut self, pRollType: *mut ::VSS_ROLLFORWARD_TYPE, pbstrPoint: *mut ::BSTR
177     ) -> ::HRESULT,
178     fn GetRestoreName(&mut self, pbstrName: *mut ::BSTR) -> ::HRESULT
179 }
180 );
181 RIDL!(
182 interface IVssComponentEx2(IVssComponentEx2Vtbl): IVssComponentEx(IVssComponentExVtbl) {
183     fn SetFailure(
184         &mut self, hr: ::HRESULT, hrApplication: ::HRESULT, wszApplicationMessage: ::LPCWSTR,
185         dwReserved: ::DWORD
186     ) -> ::HRESULT,
187     fn GetFailure(
188         &mut self, phr: *mut ::HRESULT, phrApplication: *mut ::HRESULT,
189         pbstrApplicationMessage: *mut ::BSTR, pdwReserved: *mut ::DWORD
190     ) -> ::HRESULT
191 }
192 );
193 RIDL!(
194 interface IVssCreateWriterMetadata(IVssCreateWriterMetadataVtbl) {
195     fn AddIncludeFiles(
196         &mut self, wszPath: ::LPCWSTR, wszFilespec: ::LPCWSTR, bRecursive: bool,
197         wszAlternateLocation: ::LPCWSTR
198     ) -> ::HRESULT,
199     fn AddExcludeFiles(
200         &mut self, wszPath: ::LPCWSTR, wszFilespec: ::LPCWSTR, bRecursive: bool
201     ) -> ::HRESULT,
202     fn AddComponent(
203         &mut self, ct: ::VSS_COMPONENT_TYPE, wszLogicalPath: ::LPCWSTR,
204         wszComponentName: ::LPCWSTR, wszCaption: ::LPCWSTR, pbIcon: *const ::BYTE, cbIcon: ::UINT,
205         bRestoreMetadata: bool, bNotifyOnBackupComplete: bool, bSelectableForRestore: bool,
206         dwComponentFlags: ::DWORD
207     ) -> ::HRESULT,
208     fn AddDatabaseFiles(
209         &mut self, wszLogicalPath: ::LPCWSTR, wszDatabaseName: ::LPCWSTR, wszPath: ::LPCWSTR,
210         wszFilespec: ::LPCWSTR, dwBackupTypeMask: ::DWORD
211     ) -> ::HRESULT,
212     fn AddDatabaseLogFiles(&mut self, wszLogicalPath: ::LPCWSTR, wszDatabaseName: ::LPCWSTR,
213         wszPath: ::LPCWSTR, wszFilespec: ::LPCWSTR, dwBackupTypeMask: ::DWORD
214     ) -> ::HRESULT,
215     fn AddFilesToFileGroup(&mut self, wszLogicalPath: ::LPCWSTR, wszGroupName: ::LPCWSTR,
216         wszPath: ::LPCWSTR, wszFilespec: ::LPCWSTR, bRecursive: bool,
217         wszAlternateLocation: ::LPCWSTR, dwBackupTypeMask: ::DWORD
218     ) -> ::HRESULT,
219     fn SetRestoreMethod(&mut self, method: ::VSS_RESTOREMETHOD_ENUM, wszService: ::LPCWSTR,
220         wszUserProcedure: ::LPCWSTR, writerRestore: ::VSS_WRITERRESTORE_ENUM,
221         bRebootRequired: bool
222     ) -> ::HRESULT,
223     fn AddAlternateLocationMapping(&mut self, wszSourcePath: ::LPCWSTR,
224         wszSourceFilespec: ::LPCWSTR, bRecursive: bool, wszDestination: ::LPCWSTR
225     ) -> ::HRESULT,
226     fn AddComponentDependency(&mut self, wszForLogicalPath: ::LPCWSTR,
227         wszForComponentName: ::LPCWSTR, onWriterId: ::VSS_ID, wszOnLogicalPath: ::LPCWSTR,
228         wszOnComponentName: ::LPCWSTR
229     ) -> ::HRESULT,
230     fn SetBackupSchema(&mut self, dwSchemaMask: ::DWORD) -> ::HRESULT,
231     fn GetDocument(&mut self, pDoc: *mut *mut ::VOID) -> ::HRESULT, //TODO IXMLDOMDocument
232     fn SaveAsXML(&mut self, pbstrXML: *mut ::BSTR) -> ::HRESULT
233 }
234 );
235 //IVssCreateWriterMetadataEx
236 //IVssWriterImpl
237 //IVssCreateExpressWriterMetadata
238 //IVssExpressWriter
239 //CVssWriter
240 //CVssWriterEx
241 //CVssWriterEx2
242