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