340 lines
12 KiB
Plaintext
340 lines
12 KiB
Plaintext
|
//.-------------------------------------------------------------------------
|
||
|
//.
|
||
|
//. Microsoft Windows
|
||
|
// Copyright (C) 1995-1999 Microsoft Corporation. All rights reserved.
|
||
|
//.
|
||
|
//. File: transact.idl
|
||
|
//.
|
||
|
//. Contents: The basic transaction interfaces and types.
|
||
|
//.
|
||
|
//.--------------------------------------------------------------------------
|
||
|
|
||
|
import "unknwn.idl";
|
||
|
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
//
|
||
|
|
||
|
cpp_quote("#include \"winerror.h\"")
|
||
|
|
||
|
interface ITransaction;
|
||
|
interface ITransactionDispenser;
|
||
|
interface ITransactionOptions;
|
||
|
interface ITransactionOutcomeEvents;
|
||
|
interface ITransactionCompletionEvents;
|
||
|
|
||
|
cpp_quote("#ifndef DECLSPEC_UUID")
|
||
|
cpp_quote("#if _MSC_VER >= 1100")
|
||
|
cpp_quote("#define DECLSPEC_UUID(x) __declspec(uuid(x))")
|
||
|
cpp_quote("#else")
|
||
|
cpp_quote("#define DECLSPEC_UUID(x)")
|
||
|
cpp_quote("#endif")
|
||
|
cpp_quote("#endif")
|
||
|
|
||
|
//==========================================================================
|
||
|
// Transaction related types
|
||
|
//==========================================================================
|
||
|
|
||
|
[local,pointer_default(unique)]
|
||
|
interface BasicTransactionTypes
|
||
|
{
|
||
|
|
||
|
typedef struct BOID {
|
||
|
byte rgb[16];
|
||
|
} BOID;
|
||
|
|
||
|
cpp_quote("#define BOID_NULL (*((BOID*)(&IID_NULL)))")
|
||
|
|
||
|
// change the following two line together
|
||
|
cpp_quote("#ifndef MAX_TRAN_DESC_DEFINED") // conflicts with uimsg.h. This is temporary work around
|
||
|
cpp_quote("#define MAX_TRAN_DESC_DEFINED")
|
||
|
typedef enum TX_MISC_CONSTANTS
|
||
|
{
|
||
|
MAX_TRAN_DESC = 40
|
||
|
} TX_MISC_CONSTANTS;
|
||
|
cpp_quote("#endif")
|
||
|
|
||
|
// Unit Of Work.
|
||
|
|
||
|
typedef BOID XACTUOW;
|
||
|
|
||
|
// Data type for isolation level values.
|
||
|
|
||
|
typedef LONG ISOLEVEL;
|
||
|
|
||
|
// Constants that specifiy isolation level of a transaction.
|
||
|
|
||
|
typedef enum ISOLATIONLEVEL {
|
||
|
ISOLATIONLEVEL_UNSPECIFIED = 0xFFFFFFFF, //
|
||
|
ISOLATIONLEVEL_CHAOS = 0x00000010, //
|
||
|
ISOLATIONLEVEL_READUNCOMMITTED = 0x00000100, //
|
||
|
ISOLATIONLEVEL_BROWSE = 0x00000100, // Synonym for _READUNCOMITTED
|
||
|
ISOLATIONLEVEL_CURSORSTABILITY = 0x00001000, //
|
||
|
ISOLATIONLEVEL_READCOMMITTED = 0x00001000, // Synonym for _CURSORSTABILITY
|
||
|
ISOLATIONLEVEL_REPEATABLEREAD = 0x00010000, //
|
||
|
ISOLATIONLEVEL_SERIALIZABLE = 0x00100000, //
|
||
|
ISOLATIONLEVEL_ISOLATED = 0x00100000, // Synonym for _SERIALIZABLE
|
||
|
} ISOLATIONLEVEL;
|
||
|
|
||
|
// Transaction information structure, used in ITransaction
|
||
|
|
||
|
typedef struct XACTTRANSINFO {
|
||
|
XACTUOW uow; // The current unit of work
|
||
|
ISOLEVEL isoLevel; // The isolation level for the current UOW
|
||
|
ULONG isoFlags; // Values from ISOFLAG enumeration
|
||
|
DWORD grfTCSupported; // Flags indicating capabilities
|
||
|
DWORD grfRMSupported; // ... of this transaction wrt
|
||
|
DWORD grfTCSupportedRetaining; // ... parameters to Commit
|
||
|
DWORD grfRMSupportedRetaining; // ...
|
||
|
} XACTTRANSINFO;
|
||
|
|
||
|
typedef struct XACTSTATS {
|
||
|
ULONG cOpen; // The number of currently extant transactions.
|
||
|
ULONG cCommitting; // The number of transactions which are proceding towards committing.
|
||
|
ULONG cCommitted; // The number of transactions that are have been committed.
|
||
|
ULONG cAborting; // The number of transactions which are in the process of aborting.
|
||
|
ULONG cAborted; // The number of transactions that are have been aborted.
|
||
|
ULONG cInDoubt; // The number of transactions which are presently in doubt.
|
||
|
ULONG cHeuristicDecision; // The number of transactions that have completed by heuristic decision.
|
||
|
FILETIME timeTransactionsUp; // The amount of time that this transaction service has been up.
|
||
|
} XACTSTATS;
|
||
|
|
||
|
// @enum ISOFLAG | Used in <t XACTTRANSINFO> and <i ITransactionDispenser>.
|
||
|
|
||
|
typedef enum ISOFLAG {
|
||
|
ISOFLAG_RETAIN_COMMIT_DC = 1, // Use just one of ISOFLAG_RETAIN_COMMIT values
|
||
|
ISOFLAG_RETAIN_COMMIT = 2, //
|
||
|
ISOFLAG_RETAIN_COMMIT_NO = 3, //
|
||
|
ISOFLAG_RETAIN_ABORT_DC = 4, // Use just one of ISOFLAG_RETAIN_ABORT values
|
||
|
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;
|
||
|
|
||
|
// Used in ITransactionDispenser
|
||
|
// A bit field of 32 bits; be sure to mask before comparing.
|
||
|
|
||
|
typedef enum XACTTC {
|
||
|
XACTTC_NONE = 0, // use Provider's default.
|
||
|
XACTTC_SYNC_PHASEONE = 1,
|
||
|
XACTTC_SYNC_PHASETWO = 2,
|
||
|
XACTTC_SYNC = 2, // nb alias for XACTTC_SYNC_PHASETWO
|
||
|
XACTTC_ASYNC_PHASEONE = 4,
|
||
|
XACTTC_ASYNC = 4 // nb alias for XACTTC_ASYNC_PHASEONE
|
||
|
} XACTTC;
|
||
|
|
||
|
// Used in ITransactionDispenser
|
||
|
// A bit field of 32 bits; be sure to mask before comparing.
|
||
|
|
||
|
typedef enum XACTRM {
|
||
|
XACTRM_OPTIMISTICLASTWINS = 1, //
|
||
|
XACTRM_NOREADONLYPREPARES = 2, //
|
||
|
} XACTRM;
|
||
|
|
||
|
typedef enum XACTCONST {
|
||
|
XACTCONST_TIMEOUTINFINITE = 0, //
|
||
|
} XACTCONST;
|
||
|
|
||
|
typedef enum XACTHEURISTIC {
|
||
|
XACTHEURISTIC_ABORT = 1,
|
||
|
XACTHEURISTIC_COMMIT = 2,
|
||
|
XACTHEURISTIC_DAMAGE = 3,
|
||
|
XACTHEURISTIC_DANGER = 4,
|
||
|
} XACTHEURISTIC;
|
||
|
|
||
|
typedef enum XACTSTAT {
|
||
|
XACTSTAT_NONE = 0x00000000,
|
||
|
XACTSTAT_OPENNORMAL = 0x00000001,
|
||
|
XACTSTAT_OPENREFUSED = 0x00000002,
|
||
|
XACTSTAT_PREPARING = 0x00000004,
|
||
|
XACTSTAT_PREPARED = 0x00000008,
|
||
|
XACTSTAT_PREPARERETAINING = 0x00000010,
|
||
|
XACTSTAT_PREPARERETAINED = 0x00000020,
|
||
|
XACTSTAT_COMMITTING = 0x00000040,
|
||
|
XACTSTAT_COMMITRETAINING = 0x00000080,
|
||
|
XACTSTAT_ABORTING = 0x00000100,
|
||
|
XACTSTAT_ABORTED = 0x00000200,
|
||
|
XACTSTAT_COMMITTED = 0x00000400,
|
||
|
XACTSTAT_HEURISTIC_ABORT = 0x00000800,
|
||
|
XACTSTAT_HEURISTIC_COMMIT = 0x00001000,
|
||
|
XACTSTAT_HEURISTIC_DAMAGE = 0x00002000,
|
||
|
XACTSTAT_HEURISTIC_DANGER = 0x00004000,
|
||
|
XACTSTAT_FORCED_ABORT = 0x00008000,
|
||
|
XACTSTAT_FORCED_COMMIT = 0x00010000,
|
||
|
XACTSTAT_INDOUBT = 0x00020000,
|
||
|
XACTSTAT_CLOSED = 0x00040000,
|
||
|
XACTSTAT_OPEN = 0x00000003,
|
||
|
XACTSTAT_NOTPREPARED = 0x0007FFC3,
|
||
|
XACTSTAT_ALL = 0x0007FFFF,
|
||
|
} XACTSTAT;
|
||
|
|
||
|
typedef struct XACTOPT { // Transaction configuration options
|
||
|
ULONG ulTimeout; // timeout in milliseconds
|
||
|
char szDescription[MAX_TRAN_DESC]; // description string for admin tools
|
||
|
} XACTOPT;
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
//==========================================================================
|
||
|
// Basic transaction interfaces
|
||
|
//==========================================================================
|
||
|
//
|
||
|
|
||
|
// Transaction interface, single phase
|
||
|
|
||
|
[object,uuid(0fb15084-af41-11ce-bd2b-204c4f4f5020), pointer_default(unique)]
|
||
|
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
|
||
|
);
|
||
|
}
|
||
|
|
||
|
// ITransactionCloner
|
||
|
[
|
||
|
object,
|
||
|
uuid(02656950-2152-11d0-944C-00A0C905416E),
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface ITransactionCloner : ITransaction
|
||
|
{
|
||
|
HRESULT CloneWithCommitDisabled
|
||
|
(
|
||
|
[out] ITransaction ** ppITransaction
|
||
|
);
|
||
|
};
|
||
|
|
||
|
// New: Transaction interface, single phase
|
||
|
[
|
||
|
object,
|
||
|
uuid(34021548-0065-11d3-bac1-00c04f797be2),
|
||
|
pointer_default(unique)
|
||
|
]
|
||
|
interface ITransaction2 : ITransactionCloner
|
||
|
{
|
||
|
HRESULT GetTransactionInfo2
|
||
|
(
|
||
|
[out] XACTTRANSINFO* pinfo
|
||
|
);
|
||
|
}
|
||
|
|
||
|
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
//
|
||
|
|
||
|
// Interface by which new transactions are commonly created
|
||
|
|
||
|
[object,uuid(3A6AD9E1-23B9-11cf-AD60-00AA00A74CCD),pointer_default(unique)]
|
||
|
interface ITransactionDispenser : IUnknown {
|
||
|
HRESULT GetOptionsObject
|
||
|
(
|
||
|
[out] ITransactionOptions** ppOptions
|
||
|
);
|
||
|
HRESULT BeginTransaction
|
||
|
(
|
||
|
[in, unique] IUnknown* punkOuter, // controlling unknown
|
||
|
[in] ISOLEVEL isoLevel, // isolation level for xtion
|
||
|
[in] ULONG isoFlags, // values from ISOFLAG enumeration
|
||
|
[in, unique] ITransactionOptions* pOptions, // pointer retrieved from previous GetOptions
|
||
|
[out] ITransaction** ppTransaction
|
||
|
);
|
||
|
}
|
||
|
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
//
|
||
|
|
||
|
[object,uuid(3A6AD9E0-23B9-11cf-AD60-00AA00A74CCD),pointer_default(unique)]
|
||
|
interface ITransactionOptions : IUnknown {
|
||
|
HRESULT SetOptions
|
||
|
(
|
||
|
[in] XACTOPT* pOptions
|
||
|
);
|
||
|
HRESULT GetOptions
|
||
|
(
|
||
|
[in,out] XACTOPT* pOptions
|
||
|
);
|
||
|
}
|
||
|
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
//
|
||
|
|
||
|
[object,uuid(3A6AD9E2-23B9-11cf-AD60-00AA00A74CCD),pointer_default(unique)]
|
||
|
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
|
||
|
);
|
||
|
}
|
||
|
|
||
|
|
||
|
cpp_quote("")
|
||
|
cpp_quote("")
|
||
|
cpp_quote("#if _MSC_VER < 1100 || !defined(__cplusplus)")
|
||
|
cpp_quote("")
|
||
|
cpp_quote("DEFINE_GUID(IID_ITransaction, 0x0fb15084, 0xaf41, 0x11ce, 0xbd, 0x2b, 0x20, 0x4c, 0x4f, 0x4f, 0x50, 0x20);")
|
||
|
cpp_quote("DEFINE_GUID(IID_ITransactionCloner, 0x02656950, 0x2152, 0x11d0, 0x94, 0x4C, 0x00, 0xA0, 0xC9, 0x05, 0x41, 0x6E);")
|
||
|
cpp_quote("DEFINE_GUID(IID_ITransaction2, 0x34021548, 0x0065, 0x11d3, 0xba, 0xc1, 0x00, 0xc0, 0x4f, 0x79, 0x7b, 0xe2);")
|
||
|
cpp_quote("DEFINE_GUID(IID_ITransactionDispenser, 0x3A6AD9E1, 0x23B9, 0x11cf, 0xAD, 0x60, 0x00, 0xAA, 0x00, 0xA7, 0x4C, 0xCD);")
|
||
|
cpp_quote("DEFINE_GUID(IID_ITransactionOptions, 0x3A6AD9E0, 0x23B9, 0x11cf, 0xAD, 0x60, 0x00, 0xAA, 0x00, 0xA7, 0x4C, 0xCD);")
|
||
|
cpp_quote("DEFINE_GUID(IID_ITransactionOutcomeEvents, 0x3A6AD9E2, 0x23B9, 0x11cf, 0xAD, 0x60, 0x00, 0xAA, 0x00, 0xA7, 0x4C, 0xCD);")
|
||
|
cpp_quote("")
|
||
|
cpp_quote("#else // #if _MSC_VER < 1100 || !defined(__cplusplus)")
|
||
|
cpp_quote("")
|
||
|
cpp_quote("#define IID_ITransaction __uuidof(ITransaction)")
|
||
|
cpp_quote("#define IID_ITransactionCloner __uuidof(ITransactionCloner)")
|
||
|
cpp_quote("#define IID_ITransaction2 __uuidof(ITransaction2)")
|
||
|
cpp_quote("#define IID_ITransactionDispenser __uuidof(ITransactionDispenser)")
|
||
|
cpp_quote("#define IID_ITransactionOptions __uuidof(ITransactionOptions)")
|
||
|
cpp_quote("#define IID_ITransactionOutcomeEvents __uuidof(ITransactionOutcomeEvents)")
|
||
|
cpp_quote("")
|
||
|
cpp_quote("#endif // #if _MSC_VER < 1100 || !defined(__cplusplus)")
|
||
|
cpp_quote("")
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|