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