Source code

Revision control

Copy as Markdown

Other Tools

// Licensed under the Apache License, Version 2.0
// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, 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