master
  1/**
  2 * This file is part of the mingw-w64 runtime package.
  3 * No warranty is given; refer to the file DISCLAIMER within this package.
  4 */
  5
  6#ifndef _KTMTYPES_
  7#define _KTMTYPES_
  8
  9#ifdef __cplusplus
 10extern "C" {
 11#endif
 12
 13  typedef GUID CRM_PROTOCOL_ID,*PCRM_PROTOCOL_ID;
 14
 15#define TRANSACTION_MANAGER_VOLATILE 0x00000001
 16#define TRANSACTION_MANAGER_COMMIT_DEFAULT 0x00000000
 17#define TRANSACTION_MANAGER_COMMIT_SYSTEM_VOLUME 0x00000002
 18#define TRANSACTION_MANAGER_COMMIT_SYSTEM_HIVES 0x00000004
 19#define TRANSACTION_MANAGER_COMMIT_LOWEST 0x00000008
 20#define TRANSACTION_MANAGER_CORRUPT_FOR_RECOVERY 0x00000010
 21#define TRANSACTION_MANAGER_CORRUPT_FOR_PROGRESS 0x00000020
 22#define TRANSACTION_MANAGER_MAXIMUM_OPTION 0x0000003f
 23
 24#define TRANSACTION_DO_NOT_PROMOTE 0x00000001
 25#define TRANSACTION_MAXIMUM_OPTION 0x00000001
 26
 27#define RESOURCE_MANAGER_VOLATILE 0x00000001
 28#define RESOURCE_MANAGER_COMMUNICATION 0x00000002
 29#define RESOURCE_MANAGER_MAXIMUM_OPTION 0x00000003
 30
 31#define CRM_PROTOCOL_EXPLICIT_MARSHAL_ONLY 0x00000001
 32#define CRM_PROTOCOL_DYNAMIC_MARSHAL_INFO 0x00000002
 33#define CRM_PROTOCOL_MAXIMUM_OPTION 0x00000003
 34
 35#define ENLISTMENT_SUPERIOR 0x00000001
 36#define ENLISTMENT_MAXIMUM_OPTION 0x00000001
 37
 38  typedef ULONG NOTIFICATION_MASK;
 39#define TRANSACTION_NOTIFY_MASK 0x3fffffff
 40#define TRANSACTION_NOTIFY_PREPREPARE 0x00000001
 41#define TRANSACTION_NOTIFY_PREPARE 0x00000002
 42#define TRANSACTION_NOTIFY_COMMIT 0x00000004
 43#define TRANSACTION_NOTIFY_ROLLBACK 0x00000008
 44#define TRANSACTION_NOTIFY_PREPREPARE_COMPLETE 0x00000010
 45#define TRANSACTION_NOTIFY_PREPARE_COMPLETE 0x00000020
 46#define TRANSACTION_NOTIFY_COMMIT_COMPLETE 0x00000040
 47#define TRANSACTION_NOTIFY_ROLLBACK_COMPLETE 0x00000080
 48#define TRANSACTION_NOTIFY_RECOVER 0x00000100
 49#define TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT 0x00000200
 50#define TRANSACTION_NOTIFY_DELEGATE_COMMIT 0x00000400
 51#define TRANSACTION_NOTIFY_RECOVER_QUERY 0x00000800
 52#define TRANSACTION_NOTIFY_ENLIST_PREPREPARE 0x00001000
 53#define TRANSACTION_NOTIFY_LAST_RECOVER 0x00002000
 54#define TRANSACTION_NOTIFY_INDOUBT 0x00004000
 55#define TRANSACTION_NOTIFY_PROPAGATE_PULL 0x00008000
 56#define TRANSACTION_NOTIFY_PROPAGATE_PUSH 0x00010000
 57#define TRANSACTION_NOTIFY_MARSHAL 0x00020000
 58#define TRANSACTION_NOTIFY_ENLIST_MASK 0x00040000
 59#define TRANSACTION_NOTIFY_RM_DISCONNECTED 0x01000000
 60#define TRANSACTION_NOTIFY_TM_ONLINE 0x02000000
 61#define TRANSACTION_NOTIFY_COMMIT_REQUEST 0x04000000
 62#define TRANSACTION_NOTIFY_PROMOTE 0x08000000
 63#define TRANSACTION_NOTIFY_PROMOTE_NEW 0x10000000
 64#define TRANSACTION_NOTIFY_REQUEST_OUTCOME 0x20000000
 65
 66#define TRANSACTION_NOTIFY_COMMIT_FINALIZE 0x40000000
 67
 68#define TRANSACTIONMANAGER_OBJECT_PATH L"\\TransactionManager\\"
 69#define TRANSACTION_OBJECT_PATH L"\\Transaction\\"
 70#define ENLISTMENT_OBJECT_PATH L"\\Enlistment\\"
 71#define RESOURCE_MANAGER_OBJECT_PATH L"\\ResourceManager\\"
 72
 73#define TRANSACTIONMANAGER_OBJECT_NAME_LENGTH_IN_BYTES (sizeof (TRANSACTIONMANAGER_OBJECT_PATH) + (38 * sizeof (WCHAR)))
 74#define TRANSACTION_OBJECT_NAME_LENGTH_IN_BYTES (sizeof (TRANSACTION_OBJECT_PATH) + (38 * sizeof (WCHAR)))
 75#define ENLISTMENT_OBJECT_NAME_LENGTH_IN_BYTES (sizeof (ENLISTMENT_OBJECT_PATH) + (38 * sizeof (WCHAR)))
 76#define RESOURCE_MANAGER_OBJECT_NAME_LENGTH_IN_BYTES (sizeof (RESOURCE_MANAGER_OBJECT_PATH) + (38 * sizeof (WCHAR)))
 77
 78  typedef struct _TRANSACTION_NOTIFICATION {
 79    PVOID TransactionKey;
 80    ULONG TransactionNotification;
 81    LARGE_INTEGER TmVirtualClock;
 82    ULONG ArgumentLength;
 83  } TRANSACTION_NOTIFICATION,*PTRANSACTION_NOTIFICATION;
 84
 85  typedef struct _TRANSACTION_NOTIFICATION_RECOVERY_ARGUMENT {
 86    GUID EnlistmentId;
 87    GUID UOW;
 88  } TRANSACTION_NOTIFICATION_RECOVERY_ARGUMENT,*PTRANSACTION_NOTIFICATION_RECOVERY_ARGUMENT;
 89
 90#define TRANSACTION_NOTIFICATION_TM_ONLINE_FLAG_IS_CLUSTERED 0x1
 91
 92  typedef struct _TRANSACTION_NOTIFICATION_TM_ONLINE_ARGUMENT {
 93    GUID TmIdentity;
 94    ULONG Flags;
 95  } TRANSACTION_NOTIFICATION_TM_ONLINE_ARGUMENT,*PTRANSACTION_NOTIFICATION_TM_ONLINE_ARGUMENT;
 96
 97  typedef ULONG SAVEPOINT_ID,*PSAVEPOINT_ID;
 98
 99  typedef struct _TRANSACTION_NOTIFICATION_SAVEPOINT_ARGUMENT {
100    SAVEPOINT_ID SavepointId;
101  } TRANSACTION_NOTIFICATION_SAVEPOINT_ARGUMENT,*PTRANSACTION_NOTIFICATION_SAVEPOINT_ARGUMENT;
102
103  typedef struct _TRANSACTION_NOTIFICATION_PROPAGATE_ARGUMENT {
104    ULONG PropagationCookie;
105    GUID UOW;
106    GUID TmIdentity;
107    ULONG BufferLength;
108  } TRANSACTION_NOTIFICATION_PROPAGATE_ARGUMENT,*PTRANSACTION_NOTIFICATION_PROPAGATE_ARGUMENT;
109
110  typedef struct _TRANSACTION_NOTIFICATION_MARSHAL_ARGUMENT {
111    ULONG MarshalCookie;
112    GUID UOW;
113  } TRANSACTION_NOTIFICATION_MARSHAL_ARGUMENT,*PTRANSACTION_NOTIFICATION_MARSHAL_ARGUMENT;
114
115  typedef TRANSACTION_NOTIFICATION_PROPAGATE_ARGUMENT TRANSACTION_NOTIFICATION_PROMOTE_ARGUMENT,*PTRANSACTION_NOTIFICATION_PROMOTE_ARGUMENT;
116
117#define KTM_MARSHAL_BLOB_VERSION_MAJOR 1
118#define KTM_MARSHAL_BLOB_VERSION_MINOR 1
119
120#define MAX_TRANSACTION_DESCRIPTION_LENGTH 64
121#define MAX_RESOURCEMANAGER_DESCRIPTION_LENGTH 64
122
123  typedef struct _KCRM_MARSHAL_HEADER {
124    ULONG VersionMajor;
125    ULONG VersionMinor;
126    ULONG NumProtocols;
127    ULONG Unused;
128  } KCRM_MARSHAL_HEADER,*PKCRM_MARSHAL_HEADER,*RESTRICTED_POINTER PRKCRM_MARSHAL_HEADER;
129
130  typedef struct _KCRM_TRANSACTION_BLOB {
131    GUID UOW;
132    GUID TmIdentity;
133    ULONG IsolationLevel;
134    ULONG IsolationFlags;
135    ULONG Timeout;
136    WCHAR Description[MAX_TRANSACTION_DESCRIPTION_LENGTH];
137  } KCRM_TRANSACTION_BLOB,*PKCRM_TRANSACTION_BLOB,*RESTRICTED_POINTER PRKCRM_TRANSACTION_BLOB;
138
139  typedef struct _KCRM_PROTOCOL_BLOB {
140    CRM_PROTOCOL_ID ProtocolId;
141    ULONG StaticInfoLength;
142    ULONG TransactionIdInfoLength;
143    ULONG Unused1;
144    ULONG Unused2;
145  } KCRM_PROTOCOL_BLOB,*PKCRM_PROTOCOL_BLOB,*RESTRICTED_POINTER PRKCRM_PROTOCOL_BLOB;
146
147#ifdef __cplusplus
148}
149#endif
150
151#endif