// Copyright © 2015, Brian Vincent // Licensed under the MIT License //! VSS Writer header file ENUM!{enum VSS_USAGE_TYPE { VSS_UT_UNDEFINED = 0, VSS_UT_BOOTABLESYSTEMSTATE = 1, VSS_UT_SYSTEMSERVICE = 2, VSS_UT_USERDATA = 3, VSS_UT_OTHER = 4, }} ENUM!{enum VSS_SOURCE_TYPE { VSS_ST_UNDEFINED = 0, VSS_ST_TRANSACTEDDB = 1, VSS_ST_NONTRANSACTEDDB = 2, VSS_ST_OTHER = 3, }} ENUM!{enum VSS_RESTOREMETHOD_ENUM { VSS_RME_UNDEFINED = 0, VSS_RME_RESTORE_IF_NOT_THERE = 1, VSS_RME_RESTORE_IF_CAN_REPLACE = 2, VSS_RME_STOP_RESTORE_START = 3, VSS_RME_RESTORE_TO_ALTERNATE_LOCATION = 4, VSS_RME_RESTORE_AT_REBOOT = 5, VSS_RME_RESTORE_AT_REBOOT_IF_CANNOT_REPLACE = 6, VSS_RME_CUSTOM = 7, VSS_RME_RESTORE_STOP_START = 8, }} ENUM!{enum VSS_WRITERRESTORE_ENUM { VSS_WRE_UNDEFINED = 0, VSS_WRE_NEVER = 1, VSS_WRE_IF_REPLACE_FAILS = 2, VSS_WRE_ALWAYS = 3, }} ENUM!{enum VSS_COMPONENT_TYPE { VSS_CT_UNDEFINED = 0, VSS_CT_DATABASE = 1, VSS_CT_FILEGROUP = 2, }} ENUM!{enum VSS_ALTERNATE_WRITER_STATE { VSS_AWS_UNDEFINED = 0, VSS_AWS_NO_ALTERNATE_WRITER = 1, VSS_AWS_ALTERNATE_WRITER_EXISTS = 2, VSS_AWS_THIS_IS_ALTERNATE_WRITER = 3, }} pub type VSS_SUBSCRIBE_MASK = ::DWORD; pub const VSS_SM_POST_SNAPSHOT_FLAG: ::DWORD = 0x00000001; pub const VSS_SM_BACKUP_EVENTS_FLAG: ::DWORD = 0x00000002; pub const VSS_SM_RESTORE_EVENTS_FLAG: ::DWORD = 0x00000004; pub const VSS_SM_IO_THROTTLING_FLAG: ::DWORD = 0x00000008; pub const VSS_SM_ALL_FLAGS: ::DWORD = 0xffffffff; ENUM!{enum VSS_RESTORE_TARGET { VSS_RT_UNDEFINED = 0, VSS_RT_ORIGINAL = 1, VSS_RT_ALTERNATE = 2, VSS_RT_DIRECTED = 3, VSS_RT_ORIGINAL_LOCATION = 4, }} ENUM!{enum VSS_FILE_RESTORE_STATUS { VSS_RS_UNDEFINED = 0, VSS_RS_NONE = 1, VSS_RS_ALL = 2, VSS_RS_FAILED = 3, }} pub type VSS_COMPONENT_FLAGS = ::DWORD; pub const VSS_CF_BACKUP_RECOVERY: ::DWORD = 0x00000001; pub const VSS_CF_APP_ROLLBACK_RECOVERY: ::DWORD = 0x00000002; pub const VSS_CF_NOT_SYSTEM_STATE: ::DWORD = 0x00000004; RIDL!( interface IVssWMFiledesc(IVssWMFiledescVtbl): IUnknown(IUnknownVtbl) { fn GetPath(&mut self, pbstrPath: *mut ::BSTR) -> ::HRESULT, fn GetFilespec(&mut self, pbstrFilespec: *mut ::BSTR) -> ::HRESULT, fn GetRecursive(&mut self, pbRecursive: *mut bool) -> ::HRESULT, fn GetAlternateLocation(&mut self, pbstrAlternateLocation: *mut ::BSTR) -> ::HRESULT, fn GetBackupTypeMask(&mut self, pdwTypeMask: *mut ::DWORD) -> ::HRESULT } ); RIDL!( interface IVssWMDependency(IVssWMDependencyVtbl): IUnknown(IUnknownVtbl) { fn GetWriterId(&mut self, pWriterId: *mut ::VSS_ID) -> ::HRESULT, fn GetLogicalPath(&mut self, pbstrLogicalPath: *mut ::BSTR) -> ::HRESULT, fn GetComponentName(&mut self, pbstrComponentName: *mut ::BSTR) -> ::HRESULT } ); RIDL!( interface IVssComponent(IVssComponentVtbl): IUnknown(IUnknownVtbl) { fn GetLogicalPath(&mut self, pbstrPath: *mut ::BSTR) -> ::HRESULT, fn GetComponentType(&mut self, pct: *mut ::VSS_COMPONENT_TYPE) -> ::HRESULT, fn GetComponentName(&mut self, pbstrName: *mut ::BSTR) -> ::HRESULT, fn GetBackupSucceeded(&mut self, pbSucceeded: *mut bool) -> ::HRESULT, fn GetAlternateLocationMappingCount(&mut self, pcMappings: *mut ::UINT) -> ::HRESULT, fn GetAlternateLocationMapping( &mut self, iMapping: ::UINT, ppFiledesc: *mut *mut ::IVssWMFiledesc ) -> ::HRESULT, fn SetBackupMetadata(&mut self, wszData: ::LPCWSTR) -> ::HRESULT, fn GetBackupMetadata(&mut self, pbstrData: *mut ::BSTR) -> ::HRESULT, fn AddPartialFile( &mut self, wszPath: ::LPCWSTR, wszFilename: ::LPCWSTR, wszRanges: ::LPCWSTR, wszMetadata: ::LPCWSTR ) -> ::HRESULT, fn GetPartialFileCount(&mut self, pcPartialFiles: *mut ::UINT) -> ::HRESULT, fn GetPartialFile( &mut self, iPartialFile: ::UINT, pbstrPath: *mut ::BSTR, pbstrFilename: *mut ::BSTR, pbstrRange: *mut ::BSTR, pbstrMetadata: *mut ::BSTR ) -> ::HRESULT, fn IsSelectedForRestore(&mut self, pbSelectedForRestore: *mut bool) -> ::HRESULT, fn GetAdditionalRestores(&mut self, pbAdditionalRestores: *mut bool) -> ::HRESULT, fn GetNewTargetCount(&mut self, pcNewTarget: *mut ::UINT) -> ::HRESULT, fn GetNewTarget( &mut self, iNewTarget: ::UINT, ppFiledesc: *mut *mut ::IVssWMFiledesc ) -> ::HRESULT, fn AddDirectedTarget( &mut self, wszSourcePath: ::LPCWSTR, wszSourceFilename: ::LPCWSTR, wszSourceRangeList: ::LPCWSTR, wszDestinationPath: ::LPCWSTR, wszDestinationFilename: ::LPCWSTR, wszDestinationRangeList: ::LPCWSTR ) -> ::HRESULT, fn GetDirectedTargetCount(&mut self, pcDirectedTarget: *mut ::UINT) -> ::HRESULT, fn GetDirectedTarget( &mut self, iDirectedTarget: ::UINT, pbstrSourcePath: *mut ::BSTR, pbstrSourceFileName: *mut ::BSTR, pbstrSourceRangeList: *mut ::BSTR, pbstrDestinationPath: *mut ::BSTR, pbstrDestinationFilename: *mut ::BSTR, pbstrDestinationRangeList: *mut ::BSTR ) -> ::HRESULT, fn SetRestoreMetadata(&mut self, wszRestoreMetadata: ::LPCWSTR) -> ::HRESULT, fn GetRestoreMetadata(&mut self, pbstrRestoreMetadata: *mut ::BSTR) -> ::HRESULT, fn SetRestoreTarget(&mut self, target: ::VSS_RESTORE_TARGET) -> ::HRESULT, fn GetRestoreTarget(&mut self, pTarget: *mut ::VSS_RESTORE_TARGET) -> ::HRESULT, fn SetPreRestoreFailureMsg(&mut self, wszPreRestoreFailureMsg: ::LPCWSTR) -> ::HRESULT, fn GetPreRestoreFailureMsg(&mut self, pbstrPreRestoreFailureMsg: *mut ::BSTR) -> ::HRESULT, fn SetPostRestoreFailureMsg(&mut self, wszPostRestoreFailureMsg: ::LPCWSTR) -> ::HRESULT, fn GetPostRestoreFailureMsg(&mut self, pbstrPostRestoreFailureMsg: *mut ::BSTR) -> ::HRESULT, fn SetBackupStamp(&mut self, wszBackupStamp: ::LPCWSTR) -> ::HRESULT, fn GetBackupStamp(&mut self, pbstrBackupStamp: *mut ::BSTR) -> ::HRESULT, fn GetPreviousBackupStamp(&mut self, pbstrBackupStamp: *mut ::BSTR) -> ::HRESULT, fn GetBackupOptions(&mut self, pbstrBackupOptions: *mut ::BSTR) -> ::HRESULT, fn GetRestoreOptions(&mut self, pbstrRestoreOptions: *mut ::BSTR) -> ::HRESULT, fn GetRestoreSubcomponentCount(&mut self, pcRestoreSubcomponent: *mut ::UINT) -> ::HRESULT, fn GetRestoreSubcomponent( &mut self, iComponent: ::UINT, pbstrLogicalPath: *mut ::BSTR, pbstrComponentName: *mut ::BSTR, pbRepair: *mut bool ) -> ::HRESULT, fn GetFileRestoreStatus(&mut self, pStatus: *mut VSS_FILE_RESTORE_STATUS) -> ::HRESULT, fn AddDifferencedFilesByLastModifyTime( &mut self, wszPath: ::LPCWSTR, wszFilespec: ::LPCWSTR, bRecursive: ::BOOL, ftLastModifyTime: ::FILETIME ) -> ::HRESULT, fn AddDifferencedFilesByLastModifyLSN( &mut self, wszPath: ::LPCWSTR, wszFilespec: ::LPCWSTR, bRecursive: ::BOOL, bstrLsnString: ::BSTR ) -> ::HRESULT, fn GetDifferencedFilesCount(&mut self, pcDifferencedFiles: *mut ::UINT) -> ::HRESULT, fn GetDifferencedFile( &mut self, iDifferencedFile: ::UINT, pbstrPath: *mut ::BSTR, pbstrFilespec: *mut ::BSTR, pbRecursive: *mut ::BOOL, pbstrLsnString: *mut ::BSTR, pftLastModifyTime: *mut ::FILETIME ) -> ::HRESULT } ); RIDL!( interface IVssWriterComponents(IVssWriterComponentsVtbl) { fn GetComponentCount(&mut self, pcComponents: *mut ::UINT) -> ::HRESULT, fn GetWriterInfo( &mut self, pidInstance: *mut ::VSS_ID, pidWriter: *mut ::VSS_ID ) -> ::HRESULT, fn GetComponent( &mut self, iComponent: ::UINT, ppComponent: *mut *mut ::IVssComponent ) -> ::HRESULT } ); RIDL!( interface IVssComponentEx(IVssComponentExVtbl): IVssComponent(IVssComponentVtbl) { fn SetPrepareForBackupFailureMsg(&mut self, wszFailureMsg: ::LPCWSTR) -> ::HRESULT, fn SetPostSnapshotFailureMsg(&mut self, wszFailureMsg: ::LPCWSTR) -> ::HRESULT, fn GetPrepareForBackupFailureMsg(&mut self, pbstrFailureMsg: *mut ::BSTR) -> ::HRESULT, fn GetPostSnapshotFailureMsg(&mut self, pbstrFailureMsg: *mut ::BSTR) -> ::HRESULT, fn GetAuthoritativeRestore(&mut self, pbAuth: *mut bool) -> ::HRESULT, fn GetRollForward( &mut self, pRollType: *mut ::VSS_ROLLFORWARD_TYPE, pbstrPoint: *mut ::BSTR ) -> ::HRESULT, fn GetRestoreName(&mut self, pbstrName: *mut ::BSTR) -> ::HRESULT } ); RIDL!( interface IVssComponentEx2(IVssComponentEx2Vtbl): IVssComponentEx(IVssComponentExVtbl) { fn SetFailure( &mut self, hr: ::HRESULT, hrApplication: ::HRESULT, wszApplicationMessage: ::LPCWSTR, dwReserved: ::DWORD ) -> ::HRESULT, fn GetFailure( &mut self, phr: *mut ::HRESULT, phrApplication: *mut ::HRESULT, pbstrApplicationMessage: *mut ::BSTR, pdwReserved: *mut ::DWORD ) -> ::HRESULT } ); RIDL!( interface IVssCreateWriterMetadata(IVssCreateWriterMetadataVtbl) { fn AddIncludeFiles( &mut self, wszPath: ::LPCWSTR, wszFilespec: ::LPCWSTR, bRecursive: bool, wszAlternateLocation: ::LPCWSTR ) -> ::HRESULT, fn AddExcludeFiles( &mut self, wszPath: ::LPCWSTR, wszFilespec: ::LPCWSTR, bRecursive: bool ) -> ::HRESULT, fn AddComponent( &mut self, ct: ::VSS_COMPONENT_TYPE, wszLogicalPath: ::LPCWSTR, wszComponentName: ::LPCWSTR, wszCaption: ::LPCWSTR, pbIcon: *const ::BYTE, cbIcon: ::UINT, bRestoreMetadata: bool, bNotifyOnBackupComplete: bool, bSelectableForRestore: bool, dwComponentFlags: ::DWORD ) -> ::HRESULT, fn AddDatabaseFiles( &mut self, wszLogicalPath: ::LPCWSTR, wszDatabaseName: ::LPCWSTR, wszPath: ::LPCWSTR, wszFilespec: ::LPCWSTR, dwBackupTypeMask: ::DWORD ) -> ::HRESULT, fn AddDatabaseLogFiles(&mut self, wszLogicalPath: ::LPCWSTR, wszDatabaseName: ::LPCWSTR, wszPath: ::LPCWSTR, wszFilespec: ::LPCWSTR, dwBackupTypeMask: ::DWORD ) -> ::HRESULT, fn AddFilesToFileGroup(&mut self, wszLogicalPath: ::LPCWSTR, wszGroupName: ::LPCWSTR, wszPath: ::LPCWSTR, wszFilespec: ::LPCWSTR, bRecursive: bool, wszAlternateLocation: ::LPCWSTR, dwBackupTypeMask: ::DWORD ) -> ::HRESULT, fn SetRestoreMethod(&mut self, method: ::VSS_RESTOREMETHOD_ENUM, wszService: ::LPCWSTR, wszUserProcedure: ::LPCWSTR, writerRestore: ::VSS_WRITERRESTORE_ENUM, bRebootRequired: bool ) -> ::HRESULT, fn AddAlternateLocationMapping(&mut self, wszSourcePath: ::LPCWSTR, wszSourceFilespec: ::LPCWSTR, bRecursive: bool, wszDestination: ::LPCWSTR ) -> ::HRESULT, fn AddComponentDependency(&mut self, wszForLogicalPath: ::LPCWSTR, wszForComponentName: ::LPCWSTR, onWriterId: ::VSS_ID, wszOnLogicalPath: ::LPCWSTR, wszOnComponentName: ::LPCWSTR ) -> ::HRESULT, fn SetBackupSchema(&mut self, dwSchemaMask: ::DWORD) -> ::HRESULT, fn GetDocument(&mut self, pDoc: *mut *mut ::VOID) -> ::HRESULT, //TODO IXMLDOMDocument fn SaveAsXML(&mut self, pbstrXML: *mut ::BSTR) -> ::HRESULT } ); //IVssCreateWriterMetadataEx //IVssWriterImpl //IVssCreateExpressWriterMetadata //IVssExpressWriter //CVssWriter //CVssWriterEx //CVssWriterEx2