1 // Copyright © 2015, Brian Vincent 2 // Licensed under the MIT License <LICENSE.md> 3 //! VSS header file 4 ENUM!{enum VSS_OBJECT_TYPE { 5 VSS_OBJECT_UNKNOWN = 0, 6 VSS_OBJECT_NONE = 1, 7 VSS_OBJECT_SNAPSHOT_SET = 2, 8 VSS_OBJECT_SNAPSHOT = 3, 9 VSS_OBJECT_PROVIDER = 4, 10 VSS_OBJECT_TYPE_COUNT = 5, 11 }} 12 pub type PVSS_OBJECT_TYPE = *mut VSS_OBJECT_TYPE; 13 ENUM!{enum VSS_SNAPSHOT_STATE { 14 VSS_SS_UNKNOWN = 0x00, 15 VSS_SS_PREPARING = 0x01, 16 VSS_SS_PROCESSING_PREPARE = 0x02, 17 VSS_SS_PREPARED = 0x03, 18 VSS_SS_PROCESSING_PRECOMMIT = 0x04, 19 VSS_SS_PRECOMMITTED = 0x05, 20 VSS_SS_PROCESSING_COMMIT = 0x06, 21 VSS_SS_COMMITTED = 0x07, 22 VSS_SS_PROCESSING_POSTCOMMIT = 0x08, 23 VSS_SS_PROCESSING_PREFINALCOMMIT = 0x09, 24 VSS_SS_PREFINALCOMMITTED = 0x0a, 25 VSS_SS_PROCESSING_POSTFINALCOMMIT = 0x0b, 26 VSS_SS_CREATED = 0x0c, 27 VSS_SS_ABORTED = 0x0d, 28 VSS_SS_DELETED = 0x0e, 29 VSS_SS_POSTCOMMITTED = 0x0f, 30 VSS_SS_COUNT = 0x10, 31 }} 32 pub type PVSS_SNAPSHOT_STATE = *mut VSS_SNAPSHOT_STATE; 33 pub type VSS_VOLUME_SNAPSHOT_ATTRIBUTES = ::LONG; 34 pub const VSS_VOLSNAP_ATTR_PERSISTENT: ::LONG = 0x00000001; 35 pub const VSS_VOLSNAP_ATTR_NO_AUTORECOVERY: ::LONG = 0x00000002; 36 pub const VSS_VOLSNAP_ATTR_CLIENT_ACCESSIBLE: ::LONG = 0x00000004; 37 pub const VSS_VOLSNAP_ATTR_NO_AUTO_RELEASE: ::LONG = 0x00000008; 38 pub const VSS_VOLSNAP_ATTR_NO_WRITERS: ::LONG = 0x00000010; 39 pub const VSS_VOLSNAP_ATTR_TRANSPORTABLE: ::LONG = 0x00000020; 40 pub const VSS_VOLSNAP_ATTR_NOT_SURFACED: ::LONG = 0x00000040; 41 pub const VSS_VOLSNAP_ATTR_NOT_TRANSACTED: ::LONG = 0x00000080; 42 pub const VSS_VOLSNAP_ATTR_HARDWARE_ASSISTED: ::LONG = 0x00010000; 43 pub const VSS_VOLSNAP_ATTR_DIFFERENTIAL: ::LONG = 0x00020000; 44 pub const VSS_VOLSNAP_ATTR_PLEX: ::LONG = 0x00040000; 45 pub const VSS_VOLSNAP_ATTR_IMPORTED: ::LONG = 0x00080000; 46 pub const VSS_VOLSNAP_ATTR_EXPOSED_LOCALLY: ::LONG = 0x00100000; 47 pub const VSS_VOLSNAP_ATTR_EXPOSED_REMOTELY: ::LONG = 0x00200000; 48 pub const VSS_VOLSNAP_ATTR_AUTORECOVER: ::LONG = 0x00400000; 49 pub const VSS_VOLSNAP_ATTR_ROLLBACK_RECOVERY: ::LONG = 0x00800000; 50 pub const VSS_VOLSNAP_ATTR_DELAYED_POSTSNAPSHOT: ::LONG = 0x01000000; 51 pub const VSS_VOLSNAP_ATTR_TXF_RECOVERY: ::LONG = 0x02000000; 52 pub const VSS_VOLSNAP_ATTR_FILE_SHARE: ::LONG = 0x04000000; 53 pub type PVSS_VOLUME_SNAPSHOT_ATTRIBUTES = *mut VSS_VOLUME_SNAPSHOT_ATTRIBUTES; 54 pub type VSS_SNAPSHOT_CONTEXT = ::LONG; 55 pub type PVSS_SNAPSHOT_CONTEXT = *mut VSS_SNAPSHOT_CONTEXT; 56 pub const VSS_CTX_BACKUP: ::LONG = 0; 57 pub const VSS_CTX_FILE_SHARE_BACKUP: ::LONG = VSS_VOLSNAP_ATTR_NO_WRITERS; 58 pub const VSS_CTX_NAS_ROLLBACK: ::LONG = VSS_VOLSNAP_ATTR_PERSISTENT 59 | VSS_VOLSNAP_ATTR_NO_AUTO_RELEASE | VSS_VOLSNAP_ATTR_NO_WRITERS; 60 pub const VSS_CTX_APP_ROLLBACK: ::LONG = VSS_VOLSNAP_ATTR_PERSISTENT 61 | VSS_VOLSNAP_ATTR_NO_AUTO_RELEASE; 62 pub const VSS_CTX_CLIENT_ACCESSIBLE: ::LONG = VSS_VOLSNAP_ATTR_PERSISTENT 63 | VSS_VOLSNAP_ATTR_CLIENT_ACCESSIBLE | VSS_VOLSNAP_ATTR_NO_AUTO_RELEASE 64 | VSS_VOLSNAP_ATTR_NO_WRITERS; 65 pub const VSS_CTX_CLIENT_ACCESSIBLE_WRITERS: ::LONG = VSS_VOLSNAP_ATTR_PERSISTENT 66 | VSS_VOLSNAP_ATTR_CLIENT_ACCESSIBLE | VSS_VOLSNAP_ATTR_NO_AUTO_RELEASE; 67 pub const VSS_CTX_ALL: ::LONG = 0xffffffffu32 as ::LONG; 68 pub type VSS_PROVIDER_CAPABILITIES = ::DWORD; 69 pub type PVSS_PROVIDER_CAPABILITIES = *mut VSS_PROVIDER_CAPABILITIES; 70 pub const VSS_PRV_CAPABILITY_LEGACY: ::DWORD = 0x1; 71 pub const VSS_PRV_CAPABILITY_COMPLIANT: ::DWORD = 0x2; 72 pub const VSS_PRV_CAPABILITY_LUN_REPOINT: ::DWORD = 0x4; 73 pub const VSS_PRV_CAPABILITY_LUN_RESYNC: ::DWORD = 0x8; 74 pub const VSS_PRV_CAPABILITY_OFFLINE_CREATION: ::DWORD = 0x10; 75 pub const VSS_PRV_CAPABILITY_MULTIPLE_IMPORT: ::DWORD = 0x20; 76 pub const VSS_PRV_CAPABILITY_RECYCLING: ::DWORD = 0x40; 77 pub const VSS_PRV_CAPABILITY_PLEX: ::DWORD = 0x80; 78 pub const VSS_PRV_CAPABILITY_DIFFERENTIAL: ::DWORD = 0x100; 79 pub const VSS_PRV_CAPABILITY_CLUSTERED: ::DWORD = 0x200; 80 pub type VSS_HARDWARE_OPTIONS = ::DWORD; 81 pub type PVSS_HARDWARE_OPTIONS = *mut VSS_HARDWARE_OPTIONS; 82 pub const VSS_BREAKEX_FLAG_MASK_LUNS: ::DWORD = 0x1; 83 pub const VSS_BREAKEX_FLAG_MAKE_READ_WRITE: ::DWORD = 0x2; 84 pub const VSS_BREAKEX_FLAG_REVERT_IDENTITY_ALL: ::DWORD = 0x4; 85 pub const VSS_BREAKEX_FLAG_REVERT_IDENTITY_NONE: ::DWORD = 0x8; 86 pub const VSS_ONLUNSTATECHANGE_NOTIFY_READ_WRITE: ::DWORD = 0x100; 87 pub const VSS_ONLUNSTATECHANGE_NOTIFY_LUN_PRE_RECOVERY: ::DWORD = 0x200; 88 pub const VSS_ONLUNSTATECHANGE_NOTIFY_LUN_POST_RECOVERY: ::DWORD = 0x400; 89 pub const VSS_ONLUNSTATECHANGE_DO_MASK_LUNS: ::DWORD = 0x800; 90 pub type VSS_RECOVERY_OPTIONS = ::DWORD; 91 pub type PVSS_RECOVERY_OPTIONS = *mut VSS_RECOVERY_OPTIONS; 92 pub const VSS_RECOVERY_REVERT_IDENTITY_ALL: ::DWORD = 0x00000100; 93 pub const VSS_RECOVERY_NO_VOLUME_CHECK: ::DWORD = 0x00000200; 94 ENUM!{enum VSS_WRITER_STATE { 95 VSS_WS_UNKNOWN = 0, 96 VSS_WS_STABLE = 1, 97 VSS_WS_WAITING_FOR_FREEZE = 2, 98 VSS_WS_WAITING_FOR_THAW = 3, 99 VSS_WS_WAITING_FOR_POST_SNAPSHOT = 4, 100 VSS_WS_WAITING_FOR_BACKUP_COMPLETE = 5, 101 VSS_WS_FAILED_AT_IDENTIFY = 6, 102 VSS_WS_FAILED_AT_PREPARE_BACKUP = 7, 103 VSS_WS_FAILED_AT_PREPARE_SNAPSHOT = 8, 104 VSS_WS_FAILED_AT_FREEZE = 9, 105 VSS_WS_FAILED_AT_THAW = 10, 106 VSS_WS_FAILED_AT_POST_SNAPSHOT = 11, 107 VSS_WS_FAILED_AT_BACKUP_COMPLETE = 12, 108 VSS_WS_FAILED_AT_PRE_RESTORE = 13, 109 VSS_WS_FAILED_AT_POST_RESTORE = 14, 110 VSS_WS_FAILED_AT_BACKUPSHUTDOWN = 15, 111 VSS_WS_COUNT = 16, 112 }} 113 pub type PVSS_WRITER_STATE = *mut VSS_WRITER_STATE; 114 ENUM!{enum VSS_BACKUP_TYPE { 115 VSS_BT_UNDEFINED = 0, 116 VSS_BT_FULL = 1, 117 VSS_BT_INCREMENTAL = 2, 118 VSS_BT_DIFFERENTIAL = 3, 119 VSS_BT_LOG = 4, 120 VSS_BT_COPY = 5, 121 VSS_BT_OTHER = 6, 122 }} 123 pub type PVSS_BACKUP_TYPE = *mut VSS_BACKUP_TYPE; 124 ENUM!{enum VSS_RESTORE_TYPE { 125 VSS_RTYPE_UNDEFINED = 0, 126 VSS_RTYPE_BY_COPY = 1, 127 VSS_RTYPE_IMPORT = 2, 128 VSS_RTYPE_OTHER = 3, 129 }} 130 pub type PVSS_RESTORE_TYPE = *mut VSS_RESTORE_TYPE; 131 ENUM!{enum VSS_ROLLFORWARD_TYPE { 132 VSS_RF_UNDEFINED = 0, 133 VSS_RF_NONE = 1, 134 VSS_RF_ALL = 2, 135 VSS_RF_PARTIAL = 3, 136 }} 137 pub type PVSS_ROLLFORWARD_TYPE = *mut VSS_ROLLFORWARD_TYPE; 138 ENUM!{enum VSS_PROVIDER_TYPE { 139 VSS_PROV_UNKNOWN = 0, 140 VSS_PROV_SYSTEM = 1, 141 VSS_PROV_SOFTWARE = 2, 142 VSS_PROV_HARDWARE = 3, 143 VSS_PROV_FILESHARE = 4, 144 }} 145 pub type PVSS_PROVIDER_TYPE = *mut VSS_PROVIDER_TYPE; 146 ENUM!{enum VSS_APPLICATION_LEVEL { 147 VSS_APP_UNKNOWN = 0, 148 VSS_APP_SYSTEM = 1, 149 VSS_APP_BACK_END = 2, 150 VSS_APP_FRONT_END = 3, 151 VSS_APP_SYSTEM_RM = 4, 152 VSS_APP_AUTO = -1i32 as u32, 153 }} 154 pub type PVSS_APPLICATION_LEVEL = *mut VSS_APPLICATION_LEVEL; 155 ENUM!{enum VSS_SNAPSHOT_PROPERTY_ID { 156 VSS_SPROPID_UNKNOWN = 0, 157 VSS_SPROPID_SNAPSHOT_ID = 0x1, 158 VSS_SPROPID_SNAPSHOT_SET_ID = 0x2, 159 VSS_SPROPID_SNAPSHOTS_COUNT = 0x3, 160 VSS_SPROPID_SNAPSHOT_DEVICE = 0x4, 161 VSS_SPROPID_ORIGINAL_VOLUME = 0x5, 162 VSS_SPROPID_ORIGINATING_MACHINE = 0x6, 163 VSS_SPROPID_SERVICE_MACHINE = 0x7, 164 VSS_SPROPID_EXPOSED_NAME = 0x8, 165 VSS_SPROPID_EXPOSED_PATH = 0x9, 166 VSS_SPROPID_PROVIDER_ID = 0xa, 167 VSS_SPROPID_SNAPSHOT_ATTRIBUTES = 0xb, 168 VSS_SPROPID_CREATION_TIMESTAMP = 0xc, 169 VSS_SPROPID_STATUS = 0xd, 170 }} 171 pub type PVSS_SNAPSHOT_PROPERTY_ID = *mut VSS_SNAPSHOT_PROPERTY_ID; 172 pub type VSS_FILE_SPEC_BACKUP_TYPE = ::DWORD; 173 pub type PVSS_FILE_SPEC_BACKUP_TYPE = *mut VSS_FILE_SPEC_BACKUP_TYPE; 174 pub const VSS_FSBT_FULL_BACKUP_REQUIRED: ::DWORD = 0x1; 175 pub const VSS_FSBT_DIFFERENTIAL_BACKUP_REQUIRED: ::DWORD = 0x2; 176 pub const VSS_FSBT_INCREMENTAL_BACKUP_REQUIRED: ::DWORD = 0x4; 177 pub const VSS_FSBT_LOG_BACKUP_REQUIRED: ::DWORD = 0x8; 178 pub const VSS_FSBT_FULL_SNAPSHOT_REQUIRED: ::DWORD = 0x100; 179 pub const VSS_FSBT_DIFFERENTIAL_SNAPSHOT_REQUIRED: ::DWORD = 0x200; 180 pub const VSS_FSBT_INCREMENTAL_SNAPSHOT_REQUIRED: ::DWORD = 0x400; 181 pub const VSS_FSBT_LOG_SNAPSHOT_REQUIRED: ::DWORD = 0x800; 182 pub const VSS_FSBT_CREATED_DURING_BACKUP: ::DWORD = 0x10000; 183 pub const VSS_FSBT_ALL_BACKUP_REQUIRED: ::DWORD = 0xf; 184 pub const VSS_FSBT_ALL_SNAPSHOT_REQUIRED: ::DWORD = 0xf00; 185 pub type VSS_BACKUP_SCHEMA = ::DWORD; 186 pub type PVSS_BACKUP_SCHEMA = *mut VSS_BACKUP_SCHEMA; 187 pub const VSS_BS_UNDEFINED: ::DWORD = 0; 188 pub const VSS_BS_DIFFERENTIAL: ::DWORD = 0x1; 189 pub const VSS_BS_INCREMENTAL: ::DWORD = 0x2; 190 pub const VSS_BS_EXCLUSIVE_INCREMENTAL_DIFFERENTIAL: ::DWORD = 0x4; 191 pub const VSS_BS_LOG: ::DWORD = 0x8; 192 pub const VSS_BS_COPY: ::DWORD = 0x10; 193 pub const VSS_BS_TIMESTAMPED: ::DWORD = 0x20; 194 pub const VSS_BS_LAST_MODIFY: ::DWORD = 0x40; 195 pub const VSS_BS_LSN: ::DWORD = 0x80; 196 pub const VSS_BS_WRITER_SUPPORTS_NEW_TARGET: ::DWORD = 0x100; 197 pub const VSS_BS_WRITER_SUPPORTS_RESTORE_WITH_MOVE: ::DWORD = 0x200; 198 pub const VSS_BS_INDEPENDENT_SYSTEM_STATE: ::DWORD = 0x400; 199 pub const VSS_BS_ROLLFORWARD_RESTORE: ::DWORD = 0x1000; 200 pub const VSS_BS_RESTORE_RENAME: ::DWORD = 0x2000; 201 pub const VSS_BS_AUTHORITATIVE_RESTORE: ::DWORD = 0x4000; 202 pub const VSS_BS_WRITER_SUPPORTS_PARALLEL_RESTORES: ::DWORD = 0x8000; 203 pub type VSS_ID = ::GUID; 204 pub type VSS_PWSZ = *mut ::WCHAR; 205 pub type VSS_TIMESTAMP = ::LONGLONG; 206 STRUCT!{struct VSS_SNAPSHOT_PROP { 207 m_SnapshotId: ::VSS_ID, 208 m_SnapshotSetId: ::VSS_ID, 209 m_lSnapshotsCount: ::LONG, 210 m_pwszSnapshotDeviceObject: ::VSS_PWSZ, 211 m_pwszOriginalVolumeName: ::VSS_PWSZ, 212 m_pwszOriginatingMachine: ::VSS_PWSZ, 213 m_pwszServiceMachine: ::VSS_PWSZ, 214 m_pwszExposedName: ::VSS_PWSZ, 215 m_pwszExposedPath: ::VSS_PWSZ, 216 m_ProviderId: ::VSS_ID, 217 m_lSnapshotAttributes: ::LONG, 218 m_tsCreationTimestamp: ::VSS_TIMESTAMP, 219 m_eStatus: ::VSS_SNAPSHOT_STATE, 220 }} 221 type PVSS_SNAPSHOT_PROP = *mut VSS_SNAPSHOT_PROP; 222 STRUCT!{struct VSS_PROVIDER_PROP { 223 m_ProviderId: ::VSS_ID, 224 m_pwszProviderName: ::VSS_PWSZ, 225 m_eProviderType: ::VSS_PROVIDER_TYPE, 226 m_pwszProviderVersion: ::VSS_PWSZ, 227 m_ProviderVersionId: ::VSS_ID, 228 m_ClassId: ::CLSID, 229 }} 230 type PVSS_PROVIDER_PROP = *mut VSS_PROVIDER_PROP; 231 STRUCT!{struct VSS_OBJECT_UNION { 232 Snap: ::VSS_SNAPSHOT_PROP, 233 }} 234 UNION!(VSS_OBJECT_UNION, Snap, Prov, Prov_mut, VSS_PROVIDER_PROP); 235 STRUCT!{struct VSS_OBJECT_PROP { 236 Type: ::VSS_OBJECT_TYPE, 237 Obj: ::VSS_OBJECT_UNION, 238 }} 239 type PVSS_OBJECT_PROP = *mut VSS_OBJECT_PROP; 240 RIDL!( 241 interface IVssEnumObject(IVssEnumObjectVtbl): IUnknown(IUnknownVtbl) { 242 fn Next( 243 &mut self, celt: ::ULONG, rgelt: *mut ::VSS_OBJECT_PROP, pceltFetched: *mut ::ULONG 244 ) -> ::HRESULT, 245 fn Skip(&mut self, celt: ::ULONG) -> ::HRESULT, 246 fn Reset(&mut self) -> ::HRESULT, 247 fn Clone(&mut self, ppenum: *mut *mut ::IVssEnumObject) -> ::HRESULT 248 } 249 ); 250 RIDL!( 251 interface IVssAsync(IVssAsyncVtbl): IUnknown(IUnknownVtbl) { 252 fn Cancel(&mut self) -> ::HRESULT, 253 fn Wait(&mut self, dwMilliseconds: ::DWORD) -> ::HRESULT, 254 fn QueryStatus(&mut self, pHrResult: *mut ::HRESULT, pReserved: *mut ::INT) -> ::HRESULT 255 } 256 ); 257