/* * 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 ") 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); }