xref: /reactos/sdk/include/psdk/txdtc.idl (revision c3483339)
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