Home | History | Annotate | Download | only in include
      1 /*
      2  * ktmtypes.h
      3  *
      4  * This file is part of the ReactOS PSDK package.
      5  *
      6  * Contributors:
      7  *   Created by Timo Kreuzer <timo.kreuzer (at) reactos.org>
      8  *
      9  * THIS SOFTWARE IS NOT COPYRIGHTED
     10  *
     11  * This source code is offered for use in the public domain. You may
     12  * use, modify or distribute it freely.
     13  *
     14  * This code is distributed in the hope that it will be useful but
     15  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
     16  * DISCLAIMED. This includes but is not limited to warranties of
     17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
     18  *
     19  */
     20 
     21 #ifndef _KTMTYPES_
     22 #define _KTMTYPES_
     23 
     24 #define TRANSACTION_MANAGER_VOLATILE             0x00000001
     25 #define TRANSACTION_MANAGER_COMMIT_DEFAULT       0x00000000
     26 #define TRANSACTION_MANAGER_COMMIT_SYSTEM_VOLUME 0x00000002
     27 #define TRANSACTION_MANAGER_COMMIT_SYSTEM_HIVES  0x00000004
     28 #define TRANSACTION_MANAGER_COMMIT_LOWEST        0x00000008
     29 #define TRANSACTION_MANAGER_CORRUPT_FOR_RECOVERY 0x00000010
     30 #define TRANSACTION_MANAGER_CORRUPT_FOR_PROGRESS 0x00000020
     31 #define TRANSACTION_MANAGER_MAXIMUM_OPTION       0x0000003F
     32 
     33 #define TRANSACTION_DO_NOT_PROMOTE               0x00000001
     34 #define TRANSACTION_MAXIMUM_OPTION               0x00000001
     35 
     36 #define RESOURCE_MANAGER_VOLATILE                0x00000001
     37 #define RESOURCE_MANAGER_COMMUNICATION           0x00000002
     38 #define RESOURCE_MANAGER_MAXIMUM_OPTION          0x00000003
     39 
     40 #define CRM_PROTOCOL_EXPLICIT_MARSHAL_ONLY       0x00000001
     41 #define CRM_PROTOCOL_DYNAMIC_MARSHAL_INFO        0x00000002
     42 #define CRM_PROTOCOL_MAXIMUM_OPTION              0x00000003
     43 
     44 #define ENLISTMENT_SUPERIOR                      0x00000001
     45 #define ENLISTMENT_MAXIMUM_OPTION                0x00000001
     46 
     47 #define TRANSACTION_NOTIFY_MASK                  0x3FFFFFFF
     48 #define TRANSACTION_NOTIFY_PREPREPARE            0x00000001
     49 #define TRANSACTION_NOTIFY_PREPARE               0x00000002
     50 #define TRANSACTION_NOTIFY_COMMIT                0x00000004
     51 #define TRANSACTION_NOTIFY_ROLLBACK              0x00000008
     52 #define TRANSACTION_NOTIFY_PREPREPARE_COMPLETE   0x00000010
     53 #define TRANSACTION_NOTIFY_PREPARE_COMPLETE      0x00000020
     54 #define TRANSACTION_NOTIFY_COMMIT_COMPLETE       0x00000040
     55 #define TRANSACTION_NOTIFY_ROLLBACK_COMPLETE     0x00000080
     56 #define TRANSACTION_NOTIFY_RECOVER               0x00000100
     57 #define TRANSACTION_NOTIFY_SINGLE_PHASE_COMMIT   0x00000200
     58 #define TRANSACTION_NOTIFY_DELEGATE_COMMIT       0x00000400
     59 #define TRANSACTION_NOTIFY_RECOVER_QUERY         0x00000800
     60 #define TRANSACTION_NOTIFY_ENLIST_PREPREPARE     0x00001000
     61 #define TRANSACTION_NOTIFY_LAST_RECOVER          0x00002000
     62 #define TRANSACTION_NOTIFY_INDOUBT               0x00004000
     63 #define TRANSACTION_NOTIFY_PROPAGATE_PULL        0x00008000
     64 #define TRANSACTION_NOTIFY_PROPAGATE_PUSH        0x00010000
     65 #define TRANSACTION_NOTIFY_MARSHAL               0x00020000
     66 #define TRANSACTION_NOTIFY_ENLIST_MASK           0x00040000
     67 #define TRANSACTION_NOTIFY_RM_DISCONNECTED       0x01000000
     68 #define TRANSACTION_NOTIFY_TM_ONLINE             0x02000000
     69 #define TRANSACTION_NOTIFY_COMMIT_REQUEST        0x04000000
     70 #define TRANSACTION_NOTIFY_PROMOTE               0x08000000
     71 #define TRANSACTION_NOTIFY_PROMOTE_NEW           0x10000000
     72 #define TRANSACTION_NOTIFY_REQUEST_OUTCOME       0x20000000
     73 
     74 #define TRANSACTION_NOTIFY_COMMIT_FINALIZE       0x40000000
     75 
     76 #define TRANSACTIONMANAGER_OBJECT_PATH L"\\TransactionManager\\"
     77 #define TRANSACTION_OBJECT_PATH        L"\\Transaction\\"
     78 #define ENLISTMENT_OBJECT_PATH         L"\\Enlistment\\"
     79 #define RESOURCE_MANAGER_OBJECT_PATH   L"\\ResourceManager\\"
     80 
     81 #define TRANSACTIONMANAGER_OBJECT_NAME_LENGTH_IN_BYTES (sizeof(TRANSACTIONMANAGER_OBJECT_PATH)+(38*sizeof(WCHAR)))
     82 #define TRANSACTION_OBJECT_NAME_LENGTH_IN_BYTES        (sizeof(TRANSACTION_OBJECT_PATH)+(38*sizeof(WCHAR)))
     83 #define ENLISTMENT_OBJECT_NAME_LENGTH_IN_BYTES         (sizeof(ENLISTMENT_OBJECT_PATH)+(38*sizeof(WCHAR)))
     84 #define RESOURCE_MANAGER_OBJECT_NAME_LENGTH_IN_BYTES   (sizeof(RESOURCE_MANAGER_OBJECT_PATH)+(38*sizeof(WCHAR)))
     85 
     86 #define TRANSACTION_NOTIFICATION_TM_ONLINE_FLAG_IS_CLUSTERED 0x1
     87 
     88 #define KTM_MARSHAL_BLOB_VERSION_MAJOR 1
     89 #define KTM_MARSHAL_BLOB_VERSION_MINOR 1
     90 
     91 #define MAX_TRANSACTION_DESCRIPTION_LENGTH  64
     92 #define MAX_RESOURCEMANAGER_DESCRIPTION_LENGTH  64
     93 
     94 #ifndef _WDMDDK_
     95 typedef GUID UOW, *PUOW;
     96 #endif
     97 
     98 typedef GUID CRM_PROTOCOL_ID, *PCRM_PROTOCOL_ID;
     99 typedef ULONG NOTIFICATION_MASK;
    100 typedef ULONG SAVEPOINT_ID, *PSAVEPOINT_ID;
    101 
    102 typedef struct _TRANSACTION_NOTIFICATION {
    103   PVOID TransactionKey;
    104   ULONG TransactionNotification;
    105   LARGE_INTEGER TmVirtualClock;
    106   ULONG ArgumentLength;
    107 } TRANSACTION_NOTIFICATION, *PTRANSACTION_NOTIFICATION;
    108 
    109 typedef struct _TRANSACTION_NOTIFICATION_RECOVERY_ARGUMENT {
    110   GUID EnlistmentId;
    111 /* UOW is typedef'ed as GUID just above.  Changed type of UOW
    112  * to GUID from UOW for C++ compat. using ::UOW for C++ works
    113  * too but we were reported some problems in corner cases and
    114  * MSDN documents this structure with "GUID UOW;" anyway. */
    115   GUID UOW;
    116 } TRANSACTION_NOTIFICATION_RECOVERY_ARGUMENT, *PTRANSACTION_NOTIFICATION_RECOVERY_ARGUMENT;
    117 
    118 typedef struct _TRANSACTION_NOTIFICATION_TM_ONLINE_ARGUMENT {
    119   GUID TmIdentity;
    120   ULONG Flags;
    121 } TRANSACTION_NOTIFICATION_TM_ONLINE_ARGUMENT, *PTRANSACTION_NOTIFICATION_TM_ONLINE_ARGUMENT;
    122 
    123 typedef struct _TRANSACTION_NOTIFICATION_SAVEPOINT_ARGUMENT {
    124   SAVEPOINT_ID SavepointId;
    125 } TRANSACTION_NOTIFICATION_SAVEPOINT_ARGUMENT, *PTRANSACTION_NOTIFICATION_SAVEPOINT_ARGUMENT;
    126 
    127 typedef struct _TRANSACTION_NOTIFICATION_PROPAGATE_ARGUMENT {
    128   ULONG PropagationCookie;
    129   GUID UOW;
    130   GUID TmIdentity;
    131   ULONG BufferLength;
    132 } TRANSACTION_NOTIFICATION_PROPAGATE_ARGUMENT, *PTRANSACTION_NOTIFICATION_PROPAGATE_ARGUMENT,
    133   TRANSACTION_NOTIFICATION_PROMOTE_ARGUMENT, *PTRANSACTION_NOTIFICATION_PROMOTE_ARGUMENT;
    134 
    135 typedef struct _TRANSACTION_NOTIFICATION_MARSHAL_ARGUMENT {
    136   ULONG MarshalCookie;
    137   GUID UOW;
    138 } TRANSACTION_NOTIFICATION_MARSHAL_ARGUMENT, *PTRANSACTION_NOTIFICATION_MARSHAL_ARGUMENT;
    139 
    140 typedef struct _KCRM_MARSHAL_HEADER {
    141   ULONG VersionMajor;
    142   ULONG VersionMinor;
    143   ULONG NumProtocols;
    144   ULONG Unused;
    145 } KCRM_MARSHAL_HEADER, *PKCRM_MARSHAL_HEADER, *RESTRICTED_POINTER PRKCRM_MARSHAL_HEADER;
    146 
    147 typedef struct _KCRM_TRANSACTION_BLOB {
    148 #if defined(__cplusplus)
    149   ::UOW UOW;
    150 #else
    151   UOW UOW;
    152 #endif
    153   GUID TmIdentity;
    154   ULONG IsolationLevel;
    155   ULONG IsolationFlags;
    156   ULONG Timeout;
    157   WCHAR Description[MAX_TRANSACTION_DESCRIPTION_LENGTH];
    158 } KCRM_TRANSACTION_BLOB, *PKCRM_TRANSACTION_BLOB, *RESTRICTED_POINTER PRKCRM_TRANSACTION_BLOB;
    159 
    160 typedef struct _KCRM_PROTOCOL_BLOB {
    161   CRM_PROTOCOL_ID ProtocolId;
    162   ULONG StaticInfoLength;
    163   ULONG TransactionIdInfoLength;
    164   ULONG Unused1;
    165   ULONG Unused2;
    166 } KCRM_PROTOCOL_BLOB, *PKCRM_PROTOCOL_BLOB, *RESTRICTED_POINTER PRKCRM_PROTOCOL_BLOB;
    167 
    168 #endif /* _KTMTYPES_ */
    169