winapi\shared/
ktmtypes.rs

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