https://git.reactos.org/?p=reactos.git;a=commitdiff;h=e6e9cdf8e04286686c98d6ed1f29deb710d1d346
commit e6e9cdf8e04286686c98d6ed1f29deb710d1d346 Author: Hermès Bélusca-Maïto <hermes.belusca-ma...@reactos.org> AuthorDate: Fri Nov 30 21:44:21 2018 +0100 Commit: Hermès Bélusca-Maïto <hermes.belusca-ma...@reactos.org> CommitDate: Fri Nov 30 21:49:23 2018 +0100 [SDK] Add transact.idl, txcoord.idl and txdtc.idl, and introduce MS-PSDK-compatible adsiid library that defines GUIDs used by ADS interfaces. --- sdk/include/psdk/CMakeLists.txt | 4 + sdk/include/psdk/transact.idl | 226 ++++++++++++++++++ sdk/include/psdk/txcoord.idl | 181 ++++++++++++++ sdk/include/psdk/txdtc.idl | 515 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 926 insertions(+) diff --git a/sdk/include/psdk/CMakeLists.txt b/sdk/include/psdk/CMakeLists.txt index 845873fca6..7667ff07ae 100644 --- a/sdk/include/psdk/CMakeLists.txt +++ b/sdk/include/psdk/CMakeLists.txt @@ -116,7 +116,10 @@ list(APPEND SOURCE textstor.idl tlogstg.idl tom.idl + transact.idl tuner.idl + txcoord.idl + txdtc.idl unknwn.idl urlhist.idl urlmon.idl @@ -149,6 +152,7 @@ add_custom_target(stdole2 DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/stdole2.tlb) add_idl_headers(d3d_idl_headers d3dcommon.idl) +add_iid_library(adsiid iads.idl transact.idl) add_iid_library(wuguid wuapi.idl) add_iid_library(xml_uuids msxml2.idl) diff --git a/sdk/include/psdk/transact.idl b/sdk/include/psdk/transact.idl new file mode 100644 index 0000000000..fb3bd42de1 --- /dev/null +++ b/sdk/include/psdk/transact.idl @@ -0,0 +1,226 @@ +/* + * Copyright (C) 2013 Daniel Jeliński + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +import "unknwn.idl"; + +cpp_quote("#include <winerror.h>") + +interface ITransaction; +interface ITransactionCloner; +interface ITransaction2; +interface ITransactionDispenser; +interface ITransactionOptions; +interface ITransactionOutcomeEvents; +interface ITmNodeName; + +typedef struct BOID { + byte rgb[16]; +} BOID; + +cpp_quote("#ifndef MAX_TRAN_DESC_DEFINED") +cpp_quote("#define MAX_TRAN_DESC_DEFINED") +typedef enum TX_MISC_CONSTANTS { + MAX_TRAN_DESC = 40 +} TX_MISC_CONSTANTS; +cpp_quote("#endif") + +typedef BOID XACTUOW; +typedef LONG ISOLEVEL; + +typedef enum ISOLATIONLEVEL { + ISOLATIONLEVEL_UNSPECIFIED = 0xffffffff, + ISOLATIONLEVEL_CHAOS = 0x10, + ISOLATIONLEVEL_READUNCOMMITTED = 0x100, + ISOLATIONLEVEL_BROWSE = 0x100, + ISOLATIONLEVEL_CURSORSTABILITY = 0x1000, + ISOLATIONLEVEL_READCOMMITTED = 0x1000, + ISOLATIONLEVEL_REPEATABLEREAD = 0x10000, + ISOLATIONLEVEL_SERIALIZABLE = 0x100000, + ISOLATIONLEVEL_ISOLATED = 0x100000 +} ISOLATIONLEVEL; + +typedef struct XACTTRANSINFO { + XACTUOW uow; + ISOLEVEL isoLevel; + ULONG isoFlags; + DWORD grfTCSupported; + DWORD grfRMSupported; + DWORD grfTCSupportedRetaining; + DWORD grfRMSupportedRetaining; +} XACTTRANSINFO; + +typedef struct XACTSTATS { + ULONG cOpen; + ULONG cCommitting; + ULONG cCommitted; + ULONG cAborting; + ULONG cAborted; + ULONG cInDoubt; + ULONG cHeuristicDecision; + FILETIME timeTransactionsUp; +} XACTSTATS; + +typedef enum ISOFLAG { + ISOFLAG_RETAIN_COMMIT_DC = 1, + ISOFLAG_RETAIN_COMMIT = 2, + ISOFLAG_RETAIN_COMMIT_NO = 3, + ISOFLAG_RETAIN_ABORT_DC = 4, + ISOFLAG_RETAIN_ABORT = 8, + ISOFLAG_RETAIN_ABORT_NO = 12, + ISOFLAG_RETAIN_DONTCARE = ISOFLAG_RETAIN_COMMIT_DC | ISOFLAG_RETAIN_ABORT_DC, + ISOFLAG_RETAIN_BOTH = ISOFLAG_RETAIN_COMMIT | ISOFLAG_RETAIN_ABORT, + ISOFLAG_RETAIN_NONE = ISOFLAG_RETAIN_COMMIT_NO | ISOFLAG_RETAIN_ABORT_NO, + ISOFLAG_OPTIMISTIC = 16, + ISOFLAG_READONLY = 32 +} ISOFLAG; + +typedef enum XACTTC { + XACTTC_NONE = 0, + XACTTC_SYNC_PHASEONE = 1, + XACTTC_SYNC_PHASETWO = 2, + XACTTC_SYNC = 2, + XACTTC_ASYNC_PHASEONE = 4, + XACTTC_ASYNC = 4 +} XACTTC; + +typedef enum XACTRM { + XACTRM_OPTIMISTICLASTWINS = 1, + XACTRM_NOREADONLYPREPARES +} XACTRM; + +typedef enum XACTCONST { + XACTCONST_TIMEOUTINFINITE +} XACTCONST; + +typedef enum XACTHEURISTIC { + XACTHEURISTIC_ABORT = 1, + XACTHEURISTIC_COMMIT, + XACTHEURISTIC_DAMAGE, + XACTHEURISTIC_DANGER +} XACTHEURISTIC; + +typedef enum XACTSTAT { + XACTSTAT_NONE = 0, + XACTSTAT_OPENNORMAL = 0x1, + XACTSTAT_OPENREFUSED = 0x2, + XACTSTAT_PREPARING = 0x4, + XACTSTAT_PREPARED = 0x8, + XACTSTAT_PREPARERETAINING = 0x10, + XACTSTAT_PREPARERETAINED = 0x20, + XACTSTAT_COMMITTING = 0x40, + XACTSTAT_COMMITRETAINING = 0x80, + XACTSTAT_ABORTING = 0x100, + XACTSTAT_ABORTED = 0x200, + XACTSTAT_COMMITTED = 0x400, + XACTSTAT_HEURISTIC_ABORT = 0x800, + XACTSTAT_HEURISTIC_COMMIT = 0x1000, + XACTSTAT_HEURISTIC_DAMAGE = 0x2000, + XACTSTAT_HEURISTIC_DANGER = 0x4000, + XACTSTAT_FORCED_ABORT = 0x8000, + XACTSTAT_FORCED_COMMIT = 0x10000, + XACTSTAT_INDOUBT = 0x20000, + XACTSTAT_CLOSED = 0x40000, + XACTSTAT_OPEN = 0x3, + XACTSTAT_NOTPREPARED = 0x7ffc3, + XACTSTAT_ALL = 0x7ffff +} XACTSTAT; + +typedef struct XACTOPT { + ULONG ulTimeout; + char szDescription[40 ]; +} XACTOPT; + +[ + object, + uuid(0fb15084-af41-11ce-bd2b-204c4f4f5020) +] +interface ITransaction : IUnknown { + HRESULT Commit([in] BOOL fRetaining, + [in] DWORD grfTC, + [in] DWORD grfRM); + HRESULT Abort([in, unique] BOID *pboidReason, + [in] BOOL fRetaining, + [in] BOOL fAsync); + HRESULT GetTransactionInfo([out] XACTTRANSINFO *pinfo); +} + +[ + object, + uuid(02656950-2152-11d0-944C-00A0C905416E) +] +interface ITransactionCloner : ITransaction { + HRESULT CloneWithCommitDisabled([out] ITransaction **ppITransaction); +} + +[ + object, + uuid(34021548-0065-11d3-bac1-00c04f797be2) +] +interface ITransaction2 : ITransactionCloner { + HRESULT GetTransactionInfo2([out] XACTTRANSINFO *pinfo); +} + +[ + object, + uuid(3A6AD9E1-23B9-11cf-AD60-00AA00A74CCD) +] +interface ITransactionDispenser : IUnknown { + HRESULT GetOptionsObject([out] ITransactionOptions **ppOptions); + HRESULT BeginTransaction([in, unique] IUnknown *punkOuter, + [in] ISOLEVEL isoLevel, + [in] ULONG isoFlags, + [in, unique] ITransactionOptions *pOptions, + [out] ITransaction **ppTransaction); +} + +[ + object, + uuid(3A6AD9E0-23B9-11cf-AD60-00AA00A74CCD) +] +interface ITransactionOptions : IUnknown { + HRESULT SetOptions([in] XACTOPT *pOptions); + HRESULT GetOptions([in, out] XACTOPT *pOptions); +} + +[ + object, + uuid(3A6AD9E2-23B9-11cf-AD60-00AA00A74CCD) +] +interface ITransactionOutcomeEvents : IUnknown { + HRESULT Committed([in] BOOL fRetaining, + [in, unique] XACTUOW *pNewUOW, + [in] HRESULT hr); + HRESULT Aborted([in, unique] BOID *pboidReason, + [in] BOOL fRetaining, + [in, unique] XACTUOW *pNewUOW, + [in] HRESULT hr); + HRESULT HeuristicDecision([in] DWORD dwDecision, + [in, unique] BOID *pboidReason, + [in] HRESULT hr); + HRESULT Indoubt(void); +} + +[ + object, + uuid(30274F88-6EE4-474e-9B95-7807BC9EF8CF) +] +interface ITmNodeName : IUnknown { + HRESULT GetNodeNameSize([out] ULONG *pcbNodeNameSize); + HRESULT GetNodeName([in] ULONG cbNodeNameBufferSize, + [in, out] LPWSTR pNodeNameBuffer); +} diff --git a/sdk/include/psdk/txcoord.idl b/sdk/include/psdk/txcoord.idl new file mode 100644 index 0000000000..e4a578494c --- /dev/null +++ b/sdk/include/psdk/txcoord.idl @@ -0,0 +1,181 @@ +/* + * Copyright (C) 2013 Daniel Jeliński + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +import "transact.idl"; +import "objidl.idl"; + +interface ITransactionResourceAsync; +interface ITransactionLastResourceAsync; +interface ITransactionResource; +interface ITransactionEnlistmentAsync; +interface ITransactionLastEnlistmentAsync; +interface ITransactionExportFactory; +interface ITransactionImportWhereabouts; +interface ITransactionExport; +interface ITransactionImport; +interface ITipTransaction; +interface ITipHelper; +interface ITipPullSink; +interface IDtcNetworkAccessConfig; +interface IDtcNetworkAccessConfig2; + +[ + object, + uuid(69e971f0-23ce-11cf-ad60-00aa00a74ccd) +] +interface ITransactionResourceAsync : IUnknown { + HRESULT PrepareRequest([in]BOOL fRetaining,[in]DWORD grfRM,[in]BOOL fWantMoniker,[in]BOOL fSinglePhase); + HRESULT CommitRequest([in]DWORD grfRM,[in]XACTUOW *pNewUOW); + HRESULT AbortRequest([in]BOID *pboidReason,[in]BOOL fRetaining,[in]XACTUOW *pNewUOW); + HRESULT TMDown(void); +} + +[ + object, + uuid(c82bd532-5b30-11d3-8a91-00c04f79eb6d) +] +interface ITransactionLastResourceAsync : IUnknown { + HRESULT DelegateCommit([in]DWORD grfRM); + HRESULT ForgetRequest([in]XACTUOW *pNewUOW); +} + +[ + object, + uuid(ee5ff7b3-4572-11d0-9452-00a0c905416e) +] +interface ITransactionResource : IUnknown { + HRESULT PrepareRequest([in]BOOL fRetaining,[in]DWORD grfRM,[in]BOOL fWantMoniker,[in]BOOL fSinglePhase); + HRESULT CommitRequest([in]DWORD grfRM,[in]XACTUOW *pNewUOW); + HRESULT AbortRequest([in]BOID *pboidReason,[in]BOOL fRetaining,[in]XACTUOW *pNewUOW); + HRESULT TMDown(void); +} + +[ + object, + uuid(0fb15081-af41-11ce-bd2b-204c4f4f5020) +] +interface ITransactionEnlistmentAsync : IUnknown { + HRESULT PrepareRequestDone([in]HRESULT hr,[in]IMoniker *pmk,[in]BOID *pboidReason); + HRESULT CommitRequestDone([in]HRESULT hr); + HRESULT AbortRequestDone([in]HRESULT hr); +} + +[ + object, + uuid(c82bd533-5b30-11d3-8a91-00c04f79eb6d) +] +interface ITransactionLastEnlistmentAsync : IUnknown { + HRESULT TransactionOutcome([in]XACTSTAT XactStat,[in]BOID *pboidReason); +} + +[ + object, + uuid(e1cf9b53-8745-11ce-a9ba-00aa006c3706) +] +interface ITransactionExportFactory : IUnknown { + HRESULT GetRemoteClassId([in]CLSID *pclsid); + HRESULT Create([in]ULONG cbWhereabouts,[in]byte *rgbWhereabouts,[out]ITransactionExport **ppExport); +} + +[ + object, + uuid(0141fda4-8fc0-11ce-bd18-204c4f4f5020) +] +interface ITransactionImportWhereabouts : IUnknown { + HRESULT GetWhereaboutsSize([out]ULONG *pcbWhereabouts); + HRESULT GetWhereabouts([in]ULONG cbWhereabouts,[out]byte *rgbWhereabouts,[out]ULONG *pcbUsed); +} + +[ + object, + uuid(0141fda5-8fc0-11ce-bd18-204c4f4f5020) +] +interface ITransactionExport : IUnknown { + HRESULT Export([in]IUnknown *punkTransaction,[out]ULONG *pcbTransactionCookie); + HRESULT GetTransactionCookie([in]IUnknown *punkTransaction,[in]ULONG cbTransactionCookie,[out]byte *rgbTransactionCookie,[out]ULONG *pcbUsed); +} + +[ + object, + uuid(e1cf9b5a-8745-11ce-a9ba-00aa006c3706) +] +interface ITransactionImport : IUnknown { + HRESULT Import([in]ULONG cbTransactionCookie,[in]byte *rgbTransactionCookie,[in]IID *piid,[out,iid_is(piid)]void **ppvTransaction); +} +[ + object, + uuid(17cf72d0-bac5-11d1-b1bf-00c04fc2f3ef) +] +interface ITipTransaction : IUnknown { + HRESULT Push([in]char *i_pszRemoteTmUrl,[out]char **o_ppszRemoteTxUrl); + HRESULT GetTransactionUrl([out]char **o_ppszLocalTxUrl); +} +[ + object, + uuid(17cf72d1-bac5-11d1-b1bf-00c04fc2f3ef) +] +interface ITipHelper : IUnknown { + HRESULT Pull([in]char *i_pszTxUrl,[out]ITransaction **o_ppITransaction); + HRESULT PullAsync([in]char *i_pszTxUrl,[in]ITipPullSink *i_pTipPullSink,[out]ITransaction **o_ppITransaction); + HRESULT GetLocalTmUrl([out]char **o_ppszLocalTmUrl); +} +[ + object, + uuid(17cf72d2-bac5-11d1-b1bf-00c04fc2f3ef) +] +interface ITipPullSink : IUnknown { + HRESULT PullComplete([in]HRESULT i_hrPull); +} +[ + object, + uuid(9797c15d-a428-4291-87b6-0995031a678d) +] +interface IDtcNetworkAccessConfig : IUnknown { + HRESULT GetAnyNetworkAccess([out]BOOL *pbAnyNetworkAccess); + HRESULT SetAnyNetworkAccess([in]BOOL bAnyNetworkAccess); + HRESULT GetNetworkAdministrationAccess([out]BOOL *pbNetworkAdministrationAccess); + HRESULT SetNetworkAdministrationAccess([in]BOOL bNetworkAdministrationAccess); + HRESULT GetNetworkTransactionAccess([out]BOOL *pbNetworkTransactionAccess); + HRESULT SetNetworkTransactionAccess([in]BOOL bNetworkTransactionAccess); + HRESULT GetNetworkClientAccess([out]BOOL *pbNetworkClientAccess); + HRESULT SetNetworkClientAccess([in]BOOL bNetworkClientAccess); + HRESULT GetNetworkTIPAccess([out]BOOL *pbNetworkTIPAccess); + HRESULT SetNetworkTIPAccess([in]BOOL bNetworkTIPAccess); + HRESULT GetXAAccess([out]BOOL *pbXAAccess); + HRESULT SetXAAccess([in]BOOL bXAAccess); + HRESULT RestartDtcService(void); +} + +typedef enum AUTHENTICATION_LEVEL { + NO_AUTHENTICATION_REQUIRED, + INCOMING_AUTHENTICATION_REQUIRED, + MUTUAL_AUTHENTICATION_REQUIRED +} AUTHENTICATION_LEVEL; + +[ + object, + uuid(a7aa013b-eb7d-4f42-b41c-b2dec09ae034) +] +interface IDtcNetworkAccessConfig2 : IDtcNetworkAccessConfig { + HRESULT GetNetworkInboundAccess([out]BOOL *pbInbound); + HRESULT GetNetworkOutboundAccess([out]BOOL *pbOutbound); + HRESULT SetNetworkInboundAccess([in]BOOL bInbound); + HRESULT SetNetworkOutboundAccess([in]BOOL bOutbound); + HRESULT GetAuthenticationLevel([out]AUTHENTICATION_LEVEL *pAuthLevel); + HRESULT SetAuthenticationLevel([in]AUTHENTICATION_LEVEL AuthLevel); +} diff --git a/sdk/include/psdk/txdtc.idl b/sdk/include/psdk/txdtc.idl new file mode 100644 index 0000000000..c29447047a --- /dev/null +++ b/sdk/include/psdk/txdtc.idl @@ -0,0 +1,515 @@ +/* + * Copyright (C) 2013 Daniel Jeliński + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +import "txcoord.idl"; + +interface IXATransLookup; +interface IXATransLookup2; +interface IResourceManagerSink; +interface IResourceManager; +interface ILastResourceManager; +interface IResourceManager2; +interface IXAConfig; +/*interface IRMHelper; +interface IXAObtainRMInfo;*/ +interface IResourceManagerFactory; +interface IResourceManagerFactory2; +interface IPrepareInfo; +interface IPrepareInfo2; +interface IGetDispenser; +interface ITransactionVoterBallotAsync2; +interface ITransactionVoterNotifyAsync2; +interface ITransactionVoterFactory2; +interface ITransactionPhase0EnlistmentAsync; +interface ITransactionPhase0NotifyAsync; +interface ITransactionPhase0Factory; +interface ITransactionTransmitter; +interface ITransactionTransmitterFactory; +interface ITransactionReceiver; +interface ITransactionReceiverFactory; +interface IDtcLuConfigure; +interface IDtcLuRecovery; +interface IDtcLuRecoveryFactory; +interface IDtcLuRecoveryInitiatedByDtcTransWork; +interface IDtcLuRecoveryInitiatedByDtcStatusWork; +interface IDtcLuRecoveryInitiatedByDtc; +interface IDtcLuRecoveryInitiatedByLuWork; +interface IDtcLuRecoveryInitiatedByLu; +interface IDtcLuRmEnlistment; +interface IDtcLuRmEnlistmentSink; +interface IDtcLuRmEnlistmentFactory; +interface IDtcLuSubordinateDtc; +interface IDtcLuSubordinateDtcSink; +interface IDtcLuSubordinateDtcFactory; + +cpp_quote("#define XACTTOMSG(dwXact) (dwXact-0x00040000+0x40000000)") +typedef enum XACT_DTC_CONSTANTS { + XACT_E_CONNECTION_REQUEST_DENIED = 0x8004d100, + XACT_E_TOOMANY_ENLISTMENTS = 0x8004d101, + XACT_E_DUPLICATE_GUID = 0x8004d102, + XACT_E_NOTSINGLEPHASE = 0x8004d103, + XACT_E_RECOVERYALREADYDONE = 0x8004d104, + XACT_E_PROTOCOL = 0x8004d105, + XACT_E_RM_FAILURE = 0x8004d106, + XACT_E_RECOVERY_FAILED = 0x8004d107, + XACT_E_LU_NOT_FOUND = 0x8004d108, + XACT_E_DUPLICATE_LU = 0x8004d109, + XACT_E_LU_NOT_CONNECTED = 0x8004d10a, + XACT_E_DUPLICATE_TRANSID = 0x8004d10b, + XACT_E_LU_BUSY = 0x8004d10c, + XACT_E_LU_NO_RECOVERY_PROCESS = 0x8004d10d, + XACT_E_LU_DOWN = 0x8004d10e, + XACT_E_LU_RECOVERING = 0x8004d10f, + XACT_E_LU_RECOVERY_MISMATCH = 0x8004d110, + XACT_E_RM_UNAVAILABLE = 0x8004d111, + XACT_E_LRMRECOVERYALREADYDONE = 0x8004d112, + XACT_E_NOLASTRESOURCEINTERFACE = 0x8004d113, + XACT_S_NONOTIFY = 0x4d100, + XACT_OK_NONOTIFY = 0x4d101, + dwUSER_MS_SQLSERVER = 0xffff +} XACT_DTC_CONSTANTS; + +cpp_quote("#ifndef _XID_T_DEFINED") +cpp_quote("#define _XID_T_DEFINED") +typedef struct xid_t { + LONG32 formatID; + LONG32 gtrid_length; + LONG32 bqual_length; + char data[128 ]; +} XID; +cpp_quote("#endif") +/* idl doesn't like this type +cpp_quote("#ifndef _XA_SWITCH_T_DEFINED") +cpp_quote("#define _XA_SWITCH_T_DEFINED") +typedef struct xa_switch_t { + char name[32 ]; + LONG32 flags; + LONG32 version; + int (__cdecl *xa_open_entry)(char *__MIDL_0004,int __MIDL_0005,LONG32 __MIDL_0006); + int (__cdecl *xa_close_entry)(char *__MIDL_0008,int __MIDL_0009,LONG32 __MIDL_0010); + int (__cdecl *xa_start_entry)(XID *__MIDL_0012,int __MIDL_0013,LONG32 __MIDL_0014); + int (__cdecl *xa_end_entry)(XID *__MIDL_0016,int __MIDL_0017,LONG32 __MIDL_0018); + int (__cdecl *xa_rollback_entry)(XID *__MIDL_0020,int __MIDL_0021,LONG32 __MIDL_0022); + int (__cdecl *xa_prepare_entry)(XID *__MIDL_0024,int __MIDL_0025,LONG32 __MIDL_0026); + int (__cdecl *xa_commit_entry)(XID *__MIDL_0028,int __MIDL_0029,LONG32 __MIDL_0030); + int (__cdecl *xa_recover_entry)(XID *__MIDL_0032,LONG32 __MIDL_0033,int __MIDL_0034,LONG32 __MIDL_0035); + int (__cdecl *xa_forget_entry)(XID *__MIDL_0037,int __MIDL_0038,LONG32 __MIDL_0039); + int (__cdecl *xa_complete_entry)(int *__MIDL_0041,int *__MIDL_0042,int __MIDL_0043,LONG32 __MIDL_0044); +} xa_switch_t; +cpp_quote("#endif") +*/ +[ + object, + uuid(f3b1f131-eeda-11ce-aed4-00aa0051e2c4) +] +interface IXATransLookup : IUnknown { + HRESULT Lookup([out]ITransaction **ppTransaction); +} +[ + object, + uuid(bf193c85-0d1a-4290-b88f-d2cb8873d1e7) +] +interface IXATransLookup2 : IUnknown { + HRESULT Lookup([in]XID *pXID,[out]ITransaction **ppTransaction); +} +[ + object, + uuid(0d563181-defb-11ce-aed1-00aa0051e2c4) +] +interface IResourceManagerSink : IUnknown { + HRESULT TMDown(void); +} +[ + object, + uuid(13741d21-87eb-11ce-8081-0080c758527e) +] +interface IResourceManager : IUnknown { + HRESULT Enlist([in]ITransaction *pTransaction,[in]ITransactionResourceAsync *pRes,[out]XACTUOW *pUOW,[out]LONG *pisoLevel,[out]ITransactionEnlistmentAsync **ppEnlist); + HRESULT Reenlist([in]byte *pPrepInfo,[in]ULONG cbPrepInfo,[in]DWORD lTimeout,[out]XACTSTAT *pXactStat); + HRESULT ReenlistmentComplete(void); + HRESULT GetDistributedTransactionManager([in]REFIID iid,[out,iid_is(iid)]void **ppvObject); +} +[ + object, + uuid(4d964ad4-5b33-11d3-8a91-00c04f79eb6d) +] +interface ILastResourceManager : IUnknown { + HRESULT TransactionCommitted([in]byte *pPrepInfo,[in]ULONG cbPrepInfo); + HRESULT RecoveryDone(void); +} +[ + object, + uuid(d136c69a-f749-11d1-8f47-00c04f8ee57d) +] +interface IResourceManager2 : IResourceManager { + HRESULT Enlist2([in]ITransaction *pTransaction,[in]ITransactionResourceAsync *pResAsync,[out]XACTUOW *pUOW,[out]LONG *pisoLevel,[out]XID *pXid,[out]ITransactionEnlistmentAsync **ppEnlist); + HRESULT Reenlist2([in]XID *pXid,[in]DWORD dwTimeout,[out]XACTSTAT *pXactStat); +} +[ + object, + uuid(c8a6e3a1-9a8c-11cf-a308-00a0c905416e) +] +interface IXAConfig : IUnknown { + HRESULT Initialize([in]GUID clsidHelperDll); + HRESULT Terminate(void); +} +/* commented out because idl doesn't accept xa_switch_t type +[ + object, + uuid(E793F6D1-F53D-11cf-A60D-00A0C905416E) +] +interface IRMHelper : IUnknown { + HRESULT RMCount([in]DWORD dwcTotalNumberOfRMs); + HRESULT RMInfo([in]xa_switch_t *pXa_Switch,[in]BOOL fCDeclCallingConv,[in]char *pszOpenString,[in]char *pszCloseString,[in]GUID guidRMRecovery); +} +[ + object, + uuid(E793F6D2-F53D-11cf-A60D-00A0C905416E) +] +interface IXAObtainRMInfo : IUnknown { + HRESULT ObtainRMInfo([in]IRMHelper *pIRMHelper); +}*/ +[ + object, + uuid(13741d20-87eb-11ce-8081-0080c758527e) +] +interface IResourceManagerFactory : IUnknown { + HRESULT Create([in]GUID *pguidRM,[in]CHAR *pszRMName,[in]IResourceManagerSink *pIResMgrSink,[out]IResourceManager **ppResMgr); +} +[ + object, + uuid(6b369c21-fbd2-11d1-8f47-00c04f8ee57d) +] +interface IResourceManagerFactory2 : IResourceManagerFactory { + HRESULT CreateEx([in]GUID *pguidRM,[in]CHAR *pszRMName,[in]IResourceManagerSink *pIResMgrSink,[in]REFIID riidRequested,[out, iid_is(riidRequested)]void **ppvResMgr); +} + +[ + object, + uuid(80c7bfd0-87ee-11ce-8081-0080c758527e) +] +interface IPrepareInfo : IUnknown { + HRESULT GetPrepareInfoSize([out]ULONG *pcbPrepInfo); + HRESULT GetPrepareInfo([out]byte *pPrepInfo); +} +[ + object, + uuid(5fab2547-9779-11d1-b886-00c04fb9618a) +] +interface IPrepareInfo2 : IUnknown { + HRESULT GetPrepareInfoSize([out]ULONG *pcbPrepInfo); + HRESULT GetPrepareInfo([in]ULONG cbPrepareInfo,[out]byte *pPrepInfo); +} +[ + object, + uuid(c23cc370-87ef-11ce-8081-0080c758527e) +] +interface IGetDispenser : IUnknown { + HRESULT GetDispenser([in]REFIID iid,[out,iid_is(iid)]void **ppvObject); +} +[ + object, + uuid(5433376c-414d-11d3-b206-00c04fc2f3ef) +] +interface ITransactionVoterBallotAsync2 : IUnknown { + HRESULT VoteRequestDone([in]HRESULT hr,[in]BOID *pboidReason); +} +[ + object, + uuid(5433376b-414d-11d3-b206-00c04fc2f3ef) +] +interface ITransactionVoterNotifyAsync2 : ITransactionOutcomeEvents { + HRESULT VoteRequest(void); +} +[ + object, + uuid(5433376a-414d-11d3-b206-00c04fc2f3ef) +] +interface ITransactionVoterFactory2 : IUnknown { + HRESULT Create([in]ITransaction *pTransaction,[in]ITransactionVoterNotifyAsync2 *pVoterNotify,[out]ITransactionVoterBallotAsync2 **ppVoterBallot); +} +[ + object, + uuid(82dc88e1-a954-11d1-8f88-00600895e7d5) +] +interface ITransactionPhase0EnlistmentAsync : IUnknown { + HRESULT Enable(void); + HRESULT WaitForEnlistment(void); + HRESULT Phase0Done(void); + HRESULT Unenlist(void); + HRESULT GetTransaction([out]ITransaction **ppITransaction); +} +[ + object, + uuid(ef081809-0c76-11d2-87a6-00c04f990f34) +] +interface ITransactionPhase0NotifyAsync : IUnknown { + HRESULT Phase0Request([in]BOOL fAbortingHint); + HRESULT EnlistCompleted([in]HRESULT status); +} +[ + object, + uuid(82dc88e0-a954-11d1-8f88-00600895e7d5) +] +interface ITransactionPhase0Factory : IUnknown { + HRESULT Create([in]ITransactionPhase0NotifyAsync *pPhase0Notify,[out]ITransactionPhase0EnlistmentAsync **ppPhase0Enlistment); +} +[ + object, + uuid(59313e01-b36c-11cf-a539-00aa006887c3) +] +interface ITransactionTransmitter : IUnknown { + HRESULT Set([in]ITransaction *pTransaction); + HRESULT GetPropagationTokenSize([out]ULONG *pcbToken); + HRESULT MarshalPropagationToken([in]ULONG cbToken,[out]byte *rgbToken,[out]ULONG *pcbUsed); + HRESULT UnmarshalReturnToken([in]ULONG cbReturnToken,[in]byte *rgbReturnToken); + HRESULT Reset(void); +} +[ + object, + uuid(59313e00-b36c-11cf-a539-00aa006887c3) +] +interface ITransactionTransmitterFactory : IUnknown { + HRESULT Create([out]ITransactionTransmitter **ppTransmitter); +} +[ + object, + uuid(59313e03-b36c-11cf-a539-00aa006887c3) +] +interface ITransactionReceiver : IUnknown { + HRESULT UnmarshalPropagationToken([in]ULONG cbToken,[in]byte *rgbToken,[out]ITransaction **ppTransaction); + HRESULT GetReturnTokenSize([out]ULONG *pcbReturnToken); + HRESULT MarshalReturnToken([in]ULONG cbReturnToken,[out]byte *rgbReturnToken,[out]ULONG *pcbUsed); + HRESULT Reset(void); +} +[ + object, + uuid(59313e02-b36c-11cf-a539-00aa006887c3) +] +interface ITransactionReceiverFactory : IUnknown { + HRESULT Create([out]ITransactionReceiver **ppReceiver); +} + +typedef struct _ProxyConfigParams { + WORD wcThreadsMax; +} PROXY_CONFIG_PARAMS; + +[ + object, + uuid(4131e760-1aea-11d0-944b-00a0c905416e) +] +interface IDtcLuConfigure : IUnknown { + HRESULT Add([in]byte *pucLuPair,[in]DWORD cbLuPair); + HRESULT Delete([in]byte *pucLuPair,[in]DWORD cbLuPair); +} +[ + object, + uuid(ac2b8ad2-d6f0-11d0-b386-00a0c9083365) +] +interface IDtcLuRecovery : IUnknown { +} +[ + object, + uuid(4131e762-1aea-11d0-944b-00a0c905416e) +] +interface IDtcLuRecoveryFactory : IUnknown { + HRESULT Create([in]byte *pucLuPair,[in]DWORD cbLuPair,[out]IDtcLuRecovery **ppRecovery); +} + +typedef enum _DtcLu_LocalRecovery_Work { + DTCINITIATEDRECOVERYWORK_CHECKLUSTATUS = 1, + DTCINITIATEDRECOVERYWORK_TRANS, + DTCINITIATEDRECOVERYWORK_TMDOWN +} DTCINITIATEDRECOVERYWORK; + +typedef enum _DtcLu_Xln { + DTCLUXLN_COLD = 1, + DTCLUXLN_WARM +} DTCLUXLN; + +typedef enum _DtcLu_Xln_Confirmation { + DTCLUXLNCONFIRMATION_CONFIRM = 1, + DTCLUXLNCONFIRMATION_LOGNAMEMISMATCH, + DTCLUXLNCONFIRMATION_COLDWARMMISMATCH, + DTCLUXLNCONFIRMATION_OBSOLETE +} DTCLUXLNCONFIRMATION; + +typedef enum _DtcLu_Xln_Response { + DTCLUXLNRESPONSE_OK_SENDOURXLNBACK = 1, + DTCLUXLNRESPONSE_OK_SENDCONFIRMATION, + DTCLUXLNRESPONSE_LOGNAMEMISMATCH, + DTCLUXLNRESPONSE_COLDWARMMISMATCH +} DTCLUXLNRESPONSE; + +typedef enum _DtcLu_Xln_Error { + DTCLUXLNERROR_PROTOCOL = 1, + DTCLUXLNERROR_LOGNAMEMISMATCH, + DTCLUXLNERROR_COLDWARMMISMATCH +} DTCLUXLNERROR; + +typedef enum _DtcLu_CompareState { + DTCLUCOMPARESTATE_COMMITTED = 1, + DTCLUCOMPARESTATE_HEURISTICCOMMITTED, + DTCLUCOMPARESTATE_HEURISTICMIXED, + DTCLUCOMPARESTATE_HEURISTICRESET, + DTCLUCOMPARESTATE_INDOUBT, + DTCLUCOMPARESTATE_RESET +} DTCLUCOMPARESTATE; + +typedef enum _DtcLu_CompareStates_Confirmation { + DTCLUCOMPARESTATESCONFIRMATION_CONFIRM = 1, + DTCLUCOMPARESTATESCONFIRMATION_PROTOCOL +} DTCLUCOMPARESTATESCONFIRMATION; + +typedef enum _DtcLu_CompareStates_Error { + DTCLUCOMPARESTATESERROR_PROTOCOL = 1 +} DTCLUCOMPARESTATESERROR; + +typedef enum _DtcLu_CompareStates_Response { + DTCLUCOMPARESTATESRESPONSE_OK = 1, + DTCLUCOMPARESTATESRESPONSE_PROTOCOL +} DTCLUCOMPARESTATESRESPONSE; + +[ + object, + uuid(4131e765-1aea-11d0-944b-00a0c905416e) +] +interface IDtcLuRecoveryInitiatedByDtcTransWork : IUnknown { + HRESULT GetLogNameSizes([out]DWORD *pcbOurLogName,[out]DWORD *pcbRemoteLogName); + HRESULT GetOurXln([out]DTCLUXLN *pXln,[in,out]unsigned char *pOurLogName,[in,out]unsigned char *pRemoteLogName,[out]DWORD *pdwProtocol); + HRESULT HandleConfirmationFromOurXln([in]DTCLUXLNCONFIRMATION Confirmation); + HRESULT HandleTheirXlnResponse([in]DTCLUXLN Xln,[in]unsigned char *pRemoteLogName,[in]DWORD cbRemoteLogName,[in]DWORD dwProtocol,[out]DTCLUXLNCONFIRMATION *pConfirmation); + HRESULT HandleErrorFromOurXln([in]DTCLUXLNERROR Error); + HRESULT CheckForCompareStates([out]BOOL *fCompareStates); + HRESULT GetOurTransIdSize([in,out]DWORD *pcbOurTransId); + HRESULT GetOurCompareStates([in,out]unsigned char *pOurTransId,[out]DTCLUCOMPARESTATE *pCompareState); + HRESULT HandleTheirCompareStatesResponse([in]DTCLUCOMPARESTATE CompareState,[out]DTCLUCOMPARESTATESCONFIRMATION *pConfirmation); + HRESULT HandleErrorFromOurCompareStates([in]DTCLUCOMPARESTATESERROR Error); + HRESULT ConversationLost(void); + HRESULT GetRecoverySeqNum([out]LONG *plRecoverySeqNum); + HRESULT ObsoleteRecoverySeqNum([in]LONG lNewRecoverySeqNum); +} +[ + object, + uuid(4131e766-1aea-11d0-944b-00a0c905416e) +] +interface IDtcLuRecoveryInitiatedByDtcStatusWork : IUnknown { + HRESULT HandleCheckLuStatus([in]LONG lRecoverySeqNum); +} +[ + object, + uuid(4131e764-1aea-11d0-944b-00a0c905416e) +] +[local] interface IDtcLuRecoveryInitiatedByDtc : IUnknown { + HRESULT GetWork([in,out]DTCINITIATEDRECOVERYWORK *pWork,[in,out]void **ppv); +} +[ + object, + uuid(ac2b8ad1-d6f0-11d0-b386-00a0c9083365) +] +interface IDtcLuRecoveryInitiatedByLuWork : IUnknown { + 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); + HRESULT GetOurLogNameSize([in,out]DWORD *pcbOurLogName); + HRESULT GetOurXln([out]DTCLUXLN *pXln,[in,out]unsigned char *pOurLogName,[out]DWORD *pdwProtocol); + HRESULT HandleConfirmationOfOurXln([in]DTCLUXLNCONFIRMATION Confirmation); + HRESULT HandleTheirCompareStates([in,out]unsigned char *pRemoteTransId,[in]DWORD cbRemoteTransId,[in]DTCLUCOMPARESTATE CompareState,[out]DTCLUCOMPARESTATESRESPONSE *pResponse,[out]DTCLUCOMPARESTATE *pCompareState); + HRESULT HandleConfirmationOfOurCompareStates([in]DTCLUCOMPARESTATESCONFIRMATION Confirmation); + HRESULT HandleErrorFromOurCompareStates([in]DTCLUCOMPARESTATESERROR Error); + HRESULT ConversationLost(void); +} +[ + object, + uuid(4131e768-1aea-11d0-944b-00a0c905416e) +] +interface IDtcLuRecoveryInitiatedByLu : IUnknown { + HRESULT GetObjectToHandleWorkFromLu([out]IDtcLuRecoveryInitiatedByLuWork **ppWork); +} +[ + object, + uuid(4131e769-1aea-11d0-944b-00a0c905416e) +] +interface IDtcLuRmEnlistment : IUnknown { + HRESULT Unplug([in]BOOL fConversationLost); + HRESULT BackedOut(void); + HRESULT BackOut(void); + HRESULT Committed(void); + HRESULT Forget(void); + HRESULT RequestCommit(void); +} +[ + object, + uuid(4131e770-1aea-11d0-944b-00a0c905416e) +] +interface IDtcLuRmEnlistmentSink : IUnknown { + HRESULT AckUnplug(void); + HRESULT TmDown(void); + HRESULT SessionLost(void); + HRESULT BackedOut(void); + HRESULT BackOut(void); + HRESULT Committed(void); + HRESULT Forget(void); + HRESULT Prepare(void); + HRESULT RequestCommit(void); +} +[ + object, + uuid(4131e771-1aea-11d0-944b-00a0c905416e) +] +interface IDtcLuRmEnlistmentFactory : IUnknown { + 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); +} +[ + object, + uuid(4131e773-1aea-11d0-944b-00a0c905416e) +] +interface IDtcLuSubordinateDtc : IUnknown { + HRESULT Unplug([in]BOOL fConversationLost); + HRESULT BackedOut(void); + HRESULT BackOut(void); + HRESULT Committed(void); + HRESULT Forget(void); + HRESULT Prepare(void); + HRESULT RequestCommit(void); +} +[ + object, + uuid(4131e774-1aea-11d0-944b-00a0c905416e) +] +interface IDtcLuSubordinateDtcSink : IUnknown { + HRESULT AckUnplug(void); + HRESULT TmDown(void); + HRESULT SessionLost(void); + HRESULT BackedOut(void); + HRESULT BackOut(void); + HRESULT Committed(void); + HRESULT Forget(void); + HRESULT RequestCommit(void); +} +[ + object, + uuid(4131e775-1aea-11d0-944b-00a0c905416e) +] +interface IDtcLuSubordinateDtcFactory : IUnknown { + 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); +} + +/* these GUIDs were found in mingw header, but without corresponding interface definitions + DEFINE_GUID(IID_IXAResourceManager,0x4131e751,0x1aea,0x11d0,0x94,0x4b,0x00,0xa0,0xc9,0x05,0x41,0x6e); + DEFINE_GUID(IID_IXAResourceManagerFactory,0x4131e750,0x1aea,0x11d0,0x94,0x4b,0x00,0xa0,0xc9,0x05,0x41,0x6e); + DEFINE_GUID(IID_IXATransaction,0x4131e752,0x1aea,0x11d0,0x94,0x4b,0x00,0xa0,0xc9,0x05,0x41,0x6e); +*/