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 10 extern "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 152