// Licensed under the Apache License, Version 2.0 // or the MIT license // , at your option. // All files in the project carrying such notice may not be copied, modified, or distributed // except according to those terms. //! Declaration of Writer use shared::minwindef::{BOOL, BYTE, DWORD, FILETIME, UINT}; use shared::wtypes::BSTR; use um::unknwnbase::{IUnknown, IUnknownVtbl}; use um::vss::{VSS_ID, VSS_ROLLFORWARD_TYPE}; use um::winnt::{HRESULT, LPCWSTR, VOID}; 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, }} ENUM!{enum VSS_SUBSCRIBE_MASK { VSS_SM_POST_SNAPSHOT_FLAG = 0x00000001, VSS_SM_BACKUP_EVENTS_FLAG = 0x00000002, VSS_SM_RESTORE_EVENTS_FLAG = 0x00000004, VSS_SM_IO_THROTTLING_FLAG = 0x00000008, VSS_SM_ALL_FLAGS = 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, }} ENUM!{enum VSS_COMPONENT_FLAGS { VSS_CF_BACKUP_RECOVERY = 0x00000001, VSS_CF_APP_ROLLBACK_RECOVERY = 0x00000002, VSS_CF_NOT_SYSTEM_STATE = 0x00000004, }} RIDL!{#[uuid(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)] interface IVssWMFiledesc(IVssWMFiledescVtbl): IUnknown(IUnknownVtbl) { fn GetPath( pbstrPath: *mut BSTR, ) -> HRESULT, fn GetFilespec( pbstrFilespec: *mut BSTR, ) -> HRESULT, fn GetRecursive( pbRecursive: *mut bool, ) -> HRESULT, fn GetAlternateLocation( pbstrAlternateLocation: *mut BSTR, ) -> HRESULT, fn GetBackupTypeMask( pdwTypeMask: *mut DWORD, ) -> HRESULT, }} RIDL!{#[uuid(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)] interface IVssWMDependency(IVssWMDependencyVtbl): IUnknown(IUnknownVtbl) { fn GetWriterId( pWriterId: *mut VSS_ID, ) -> HRESULT, fn GetLogicalPath( pbstrLogicalPath: *mut BSTR, ) -> HRESULT, fn GetComponentName( pbstrComponentName: *mut BSTR, ) -> HRESULT, }} RIDL!{#[uuid(0xd2c72c96, 0xc121, 0x4518, 0xb6, 0x27, 0xe5, 0xa9, 0x3d, 0x01, 0x0e, 0xad)] interface IVssComponent(IVssComponentVtbl): IUnknown(IUnknownVtbl) { fn GetLogicalPath( pbstrPath: *mut BSTR, ) -> HRESULT, fn GetComponentType( pct: *mut VSS_COMPONENT_TYPE, ) -> HRESULT, fn GetComponentName( pbstrName: *mut BSTR, ) -> HRESULT, fn GetBackupSucceeded( pbSucceeded: *mut bool, ) -> HRESULT, fn GetAlternateLocationMappingCount( pcMappings: *mut UINT, ) -> HRESULT, fn GetAlternateLocationMapping( iMapping: UINT, ppFiledesc: *mut *mut IVssWMFiledesc, ) -> HRESULT, fn SetBackupMetadata( wszData: LPCWSTR, ) -> HRESULT, fn GetBackupMetadata( pbstrData: *mut BSTR, ) -> HRESULT, fn AddPartialFile( wszPath: LPCWSTR, wszFilename: LPCWSTR, wszRanges: LPCWSTR, wszMetadata: LPCWSTR, ) -> HRESULT, fn GetPartialFileCount( pcPartialFiles: *mut UINT, ) -> HRESULT, fn GetPartialFile( iPartialFile: UINT, pbstrPath: *mut BSTR, pbstrFilename: *mut BSTR, pbstrRange: *mut BSTR, pbstrMetadata: *mut BSTR, ) -> HRESULT, fn IsSelectedForRestore( pbSelectedForRestore: *mut bool, ) -> HRESULT, fn GetAdditionalRestores( pbAdditionalRestores: *mut bool, ) -> HRESULT, fn GetNewTargetCount( pcNewTarget: *mut UINT, ) -> HRESULT, fn GetNewTarget( iNewTarget: UINT, ppFiledesc: *mut *mut IVssWMFiledesc, ) -> HRESULT, fn AddDirectedTarget( wszSourcePath: LPCWSTR, wszSourceFilename: LPCWSTR, wszSourceRangeList: LPCWSTR, wszDestinationPath: LPCWSTR, wszDestinationFilename: LPCWSTR, wszDestinationRangeList: LPCWSTR, ) -> HRESULT, fn GetDirectedTargetCount( pcDirectedTarget: *mut UINT, ) -> HRESULT, fn GetDirectedTarget( iDirectedTarget: UINT, pbstrSourcePath: *mut BSTR, pbstrSourceFileName: *mut BSTR, pbstrSourceRangeList: *mut BSTR, pbstrDestinationPath: *mut BSTR, pbstrDestinationFilename: *mut BSTR, pbstrDestinationRangeList: *mut BSTR, ) -> HRESULT, fn SetRestoreMetadata( wszRestoreMetadata: LPCWSTR, ) -> HRESULT, fn GetRestoreMetadata( pbstrRestoreMetadata: *mut BSTR, ) -> HRESULT, fn SetRestoreTarget( target: VSS_RESTORE_TARGET, ) -> HRESULT, fn GetRestoreTarget( pTarget: *mut VSS_RESTORE_TARGET, ) -> HRESULT, fn SetPreRestoreFailureMsg( wszPreRestoreFailureMsg: LPCWSTR, ) -> HRESULT, fn GetPreRestoreFailureMsg( pbstrPreRestoreFailureMsg: *mut BSTR, ) -> HRESULT, fn SetPostRestoreFailureMsg( wszPostRestoreFailureMsg: LPCWSTR, ) -> HRESULT, fn GetPostRestoreFailureMsg( pbstrPostRestoreFailureMsg: *mut BSTR, ) -> HRESULT, fn SetBackupStamp( wszBackupStamp: LPCWSTR, ) -> HRESULT, fn GetBackupStamp( pbstrBackupStamp: *mut BSTR, ) -> HRESULT, fn GetPreviousBackupStamp( pbstrBackupStamp: *mut BSTR, ) -> HRESULT, fn GetBackupOptions( pbstrBackupOptions: *mut BSTR, ) -> HRESULT, fn GetRestoreOptions( pbstrRestoreOptions: *mut BSTR, ) -> HRESULT, fn GetRestoreSubcomponentCount( pcRestoreSubcomponent: *mut UINT, ) -> HRESULT, fn GetRestoreSubcomponent( iComponent: UINT, pbstrLogicalPath: *mut BSTR, pbstrComponentName: *mut BSTR, pbRepair: *mut bool, ) -> HRESULT, fn GetFileRestoreStatus( pStatus: *mut VSS_FILE_RESTORE_STATUS, ) -> HRESULT, fn AddDifferencedFilesByLastModifyTime( wszPath: LPCWSTR, wszFilespec: LPCWSTR, bRecursive: BOOL, ftLastModifyTime: FILETIME, ) -> HRESULT, fn AddDifferencedFilesByLastModifyLSN( wszPath: LPCWSTR, wszFilespec: LPCWSTR, bRecursive: BOOL, bstrLsnString: BSTR, ) -> HRESULT, fn GetDifferencedFilesCount( pcDifferencedFiles: *mut UINT, ) -> HRESULT, fn GetDifferencedFile( iDifferencedFile: UINT, pbstrPath: *mut BSTR, pbstrFilespec: *mut BSTR, pbRecursive: *mut BOOL, pbstrLsnString: *mut BSTR, pftLastModifyTime: *mut FILETIME, ) -> HRESULT, }} RIDL!{#[uuid(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)] interface IVssWriterComponents(IVssWriterComponentsVtbl) { fn GetComponentCount( pcComponents: *mut UINT, ) -> HRESULT, fn GetWriterInfo( pidInstance: *mut VSS_ID, pidWriter: *mut VSS_ID, ) -> HRESULT, fn GetComponent( iComponent: UINT, ppComponent: *mut *mut IVssComponent, ) -> HRESULT, }} RIDL!{#[uuid(0x156c8b5e, 0xf131, 0x4bd7, 0x9c, 0x97, 0xd1, 0x92, 0x3b, 0xe7, 0xe1, 0xfa)] interface IVssComponentEx(IVssComponentExVtbl): IVssComponent(IVssComponentVtbl) { fn SetPrepareForBackupFailureMsg( wszFailureMsg: LPCWSTR, ) -> HRESULT, fn SetPostSnapshotFailureMsg( wszFailureMsg: LPCWSTR, ) -> HRESULT, fn GetPrepareForBackupFailureMsg( pbstrFailureMsg: *mut BSTR, ) -> HRESULT, fn GetPostSnapshotFailureMsg( pbstrFailureMsg: *mut BSTR, ) -> HRESULT, fn GetAuthoritativeRestore( pbAuth: *mut bool, ) -> HRESULT, fn GetRollForward( pRollType: *mut VSS_ROLLFORWARD_TYPE, pbstrPoint: *mut BSTR, ) -> HRESULT, fn GetRestoreName( pbstrName: *mut BSTR, ) -> HRESULT, }} RIDL!{#[uuid(0x3b5be0f2, 0x07a9, 0x4e4b, 0xbd, 0xd3, 0xcf, 0xdc, 0x8e, 0x2c, 0x0d, 0x2d)] interface IVssComponentEx2(IVssComponentEx2Vtbl): IVssComponentEx(IVssComponentExVtbl) { fn SetFailure( hr: HRESULT, hrApplication: HRESULT, wszApplicationMessage: LPCWSTR, dwReserved: DWORD, ) -> HRESULT, fn GetFailure( phr: *mut HRESULT, phrApplication: *mut HRESULT, pbstrApplicationMessage: *mut BSTR, pdwReserved: *mut DWORD, ) -> HRESULT, }} RIDL!{#[uuid(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)] interface IVssCreateWriterMetadata(IVssCreateWriterMetadataVtbl) { fn AddIncludeFiles( wszPath: LPCWSTR, wszFilespec: LPCWSTR, bRecursive: bool, wszAlternateLocation: LPCWSTR, ) -> HRESULT, fn AddExcludeFiles( wszPath: LPCWSTR, wszFilespec: LPCWSTR, bRecursive: bool, ) -> HRESULT, fn AddComponent( 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( wszLogicalPath: LPCWSTR, wszDatabaseName: LPCWSTR, wszPath: LPCWSTR, wszFilespec: LPCWSTR, dwBackupTypeMask: DWORD, ) -> HRESULT, fn AddDatabaseLogFiles( wszLogicalPath: LPCWSTR, wszDatabaseName: LPCWSTR, wszPath: LPCWSTR, wszFilespec: LPCWSTR, dwBackupTypeMask: DWORD, ) -> HRESULT, fn AddFilesToFileGroup( wszLogicalPath: LPCWSTR, wszGroupName: LPCWSTR, wszPath: LPCWSTR, wszFilespec: LPCWSTR, bRecursive: bool, wszAlternateLocation: LPCWSTR, dwBackupTypeMask: DWORD, ) -> HRESULT, fn SetRestoreMethod( method: VSS_RESTOREMETHOD_ENUM, wszService: LPCWSTR, wszUserProcedure: LPCWSTR, writerRestore: VSS_WRITERRESTORE_ENUM, bRebootRequired: bool, ) -> HRESULT, fn AddAlternateLocationMapping( wszSourcePath: LPCWSTR, wszSourceFilespec: LPCWSTR, bRecursive: bool, wszDestination: LPCWSTR, ) -> HRESULT, fn AddComponentDependency( wszForLogicalPath: LPCWSTR, wszForComponentName: LPCWSTR, onWriterId: VSS_ID, wszOnLogicalPath: LPCWSTR, wszOnComponentName: LPCWSTR, ) -> HRESULT, fn SetBackupSchema( dwSchemaMask: DWORD, ) -> HRESULT, fn GetDocument( pDoc: *mut *mut VOID, ) -> HRESULT, //TODO IXMLDOMDocument, fn SaveAsXML( pbstrXML: *mut BSTR, ) -> HRESULT, }} //IVssCreateWriterMetadataEx //IVssWriterImpl //IVssCreateExpressWriterMetadata //IVssExpressWriter //CVssWriter //CVssWriterEx //CVssWriterEx2