blob: fd1509c814537b2ebf53e33a77a56f8c6c853530 [file] [log] [blame]
// Copyright © 2015, Brian Vincent
// Licensed under the MIT License <LICENSE.md>
//! 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