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