You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
259 lines
11 KiB
259 lines
11 KiB
cpp_quote("/*******************************************************************************/" )
|
|
cpp_quote("/* */" )
|
|
cpp_quote("/* Copyright © Microsoft Corporation. All rights reserved. */" )
|
|
cpp_quote("/* */" )
|
|
/* transact.IDL */
|
|
/* */
|
|
cpp_quote("/* The basic transaction interfaces and types. */" )
|
|
cpp_quote("/* */" )
|
|
cpp_quote("/*******************************************************************************/" )
|
|
|
|
import "unknwn.idl";
|
|
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
//
|
|
|
|
interface ITransaction;
|
|
|
|
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_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;
|
|
|
|
|
|
//
|
|
//==========================================================================
|
|
// Error code definitions for all transaction related functionality.
|
|
//==========================================================================
|
|
//
|
|
typedef enum XACT_E {
|
|
XACT_E_FIRST = 0x8004D000,
|
|
XACT_E_LAST = 0x8004D01E,
|
|
XACT_S_FIRST = 0x0004D000,
|
|
XACT_S_LAST = 0x0004D009,
|
|
|
|
XACT_E_ALREADYOTHERSINGLEPHASE = 0x8004D000,
|
|
XACT_E_CANTRETAIN = 0x8004D001,
|
|
XACT_E_COMMITFAILED = 0x8004D002,
|
|
XACT_E_COMMITPREVENTED = 0x8004D003,
|
|
XACT_E_HEURISTICABORT = 0x8004D004,
|
|
XACT_E_HEURISTICCOMMIT = 0x8004D005,
|
|
XACT_E_HEURISTICDAMAGE = 0x8004D006,
|
|
XACT_E_HEURISTICDANGER = 0x8004D007,
|
|
XACT_E_ISOLATIONLEVEL = 0x8004D008,
|
|
XACT_E_NOASYNC = 0x8004D009,
|
|
XACT_E_NOENLIST = 0x8004D00A,
|
|
XACT_E_NOISORETAIN = 0x8004D00B,
|
|
XACT_E_NORESOURCE = 0x8004D00C,
|
|
XACT_E_NOTCURRENT = 0x8004D00D,
|
|
XACT_E_NOTRANSACTION = 0x8004D00E,
|
|
XACT_E_NOTSUPPORTED = 0x8004D00F,
|
|
XACT_E_UNKNOWNRMGRID = 0x8004D010,
|
|
XACT_E_WRONGSTATE = 0x8004D011,
|
|
XACT_E_WRONGUOW = 0x8004D012,
|
|
XACT_E_XTIONEXISTS = 0x8004D013,
|
|
XACT_E_NOIMPORTOBJECT = 0x8004D014,
|
|
XACT_E_INVALIDCOOKIE = 0x8004D015,
|
|
XACT_E_INDOUBT = 0x8004D016,
|
|
XACT_E_NOTIMEOUT = 0x8004D017,
|
|
XACT_E_ALREADYINPROGRESS = 0x8004D018,
|
|
XACT_E_ABORTED = 0x8004D019,
|
|
XACT_E_LOGFULL = 0x8004D01A,
|
|
XACT_E_TMNOTAVAILABLE = 0x8004D01B,
|
|
XACT_E_CONNECTION_DOWN = 0x8004D01C,
|
|
XACT_E_CONNECTION_DENIED = 0x8004D01D,
|
|
XACT_E_REENLISTTIMEOUT = 0x8004D01E,
|
|
|
|
XACT_S_ASYNC = 0x0004D000,
|
|
XACT_S_DEFECT = 0x0004D001,
|
|
XACT_S_READONLY = 0x0004D002,
|
|
XACT_S_SOMENORETAIN = 0x0004D003,
|
|
XACT_S_OKINFORM = 0x0004D004,
|
|
XACT_S_MADECHANGESCONTENT = 0x0004D005,
|
|
XACT_S_MADECHANGESINFORM = 0x0004D006,
|
|
XACT_S_ALLNORETAIN = 0x0004D007,
|
|
XACT_S_ABORTING = 0x0004D008,
|
|
XACT_S_SINGLEPHASE = 0x0004D009,
|
|
} XACT_E;
|
|
|
|
}
|
|
|
|
|
|
//
|
|
//==========================================================================
|
|
// 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
|
|
);
|
|
}
|
|
|