Home | History | Annotate | Download | only in include
      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