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 //! Common types for KTM exposed at both the Nt- and Win32-layer 7 use shared::guiddef::GUID; 8 use shared::minwindef::{DWORD, ULONG}; 9 use um::winnt::{LARGE_INTEGER, PVOID, WCHAR}; 10 pub type UOW = GUID; 11 pub type PUOW = *mut GUID; 12 pub type CRM_PROTOCOL_ID = GUID; 13 pub type PCRM_PROTOCOL_ID = *mut GUID; 14 pub const TRANSACTION_MANAGER_VOLATILE: ULONG = 0x00000001; 15 pub const TRANSACTION_MANAGER_COMMIT_DEFAULT: ULONG = 0x00000000; 16 pub const TRANSACTION_MANAGER_COMMIT_SYSTEM_VOLUME: ULONG = 0x00000002; 17 pub const TRANSACTION_MANAGER_COMMIT_SYSTEM_HIVES: ULONG = 0x00000004; 18 pub const TRANSACTION_MANAGER_COMMIT_LOWEST: ULONG = 0x00000008; 19 pub const TRANSACTION_MANAGER_CORRUPT_FOR_RECOVERY: ULONG = 0x00000010; 20 pub const TRANSACTION_MANAGER_CORRUPT_FOR_PROGRESS: ULONG = 0x00000020; 21 pub const TRANSACTION_MANAGER_MAXIMUM_OPTION: ULONG = 0x0000003F; 22 pub const TRANSACTION_DO_NOT_PROMOTE: DWORD = 0x00000001; 23 pub const TRANSACTION_MAXIMUM_OPTION: DWORD = 0x00000001; 24 pub const RESOURCE_MANAGER_VOLATILE: DWORD = 0x00000001; 25 pub const RESOURCE_MANAGER_COMMUNICATION: DWORD = 0x00000002; 26 pub const RESOURCE_MANAGER_MAXIMUM_OPTION: DWORD = 0x00000003; 27 pub const CRM_PROTOCOL_EXPLICIT_MARSHAL_ONLY: DWORD = 0x00000001; 28 pub const CRM_PROTOCOL_DYNAMIC_MARSHAL_INFO: DWORD = 0x00000002; 29 pub const CRM_PROTOCOL_MAXIMUM_OPTION: DWORD = 0x00000003; 30 pub const ENLISTMENT_SUPERIOR: ULONG = 0x00000001; 31 pub const ENLISTMENT_MAXIMUM_OPTION: ULONG = 0x00000001; 32 pub type NOTIFICATION_MASK = ULONG; 33 pub const TRANSACTION_NOTIFY_MASK: ULONG = 0x3FFFFFFF; 34 pub const TRANSACTION_NOTIFY_PREPREPARE: ULONG = 0x00000001; 35 pub const TRANSACTION_NOTIFY_PREPARE: ULONG = 0x00000002; 36 pub const TRANSACTION_NOTIFY_COMMIT: ULONG = 0x00000004; 37 pub const TRANSACTION_NOTIFY_ROLLBACK: ULONG = 0x00000008; 38 pub const TRANSACTION_NOTIFY_PREPREPARE_COMPLETE: ULONG = 0x00000010; 39 pub const TRANSACTION_NOTIFY_PREPARE_COMPLETE: ULONG = 0x00000020; 40 pub const TRANSACTION_NOTIFY_COMMIT_COMPLETE: ULONG = 0x00000040; 41 pub const TRANSACTION_NOTIFY_ROLLBACK_COMPLETE: ULONG = 0x00000080; 42 pub const TRANSACTION_NOTIFY_RECOVER: ULONG = 0x00000100; 43 pub const TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT: ULONG = 0x00000200; 44 pub const TRANSACTION_NOTIFY_DELEGATE_COMMIT: ULONG = 0x00000400; 45 pub const TRANSACTION_NOTIFY_RECOVER_QUERY: ULONG = 0x00000800; 46 pub const TRANSACTION_NOTIFY_ENLIST_PREPREPARE: ULONG = 0x00001000; 47 pub const TRANSACTION_NOTIFY_LAST_RECOVER: ULONG = 0x00002000; 48 pub const TRANSACTION_NOTIFY_INDOUBT: ULONG = 0x00004000; 49 pub const TRANSACTION_NOTIFY_PROPAGATE_PULL: ULONG = 0x00008000; 50 pub const TRANSACTION_NOTIFY_PROPAGATE_PUSH: ULONG = 0x00010000; 51 pub const TRANSACTION_NOTIFY_MARSHAL: ULONG = 0x00020000; 52 pub const TRANSACTION_NOTIFY_ENLIST_MASK: ULONG = 0x00040000; 53 pub const TRANSACTION_NOTIFY_RM_DISCONNECTED: ULONG = 0x01000000; 54 pub const TRANSACTION_NOTIFY_TM_ONLINE: ULONG = 0x02000000; 55 pub const TRANSACTION_NOTIFY_COMMIT_REQUEST: ULONG = 0x04000000; 56 pub const TRANSACTION_NOTIFY_PROMOTE: ULONG = 0x08000000; 57 pub const TRANSACTION_NOTIFY_PROMOTE_NEW: ULONG = 0x10000000; 58 pub const TRANSACTION_NOTIFY_REQUEST_OUTCOME: ULONG = 0x20000000; 59 pub const TRANSACTION_NOTIFY_COMMIT_FINALIZE: ULONG = 0x40000000; 60 pub const TRANSACTIONMANAGER_OBJECT_PATH: &'static str = "\\TransactionManager\\"; 61 pub const TRANSACTION_OBJECT_PATH: &'static str = "\\Transaction\\"; 62 pub const ENLISTMENT_OBJECT_PATH: &'static str = "\\Enlistment\\"; 63 pub const RESOURCE_MANAGER_OBJECT_PATH: &'static str = "\\ResourceManager\\"; 64 STRUCT!{struct TRANSACTION_NOTIFICATION { 65 TransactionKey: PVOID, 66 TransactionNotification: ULONG, 67 TmVirtualClock: LARGE_INTEGER, 68 ArgumentLength: ULONG, 69 }} 70 pub type PTRANSACTION_NOTIFICATION = *mut TRANSACTION_NOTIFICATION; 71 STRUCT!{struct TRANSACTION_NOTIFICATION_RECOVERY_ARGUMENT { 72 EnlistmentId: GUID, 73 UOW: UOW, 74 }} 75 pub type PTRANSACTION_NOTIFICATION_RECOVERY_ARGUMENT 76 = *mut TRANSACTION_NOTIFICATION_RECOVERY_ARGUMENT; 77 pub const TRANSACTION_NOTIFICATION_TM_ONLINE_FLAG_IS_CLUSTERED: ULONG = 0x1; 78 STRUCT!{struct TRANSACTION_NOTIFICATION_TM_ONLINE_ARGUMENT { 79 TmIdentity: GUID, 80 Flags: ULONG, 81 }} 82 pub type PTRANSACTION_NOTIFICATION_TM_ONLINE_ARGUMENT 83 = *mut TRANSACTION_NOTIFICATION_TM_ONLINE_ARGUMENT; 84 pub type SAVEPOINT_ID = ULONG; 85 pub type PSAVEPOINT_ID = *mut ULONG; 86 STRUCT!{struct TRANSACTION_NOTIFICATION_SAVEPOINT_ARGUMENT { 87 SavepointId: SAVEPOINT_ID, 88 }} 89 pub type PTRANSACTION_NOTIFICATION_SAVEPOINT_ARGUMENT 90 = *mut TRANSACTION_NOTIFICATION_SAVEPOINT_ARGUMENT; 91 STRUCT!{struct TRANSACTION_NOTIFICATION_PROPAGATE_ARGUMENT { 92 PropagationCookie: ULONG, 93 UOW: GUID, 94 TmIdentity: GUID, 95 BufferLength: ULONG, 96 }} 97 pub type PTRANSACTION_NOTIFICATION_PROPAGATE_ARGUMENT 98 = *mut TRANSACTION_NOTIFICATION_PROPAGATE_ARGUMENT; 99 STRUCT!{struct TRANSACTION_NOTIFICATION_MARSHAL_ARGUMENT { 100 MarshalCookie: ULONG, 101 UOW: GUID, 102 }} 103 pub type PTRANSACTION_NOTIFICATION_MARSHAL_ARGUMENT 104 = *mut TRANSACTION_NOTIFICATION_MARSHAL_ARGUMENT; 105 pub type TRANSACTION_NOTIFICATION_PROMOTE_ARGUMENT = TRANSACTION_NOTIFICATION_PROPAGATE_ARGUMENT; 106 pub type PTRANSACTION_NOTIFICATION_PROMOTE_ARGUMENT 107 = *mut TRANSACTION_NOTIFICATION_PROPAGATE_ARGUMENT; 108 pub const KTM_MARSHAL_BLOB_VERSION_MAJOR: ULONG = 1; 109 pub const KTM_MARSHAL_BLOB_VERSION_MINOR: ULONG = 1; 110 pub const MAX_TRANSACTION_DESCRIPTION_LENGTH: usize = 64; 111 pub const MAX_RESOURCEMANAGER_DESCRIPTION_LENGTH: usize = 64; 112 STRUCT!{struct KCRM_MARSHAL_HEADER { 113 VersionMajor: ULONG, 114 VersionMinor: ULONG, 115 NumProtocols: ULONG, 116 Unused: ULONG, 117 }} 118 pub type PKCRM_MARSHAL_HEADER = *mut KCRM_MARSHAL_HEADER; 119 pub type PRKCRM_MARSHAL_HEADER = *mut KCRM_MARSHAL_HEADER; 120 STRUCT!{struct KCRM_TRANSACTION_BLOB { 121 UOW: UOW, 122 TmIdentity: GUID, 123 IsolationLevel: ULONG, 124 IsolationFlags: ULONG, 125 Timeout: ULONG, 126 Description: [WCHAR; MAX_TRANSACTION_DESCRIPTION_LENGTH], 127 }} 128 pub type PKCRM_TRANSACTION_BLOB = *mut KCRM_TRANSACTION_BLOB; 129 pub type PRKCRM_TRANSACTION_BLOB = *mut KCRM_TRANSACTION_BLOB; 130 STRUCT!{struct KCRM_PROTOCOL_BLOB { 131 ProtocolId: CRM_PROTOCOL_ID, 132 StaticInfoLength: ULONG, 133 TransactionIdInfoLength: ULONG, 134 Unused1: ULONG, 135 Unused2: ULONG, 136 }} 137 pub type PKCRM_PROTOCOL_BLOB = *mut KCRM_PROTOCOL_BLOB; 138 pub type PRKCRM_PROTOCOL_BLOB = *mut KCRM_PROTOCOL_BLOB; 139