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