1/* 2 * Copyright (C) 2013 Daniel Jeliński 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with this library; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 17 */ 18 19import "txcoord.idl"; 20 21interface IXATransLookup; 22interface IXATransLookup2; 23interface IResourceManagerSink; 24interface IResourceManager; 25interface ILastResourceManager; 26interface IResourceManager2; 27interface IXAConfig; 28/*interface IRMHelper; 29interface IXAObtainRMInfo;*/ 30interface IResourceManagerFactory; 31interface IResourceManagerFactory2; 32interface IPrepareInfo; 33interface IPrepareInfo2; 34interface IGetDispenser; 35interface ITransactionVoterBallotAsync2; 36interface ITransactionVoterNotifyAsync2; 37interface ITransactionVoterFactory2; 38interface ITransactionPhase0EnlistmentAsync; 39interface ITransactionPhase0NotifyAsync; 40interface ITransactionPhase0Factory; 41interface ITransactionTransmitter; 42interface ITransactionTransmitterFactory; 43interface ITransactionReceiver; 44interface ITransactionReceiverFactory; 45interface IDtcLuConfigure; 46interface IDtcLuRecovery; 47interface IDtcLuRecoveryFactory; 48interface IDtcLuRecoveryInitiatedByDtcTransWork; 49interface IDtcLuRecoveryInitiatedByDtcStatusWork; 50interface IDtcLuRecoveryInitiatedByDtc; 51interface IDtcLuRecoveryInitiatedByLuWork; 52interface IDtcLuRecoveryInitiatedByLu; 53interface IDtcLuRmEnlistment; 54interface IDtcLuRmEnlistmentSink; 55interface IDtcLuRmEnlistmentFactory; 56interface IDtcLuSubordinateDtc; 57interface IDtcLuSubordinateDtcSink; 58interface IDtcLuSubordinateDtcFactory; 59 60cpp_quote("#define XACTTOMSG(dwXact) (dwXact-0x00040000+0x40000000)") 61typedef enum XACT_DTC_CONSTANTS { 62 XACT_E_CONNECTION_REQUEST_DENIED = 0x8004d100, 63 XACT_E_TOOMANY_ENLISTMENTS = 0x8004d101, 64 XACT_E_DUPLICATE_GUID = 0x8004d102, 65 XACT_E_NOTSINGLEPHASE = 0x8004d103, 66 XACT_E_RECOVERYALREADYDONE = 0x8004d104, 67 XACT_E_PROTOCOL = 0x8004d105, 68 XACT_E_RM_FAILURE = 0x8004d106, 69 XACT_E_RECOVERY_FAILED = 0x8004d107, 70 XACT_E_LU_NOT_FOUND = 0x8004d108, 71 XACT_E_DUPLICATE_LU = 0x8004d109, 72 XACT_E_LU_NOT_CONNECTED = 0x8004d10a, 73 XACT_E_DUPLICATE_TRANSID = 0x8004d10b, 74 XACT_E_LU_BUSY = 0x8004d10c, 75 XACT_E_LU_NO_RECOVERY_PROCESS = 0x8004d10d, 76 XACT_E_LU_DOWN = 0x8004d10e, 77 XACT_E_LU_RECOVERING = 0x8004d10f, 78 XACT_E_LU_RECOVERY_MISMATCH = 0x8004d110, 79 XACT_E_RM_UNAVAILABLE = 0x8004d111, 80 XACT_E_LRMRECOVERYALREADYDONE = 0x8004d112, 81 XACT_E_NOLASTRESOURCEINTERFACE = 0x8004d113, 82 XACT_S_NONOTIFY = 0x4d100, 83 XACT_OK_NONOTIFY = 0x4d101, 84 dwUSER_MS_SQLSERVER = 0xffff 85} XACT_DTC_CONSTANTS; 86 87cpp_quote("#ifndef _XID_T_DEFINED") 88cpp_quote("#define _XID_T_DEFINED") 89typedef struct xid_t { 90 LONG32 formatID; 91 LONG32 gtrid_length; 92 LONG32 bqual_length; 93 char data[128 ]; 94} XID; 95cpp_quote("#endif") 96/* idl doesn't like this type 97cpp_quote("#ifndef _XA_SWITCH_T_DEFINED") 98cpp_quote("#define _XA_SWITCH_T_DEFINED") 99typedef struct xa_switch_t { 100 char name[32 ]; 101 LONG32 flags; 102 LONG32 version; 103 int (__cdecl *xa_open_entry)(char *__MIDL_0004,int __MIDL_0005,LONG32 __MIDL_0006); 104 int (__cdecl *xa_close_entry)(char *__MIDL_0008,int __MIDL_0009,LONG32 __MIDL_0010); 105 int (__cdecl *xa_start_entry)(XID *__MIDL_0012,int __MIDL_0013,LONG32 __MIDL_0014); 106 int (__cdecl *xa_end_entry)(XID *__MIDL_0016,int __MIDL_0017,LONG32 __MIDL_0018); 107 int (__cdecl *xa_rollback_entry)(XID *__MIDL_0020,int __MIDL_0021,LONG32 __MIDL_0022); 108 int (__cdecl *xa_prepare_entry)(XID *__MIDL_0024,int __MIDL_0025,LONG32 __MIDL_0026); 109 int (__cdecl *xa_commit_entry)(XID *__MIDL_0028,int __MIDL_0029,LONG32 __MIDL_0030); 110 int (__cdecl *xa_recover_entry)(XID *__MIDL_0032,LONG32 __MIDL_0033,int __MIDL_0034,LONG32 __MIDL_0035); 111 int (__cdecl *xa_forget_entry)(XID *__MIDL_0037,int __MIDL_0038,LONG32 __MIDL_0039); 112 int (__cdecl *xa_complete_entry)(int *__MIDL_0041,int *__MIDL_0042,int __MIDL_0043,LONG32 __MIDL_0044); 113} xa_switch_t; 114cpp_quote("#endif") 115*/ 116[ 117 object, 118 uuid(f3b1f131-eeda-11ce-aed4-00aa0051e2c4) 119] 120interface IXATransLookup : IUnknown { 121 HRESULT Lookup([out]ITransaction **ppTransaction); 122} 123[ 124 object, 125 uuid(bf193c85-0d1a-4290-b88f-d2cb8873d1e7) 126] 127interface IXATransLookup2 : IUnknown { 128 HRESULT Lookup([in]XID *pXID,[out]ITransaction **ppTransaction); 129} 130[ 131 object, 132 uuid(0d563181-defb-11ce-aed1-00aa0051e2c4) 133] 134interface IResourceManagerSink : IUnknown { 135 HRESULT TMDown(void); 136} 137[ 138 object, 139 uuid(13741d21-87eb-11ce-8081-0080c758527e) 140] 141interface IResourceManager : IUnknown { 142 HRESULT Enlist([in]ITransaction *pTransaction,[in]ITransactionResourceAsync *pRes,[out]XACTUOW *pUOW,[out]LONG *pisoLevel,[out]ITransactionEnlistmentAsync **ppEnlist); 143 HRESULT Reenlist([in]byte *pPrepInfo,[in]ULONG cbPrepInfo,[in]DWORD lTimeout,[out]XACTSTAT *pXactStat); 144 HRESULT ReenlistmentComplete(void); 145 HRESULT GetDistributedTransactionManager([in]REFIID iid,[out,iid_is(iid)]void **ppvObject); 146} 147[ 148 object, 149 uuid(4d964ad4-5b33-11d3-8a91-00c04f79eb6d) 150] 151interface ILastResourceManager : IUnknown { 152 HRESULT TransactionCommitted([in]byte *pPrepInfo,[in]ULONG cbPrepInfo); 153 HRESULT RecoveryDone(void); 154} 155[ 156 object, 157 uuid(d136c69a-f749-11d1-8f47-00c04f8ee57d) 158] 159interface IResourceManager2 : IResourceManager { 160 HRESULT Enlist2([in]ITransaction *pTransaction,[in]ITransactionResourceAsync *pResAsync,[out]XACTUOW *pUOW,[out]LONG *pisoLevel,[out]XID *pXid,[out]ITransactionEnlistmentAsync **ppEnlist); 161 HRESULT Reenlist2([in]XID *pXid,[in]DWORD dwTimeout,[out]XACTSTAT *pXactStat); 162} 163[ 164 object, 165 uuid(c8a6e3a1-9a8c-11cf-a308-00a0c905416e) 166] 167interface IXAConfig : IUnknown { 168 HRESULT Initialize([in]GUID clsidHelperDll); 169 HRESULT Terminate(void); 170} 171/* commented out because idl doesn't accept xa_switch_t type 172[ 173 object, 174 uuid(E793F6D1-F53D-11cf-A60D-00A0C905416E) 175] 176interface IRMHelper : IUnknown { 177 HRESULT RMCount([in]DWORD dwcTotalNumberOfRMs); 178 HRESULT RMInfo([in]xa_switch_t *pXa_Switch,[in]BOOL fCDeclCallingConv,[in]char *pszOpenString,[in]char *pszCloseString,[in]GUID guidRMRecovery); 179} 180[ 181 object, 182 uuid(E793F6D2-F53D-11cf-A60D-00A0C905416E) 183] 184interface IXAObtainRMInfo : IUnknown { 185 HRESULT ObtainRMInfo([in]IRMHelper *pIRMHelper); 186}*/ 187[ 188 object, 189 uuid(13741d20-87eb-11ce-8081-0080c758527e) 190] 191interface IResourceManagerFactory : IUnknown { 192 HRESULT Create([in]GUID *pguidRM,[in]CHAR *pszRMName,[in]IResourceManagerSink *pIResMgrSink,[out]IResourceManager **ppResMgr); 193} 194[ 195 object, 196 uuid(6b369c21-fbd2-11d1-8f47-00c04f8ee57d) 197] 198interface IResourceManagerFactory2 : IResourceManagerFactory { 199 HRESULT CreateEx([in]GUID *pguidRM,[in]CHAR *pszRMName,[in]IResourceManagerSink *pIResMgrSink,[in]REFIID riidRequested,[out, iid_is(riidRequested)]void **ppvResMgr); 200} 201 202[ 203 object, 204 uuid(80c7bfd0-87ee-11ce-8081-0080c758527e) 205] 206interface IPrepareInfo : IUnknown { 207 HRESULT GetPrepareInfoSize([out]ULONG *pcbPrepInfo); 208 HRESULT GetPrepareInfo([out]byte *pPrepInfo); 209} 210[ 211 object, 212 uuid(5fab2547-9779-11d1-b886-00c04fb9618a) 213] 214interface IPrepareInfo2 : IUnknown { 215 HRESULT GetPrepareInfoSize([out]ULONG *pcbPrepInfo); 216 HRESULT GetPrepareInfo([in]ULONG cbPrepareInfo,[out]byte *pPrepInfo); 217} 218[ 219 object, 220 uuid(c23cc370-87ef-11ce-8081-0080c758527e) 221] 222interface IGetDispenser : IUnknown { 223 HRESULT GetDispenser([in]REFIID iid,[out,iid_is(iid)]void **ppvObject); 224} 225[ 226 object, 227 uuid(5433376c-414d-11d3-b206-00c04fc2f3ef) 228] 229interface ITransactionVoterBallotAsync2 : IUnknown { 230 HRESULT VoteRequestDone([in]HRESULT hr,[in]BOID *pboidReason); 231} 232[ 233 object, 234 uuid(5433376b-414d-11d3-b206-00c04fc2f3ef) 235] 236interface ITransactionVoterNotifyAsync2 : ITransactionOutcomeEvents { 237 HRESULT VoteRequest(void); 238} 239[ 240 object, 241 uuid(5433376a-414d-11d3-b206-00c04fc2f3ef) 242] 243interface ITransactionVoterFactory2 : IUnknown { 244 HRESULT Create([in]ITransaction *pTransaction,[in]ITransactionVoterNotifyAsync2 *pVoterNotify,[out]ITransactionVoterBallotAsync2 **ppVoterBallot); 245} 246[ 247 object, 248 uuid(82dc88e1-a954-11d1-8f88-00600895e7d5) 249] 250interface ITransactionPhase0EnlistmentAsync : IUnknown { 251 HRESULT Enable(void); 252 HRESULT WaitForEnlistment(void); 253 HRESULT Phase0Done(void); 254 HRESULT Unenlist(void); 255 HRESULT GetTransaction([out]ITransaction **ppITransaction); 256} 257[ 258 object, 259 uuid(ef081809-0c76-11d2-87a6-00c04f990f34) 260] 261interface ITransactionPhase0NotifyAsync : IUnknown { 262 HRESULT Phase0Request([in]BOOL fAbortingHint); 263 HRESULT EnlistCompleted([in]HRESULT status); 264} 265[ 266 object, 267 uuid(82dc88e0-a954-11d1-8f88-00600895e7d5) 268] 269interface ITransactionPhase0Factory : IUnknown { 270 HRESULT Create([in]ITransactionPhase0NotifyAsync *pPhase0Notify,[out]ITransactionPhase0EnlistmentAsync **ppPhase0Enlistment); 271} 272[ 273 object, 274 uuid(59313e01-b36c-11cf-a539-00aa006887c3) 275] 276interface ITransactionTransmitter : IUnknown { 277 HRESULT Set([in]ITransaction *pTransaction); 278 HRESULT GetPropagationTokenSize([out]ULONG *pcbToken); 279 HRESULT MarshalPropagationToken([in]ULONG cbToken,[out]byte *rgbToken,[out]ULONG *pcbUsed); 280 HRESULT UnmarshalReturnToken([in]ULONG cbReturnToken,[in]byte *rgbReturnToken); 281 HRESULT Reset(void); 282} 283[ 284 object, 285 uuid(59313e00-b36c-11cf-a539-00aa006887c3) 286] 287interface ITransactionTransmitterFactory : IUnknown { 288 HRESULT Create([out]ITransactionTransmitter **ppTransmitter); 289} 290[ 291 object, 292 uuid(59313e03-b36c-11cf-a539-00aa006887c3) 293] 294interface ITransactionReceiver : IUnknown { 295 HRESULT UnmarshalPropagationToken([in]ULONG cbToken,[in]byte *rgbToken,[out]ITransaction **ppTransaction); 296 HRESULT GetReturnTokenSize([out]ULONG *pcbReturnToken); 297 HRESULT MarshalReturnToken([in]ULONG cbReturnToken,[out]byte *rgbReturnToken,[out]ULONG *pcbUsed); 298 HRESULT Reset(void); 299} 300[ 301 object, 302 uuid(59313e02-b36c-11cf-a539-00aa006887c3) 303] 304interface ITransactionReceiverFactory : IUnknown { 305 HRESULT Create([out]ITransactionReceiver **ppReceiver); 306} 307 308typedef struct _ProxyConfigParams { 309 WORD wcThreadsMax; 310} PROXY_CONFIG_PARAMS; 311 312[ 313 object, 314 uuid(4131e760-1aea-11d0-944b-00a0c905416e) 315] 316interface IDtcLuConfigure : IUnknown { 317 HRESULT Add([in]byte *pucLuPair,[in]DWORD cbLuPair); 318 HRESULT Delete([in]byte *pucLuPair,[in]DWORD cbLuPair); 319} 320[ 321 object, 322 uuid(ac2b8ad2-d6f0-11d0-b386-00a0c9083365) 323] 324interface IDtcLuRecovery : IUnknown { 325} 326[ 327 object, 328 uuid(4131e762-1aea-11d0-944b-00a0c905416e) 329] 330interface IDtcLuRecoveryFactory : IUnknown { 331 HRESULT Create([in]byte *pucLuPair,[in]DWORD cbLuPair,[out]IDtcLuRecovery **ppRecovery); 332} 333 334typedef enum _DtcLu_LocalRecovery_Work { 335 DTCINITIATEDRECOVERYWORK_CHECKLUSTATUS = 1, 336 DTCINITIATEDRECOVERYWORK_TRANS, 337 DTCINITIATEDRECOVERYWORK_TMDOWN 338} DTCINITIATEDRECOVERYWORK; 339 340typedef enum _DtcLu_Xln { 341 DTCLUXLN_COLD = 1, 342 DTCLUXLN_WARM 343} DTCLUXLN; 344 345typedef enum _DtcLu_Xln_Confirmation { 346 DTCLUXLNCONFIRMATION_CONFIRM = 1, 347 DTCLUXLNCONFIRMATION_LOGNAMEMISMATCH, 348 DTCLUXLNCONFIRMATION_COLDWARMMISMATCH, 349 DTCLUXLNCONFIRMATION_OBSOLETE 350} DTCLUXLNCONFIRMATION; 351 352typedef enum _DtcLu_Xln_Response { 353 DTCLUXLNRESPONSE_OK_SENDOURXLNBACK = 1, 354 DTCLUXLNRESPONSE_OK_SENDCONFIRMATION, 355 DTCLUXLNRESPONSE_LOGNAMEMISMATCH, 356 DTCLUXLNRESPONSE_COLDWARMMISMATCH 357} DTCLUXLNRESPONSE; 358 359typedef enum _DtcLu_Xln_Error { 360 DTCLUXLNERROR_PROTOCOL = 1, 361 DTCLUXLNERROR_LOGNAMEMISMATCH, 362 DTCLUXLNERROR_COLDWARMMISMATCH 363} DTCLUXLNERROR; 364 365typedef enum _DtcLu_CompareState { 366 DTCLUCOMPARESTATE_COMMITTED = 1, 367 DTCLUCOMPARESTATE_HEURISTICCOMMITTED, 368 DTCLUCOMPARESTATE_HEURISTICMIXED, 369 DTCLUCOMPARESTATE_HEURISTICRESET, 370 DTCLUCOMPARESTATE_INDOUBT, 371 DTCLUCOMPARESTATE_RESET 372} DTCLUCOMPARESTATE; 373 374typedef enum _DtcLu_CompareStates_Confirmation { 375 DTCLUCOMPARESTATESCONFIRMATION_CONFIRM = 1, 376 DTCLUCOMPARESTATESCONFIRMATION_PROTOCOL 377} DTCLUCOMPARESTATESCONFIRMATION; 378 379typedef enum _DtcLu_CompareStates_Error { 380 DTCLUCOMPARESTATESERROR_PROTOCOL = 1 381} DTCLUCOMPARESTATESERROR; 382 383typedef enum _DtcLu_CompareStates_Response { 384 DTCLUCOMPARESTATESRESPONSE_OK = 1, 385 DTCLUCOMPARESTATESRESPONSE_PROTOCOL 386} DTCLUCOMPARESTATESRESPONSE; 387 388[ 389 object, 390 uuid(4131e765-1aea-11d0-944b-00a0c905416e) 391] 392interface IDtcLuRecoveryInitiatedByDtcTransWork : IUnknown { 393 HRESULT GetLogNameSizes([out]DWORD *pcbOurLogName,[out]DWORD *pcbRemoteLogName); 394 HRESULT GetOurXln([out]DTCLUXLN *pXln,[in,out]unsigned char *pOurLogName,[in,out]unsigned char *pRemoteLogName,[out]DWORD *pdwProtocol); 395 HRESULT HandleConfirmationFromOurXln([in]DTCLUXLNCONFIRMATION Confirmation); 396 HRESULT HandleTheirXlnResponse([in]DTCLUXLN Xln,[in]unsigned char *pRemoteLogName,[in]DWORD cbRemoteLogName,[in]DWORD dwProtocol,[out]DTCLUXLNCONFIRMATION *pConfirmation); 397 HRESULT HandleErrorFromOurXln([in]DTCLUXLNERROR Error); 398 HRESULT CheckForCompareStates([out]BOOL *fCompareStates); 399 HRESULT GetOurTransIdSize([in,out]DWORD *pcbOurTransId); 400 HRESULT GetOurCompareStates([in,out]unsigned char *pOurTransId,[out]DTCLUCOMPARESTATE *pCompareState); 401 HRESULT HandleTheirCompareStatesResponse([in]DTCLUCOMPARESTATE CompareState,[out]DTCLUCOMPARESTATESCONFIRMATION *pConfirmation); 402 HRESULT HandleErrorFromOurCompareStates([in]DTCLUCOMPARESTATESERROR Error); 403 HRESULT ConversationLost(void); 404 HRESULT GetRecoverySeqNum([out]LONG *plRecoverySeqNum); 405 HRESULT ObsoleteRecoverySeqNum([in]LONG lNewRecoverySeqNum); 406} 407[ 408 object, 409 uuid(4131e766-1aea-11d0-944b-00a0c905416e) 410] 411interface IDtcLuRecoveryInitiatedByDtcStatusWork : IUnknown { 412 HRESULT HandleCheckLuStatus([in]LONG lRecoverySeqNum); 413} 414[ 415 object, 416 uuid(4131e764-1aea-11d0-944b-00a0c905416e) 417] 418[local] interface IDtcLuRecoveryInitiatedByDtc : IUnknown { 419 HRESULT GetWork([in,out]DTCINITIATEDRECOVERYWORK *pWork,[in,out]void **ppv); 420} 421[ 422 object, 423 uuid(ac2b8ad1-d6f0-11d0-b386-00a0c9083365) 424] 425interface IDtcLuRecoveryInitiatedByLuWork : IUnknown { 426 HRESULT HandleTheirXln([in]LONG lRecoverySeqNum,[in]DTCLUXLN Xln,[in]unsigned char *pRemoteLogName,[in]DWORD cbRemoteLogName,[in]unsigned char *pOurLogName,[in]DWORD cbOurLogName,[in]DWORD dwProtocol,[out]DTCLUXLNRESPONSE *pResponse); 427 HRESULT GetOurLogNameSize([in,out]DWORD *pcbOurLogName); 428 HRESULT GetOurXln([out]DTCLUXLN *pXln,[in,out]unsigned char *pOurLogName,[out]DWORD *pdwProtocol); 429 HRESULT HandleConfirmationOfOurXln([in]DTCLUXLNCONFIRMATION Confirmation); 430 HRESULT HandleTheirCompareStates([in,out]unsigned char *pRemoteTransId,[in]DWORD cbRemoteTransId,[in]DTCLUCOMPARESTATE CompareState,[out]DTCLUCOMPARESTATESRESPONSE *pResponse,[out]DTCLUCOMPARESTATE *pCompareState); 431 HRESULT HandleConfirmationOfOurCompareStates([in]DTCLUCOMPARESTATESCONFIRMATION Confirmation); 432 HRESULT HandleErrorFromOurCompareStates([in]DTCLUCOMPARESTATESERROR Error); 433 HRESULT ConversationLost(void); 434} 435[ 436 object, 437 uuid(4131e768-1aea-11d0-944b-00a0c905416e) 438] 439interface IDtcLuRecoveryInitiatedByLu : IUnknown { 440 HRESULT GetObjectToHandleWorkFromLu([out]IDtcLuRecoveryInitiatedByLuWork **ppWork); 441} 442[ 443 object, 444 uuid(4131e769-1aea-11d0-944b-00a0c905416e) 445] 446interface IDtcLuRmEnlistment : IUnknown { 447 HRESULT Unplug([in]BOOL fConversationLost); 448 HRESULT BackedOut(void); 449 HRESULT BackOut(void); 450 HRESULT Committed(void); 451 HRESULT Forget(void); 452 HRESULT RequestCommit(void); 453} 454[ 455 object, 456 uuid(4131e770-1aea-11d0-944b-00a0c905416e) 457] 458interface IDtcLuRmEnlistmentSink : IUnknown { 459 HRESULT AckUnplug(void); 460 HRESULT TmDown(void); 461 HRESULT SessionLost(void); 462 HRESULT BackedOut(void); 463 HRESULT BackOut(void); 464 HRESULT Committed(void); 465 HRESULT Forget(void); 466 HRESULT Prepare(void); 467 HRESULT RequestCommit(void); 468} 469[ 470 object, 471 uuid(4131e771-1aea-11d0-944b-00a0c905416e) 472] 473interface IDtcLuRmEnlistmentFactory : IUnknown { 474 HRESULT Create([in]unsigned char *pucLuPair,[in]DWORD cbLuPair,[in]ITransaction *pITransaction,[in]unsigned char *pTransId,[in]DWORD cbTransId,[in]IDtcLuRmEnlistmentSink *pRmEnlistmentSink,[in,out]IDtcLuRmEnlistment **ppRmEnlistment); 475} 476[ 477 object, 478 uuid(4131e773-1aea-11d0-944b-00a0c905416e) 479] 480interface IDtcLuSubordinateDtc : IUnknown { 481 HRESULT Unplug([in]BOOL fConversationLost); 482 HRESULT BackedOut(void); 483 HRESULT BackOut(void); 484 HRESULT Committed(void); 485 HRESULT Forget(void); 486 HRESULT Prepare(void); 487 HRESULT RequestCommit(void); 488} 489[ 490 object, 491 uuid(4131e774-1aea-11d0-944b-00a0c905416e) 492] 493interface IDtcLuSubordinateDtcSink : IUnknown { 494 HRESULT AckUnplug(void); 495 HRESULT TmDown(void); 496 HRESULT SessionLost(void); 497 HRESULT BackedOut(void); 498 HRESULT BackOut(void); 499 HRESULT Committed(void); 500 HRESULT Forget(void); 501 HRESULT RequestCommit(void); 502} 503[ 504 object, 505 uuid(4131e775-1aea-11d0-944b-00a0c905416e) 506] 507interface IDtcLuSubordinateDtcFactory : IUnknown { 508 HRESULT Create([in]unsigned char *pucLuPair,[in]DWORD cbLuPair,[in]IUnknown *punkTransactionOuter,[in]ISOLEVEL isoLevel,[in]ULONG isoFlags,[in]ITransactionOptions *pOptions,[out]ITransaction **ppTransaction,[in]unsigned char *pTransId,[in]DWORD cbTransId,[in]IDtcLuSubordinateDtcSink *pSubordinateDtcSink,[in,out]IDtcLuSubordinateDtc **ppSubordinateDtc); 509} 510 511/* these GUIDs were found in mingw header, but without corresponding interface definitions 512 DEFINE_GUID(IID_IXAResourceManager,0x4131e751,0x1aea,0x11d0,0x94,0x4b,0x00,0xa0,0xc9,0x05,0x41,0x6e); 513 DEFINE_GUID(IID_IXAResourceManagerFactory,0x4131e750,0x1aea,0x11d0,0x94,0x4b,0x00,0xa0,0xc9,0x05,0x41,0x6e); 514 DEFINE_GUID(IID_IXATransaction,0x4131e752,0x1aea,0x11d0,0x94,0x4b,0x00,0xa0,0xc9,0x05,0x41,0x6e); 515*/ 516