Leaked source code of windows server 2003
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.
 
 
 
 
 
 

947 lines
42 KiB

//--------------------------------------------------------------------------
// DirectDB.idl
//--------------------------------------------------------------------------
import "ocidl.idl";
import "objidl.idl";
//--------------------------------------------------------------------------
// Dependencies
//--------------------------------------------------------------------------
cpp_quote("#include <stddef.h> // for offsetof")
//--------------------------------------------------------------------------
// Interfaces
//--------------------------------------------------------------------------
interface IDatabaseSession;
interface IDatabase;
interface IDatabaseProgress;
interface IDatabaseNotify;
interface IDatabaseExtension;
interface IDatabaseStream;
interface IDatabaseQuery;
//--------------------------------------------------------------------------
// Class Ids and Interface Ids
//--------------------------------------------------------------------------
cpp_quote("// {4A16043F-676D-11d2-994E-00C04FA309D4}")
cpp_quote("DEFINE_GUID(CLSID_DatabaseSession, 0x4a16043f, 0x676d, 0x11d2, 0x99, 0x4e, 0x0, 0xc0, 0x4f, 0xa3, 0x9, 0xd4);")
cpp_quote("")
cpp_quote("// {4A160440-676D-11d2-994E-00C04FA309D4}")
cpp_quote("DEFINE_GUID(IID_IDatabaseSession, 0x4a160440, 0x676d, 0x11d2, 0x99, 0x4e, 0x0, 0xc0, 0x4f, 0xa3, 0x9, 0xd4);")
cpp_quote("")
cpp_quote("// {7157F0AE-967B-11d1-9A08-00C04FA309D4}")
cpp_quote("DEFINE_GUID(IID_IDatabase, 0x7157f0ae, 0x967b, 0x11d1, 0x9a, 0x8, 0x0, 0xc0, 0x4f, 0xa3, 0x9, 0xd4);")
cpp_quote("")
cpp_quote("// {8CA77091-7B1C-11d2-995F-00C04FA309D4}")
cpp_quote("DEFINE_GUID(IID_CDatabase, 0x8ca77091, 0x7b1c, 0x11d2, 0x99, 0x5f, 0x0, 0xc0, 0x4f, 0xa3, 0x9, 0xd4);")
cpp_quote("")
cpp_quote("// {82EAD219-A6EC-11d1-9A11-00C04FA309D4}")
cpp_quote("DEFINE_GUID(IID_IDatabaseStream, 0x82ead219, 0xa6ec, 0x11d1, 0x9a, 0x11, 0x0, 0xc0, 0x4f, 0xa3, 0x9, 0xd4);")
cpp_quote("")
cpp_quote("// {80C42C87-63C1-11d2-9949-00C04FA309D4}")
cpp_quote("DEFINE_GUID(IID_CDatabaseStream, 0x80c42c87, 0x63c1, 0x11d2, 0x99, 0x49, 0x0, 0xc0, 0x4f, 0xa3, 0x9, 0xd4);")
cpp_quote("")
cpp_quote("// {5E8A5021-AC7C-11d1-9A16-00C04FA309D4}")
cpp_quote("DEFINE_GUID(IID_IDatabaseProgress, 0x5e8a5021, 0xac7c, 0x11d1, 0x9a, 0x16, 0x0, 0xc0, 0x4f, 0xa3, 0x9, 0xd4);")
cpp_quote("")
cpp_quote("// {5E8A5022-AC7C-11d1-9A16-00C04FA309D4}")
cpp_quote("DEFINE_GUID(IID_IDatabaseNotify, 0x5e8a5022, 0xac7c, 0x11d1, 0x9a, 0x16, 0x0, 0xc0, 0x4f, 0xa3, 0x9, 0xd4);")
cpp_quote("")
cpp_quote("// {B58A0F80-0702-11d2-9A63-00C04FA309D4}")
cpp_quote("DEFINE_GUID(IID_IDatabaseExtension, 0xb58a0f80, 0x702, 0x11d2, 0x9a, 0x63, 0x0, 0xc0, 0x4f, 0xa3, 0x9, 0xd4);")
cpp_quote("")
cpp_quote("// {E6CEC131-7F4B-11d2-9962-00C04FA309D4}")
cpp_quote("DEFINE_GUID(IID_IDatabaseQuery, 0xe6cec131, 0x7f4b, 0x11d2, 0x99, 0x62, 0x0, 0xc0, 0x4f, 0xa3, 0x9, 0xd4);")
//--------------------------------------------------------------------------
// HRESULT Macros
//--------------------------------------------------------------------------
cpp_quote("#ifndef FACILITY_INTERNET")
cpp_quote("#define FACILITY_INTERNET 12")
cpp_quote("#endif")
cpp_quote("#ifndef HR_E")
cpp_quote("#define HR_E(n) MAKE_SCODE(SEVERITY_ERROR, FACILITY_INTERNET, n)")
cpp_quote("#endif")
cpp_quote("#ifndef HR_S")
cpp_quote("#define HR_S(n) MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_INTERNET, n)")
cpp_quote("#endif")
cpp_quote("#ifndef HR_CODE")
cpp_quote("#define HR_CODE(hr) (INT)(hr & 0xffff)")
cpp_quote("#endif")
cpp_quote("")
//--------------------------------------------------------------------------
// DirectDB Error HRESULTS
//--------------------------------------------------------------------------
cpp_quote("#define DB_E_ALREADYOPEN HR_E(300)")
cpp_quote("#define DB_E_CREATEMUTEX HR_E(301)")
cpp_quote("#define DB_E_CREATEFILE HR_E(302)")
cpp_quote("#define DB_E_GETFILESIZE HR_E(303)")
cpp_quote("#define DB_E_CREATEFILEMAPPING HR_E(304)")
cpp_quote("#define DB_E_MAPVIEWOFFILE HR_E(305)")
cpp_quote("#define DB_E_SETENDOFFILE HR_E(306)")
cpp_quote("#define DB_E_SETFILEPOINTER HR_E(307)")
cpp_quote("#define DB_E_BADMAJORVERSION HR_E(308)")
cpp_quote("#define DB_E_INVALIDFILESIGNATURE HR_E(309)")
cpp_quote("#define DB_E_WRITEFILE HR_E(310)")
cpp_quote("#define DB_E_TIMEOUT HR_E(311)")
cpp_quote("#define DB_E_FLUSHVIEWOFFILE HR_E(312)")
cpp_quote("#define DB_E_FLUSHFILEBUFFERS HR_E(313)")
cpp_quote("#define DB_E_DUPLICATE HR_E(314)")
cpp_quote("#define DB_E_CORRUPT HR_E(315)")
cpp_quote("#define DB_E_DISKFULL HR_E(316)")
cpp_quote("#define DB_E_GETTEMPFILENAME HR_E(317)")
cpp_quote("#define DB_E_NOTFOUND HR_E(318)")
cpp_quote("#define DB_E_STREAMTABLEFULL HR_E(319)")
cpp_quote("#define DB_E_NORECORDS HR_E(320)")
cpp_quote("#define DB_E_COMPACT_PREEMPTED HR_E(321)")
cpp_quote("#define DB_E_DATABASE_CHANGED HR_E(322)")
cpp_quote("#define DB_E_COMPACTING HR_E(323)")
cpp_quote("#define DB_E_RECORDVERSIONCHANGED HR_E(324)")
cpp_quote("#define DB_E_CORRUPTRECORD HR_E(325)")
cpp_quote("#define DB_E_BADMINORVERSION HR_E(326)")
cpp_quote("#define DB_E_BADEXTENSIONCLSID HR_E(327)")
cpp_quote("#define DB_E_TOOMANYOPENROWSETS HR_E(328)")
cpp_quote("#define DB_E_LOCKEDFORREAD HR_E(329)")
cpp_quote("#define DB_E_LOCKEDFORWRITE HR_E(330)")
cpp_quote("#define DB_E_FILENOTFOUND HR_E(331)")
cpp_quote("#define DB_E_UNMATCHINGQUOTES HR_E(332)")
cpp_quote("#define DB_E_UNMATCHINGPARENS HR_E(333)")
cpp_quote("#define DB_E_NUMBERTOOBIG HR_E(334)")
cpp_quote("#define DB_E_BADNUMBER HR_E(335)")
cpp_quote("#define DB_E_NOSYMBOLS HR_E(336)")
cpp_quote("#define DB_E_INVALIDSYMBOL HR_E(337)")
cpp_quote("#define DB_E_INVALIDCOLUMN HR_E(338)")
cpp_quote("#define DB_E_BADEXPRESSION HR_E(339)")
cpp_quote("#define DB_E_MOVEFILE HR_E(340)")
cpp_quote("#define DB_E_ACCESSDENIED HR_E(341)")
cpp_quote("#define DB_E_WRONGTHREAD HR_E(342)")
cpp_quote("#define DB_E_ALREADYREGISTERED HR_E(343)")
//--------------------------------------------------------------------------
// DirectDB Error HRESULTS
//--------------------------------------------------------------------------
cpp_quote("#define DB_S_FOUND HR_S(800)")
cpp_quote("#define DB_S_NOTFOUND HR_S(801)")
//--------------------------------------------------------------------------
// sizeofMember
//--------------------------------------------------------------------------
cpp_quote("#define sizeofMember(s,m) sizeof(((s *)0)->m)")
//--------------------------------------------------------------------------
// DECLARE_HANDLE Macro
//--------------------------------------------------------------------------
#ifndef DECLARE_HANDLE
#define DECLARE_HANDLE(name) \
struct name##__ { DWORD unused; }; \
typedef struct name##__ _far* name
#endif
// OE team hasn't fixed their idl to avoid the Win64 midl warnings - turn it off
midl_pragma warning(disable:2395)
//--------------------------------------------------------------------------
// DirectDB Type Library
//--------------------------------------------------------------------------
[
uuid(E462D143-5162-11d1-8A95-00C04FB951F3),
helpstring("Microsoft DirectDB Type Library 1.0"),
version(1.0)
]
library DirectDB
{
//----------------------------------------------------------------------
// Standard Type Library Stuff
//----------------------------------------------------------------------
importlib("stdole2.tlb");
//----------------------------------------------------------------------
// IDatabase
//----------------------------------------------------------------------
cpp_quote("#ifndef __LPDATABASE_DEFINED")
cpp_quote("#define __LPDATABASE_DEFINED")
[
object,
uuid(7157F0AE-967B-11d1-9A08-00C04FA309D4),
pointer_default(unique)
]
interface IDatabase : IUnknown
{
//------------------------------------------------------------------
// Pointer to an interface of this type
//------------------------------------------------------------------
typedef IDatabase *LPDATABASE;
//------------------------------------------------------------------
// Constants
//------------------------------------------------------------------
const DWORD CMAX_INDEXES = 8;
const DWORD CMAX_KEYS = 8;
const DWORD COLUMNS_ALL = 0xFFFFFFFF;
//------------------------------------------------------------------
// Reserved Unique Ids
//------------------------------------------------------------------
const DWORD RESERVED_ID_MIN = 0xFFFFFBFF;
const DWORD RESERVED_ID_MAX = 0xFFFFFFFF;
//------------------------------------------------------------------
// HROWSET
//------------------------------------------------------------------
DECLARE_HANDLE(HROWSET);
typedef HROWSET *LPHROWSET;
const HROWSET HROWSET_INVALID = (HROWSET) 0x00000000;
//------------------------------------------------------------------
// HLOCK
//------------------------------------------------------------------
DECLARE_HANDLE(HLOCK);
typedef HLOCK *LPHLOCK;
//------------------------------------------------------------------
// METHODID
//------------------------------------------------------------------
typedef DWORD METHODID;
//------------------------------------------------------------------
// SEEKROWSETTYPE
//------------------------------------------------------------------
typedef enum tagSEEKROWSETTYPE {
SEEK_ROWSET_BEGIN,
SEEK_ROWSET_CURRENT,
SEEK_ROWSET_END
} SEEKROWSETTYPE;
//------------------------------------------------------------------
// TRANSACTIONTYPE
//------------------------------------------------------------------
typedef enum tagTRANSACTIONTYPE {
TRANSACTION_INSERT,
TRANSACTION_UPDATE,
TRANSACTION_DELETE,
TRANSACTION_INDEX_CHANGED,
TRANSACTION_INDEX_DELETED,
TRANSACTION_COMPACTED
} TRANSACTIONTYPE, *LPTRANSACTIONTYPE;
//------------------------------------------------------------------
// HTRANSACTION
//------------------------------------------------------------------
DECLARE_HANDLE(HTRANSACTION);
typedef HTRANSACTION *LPHTRANSACTION;
//------------------------------------------------------------------
// FILEADDRESS
//------------------------------------------------------------------
typedef DWORD FILEADDRESS;
typedef LPDWORD LPFILEADDRESS;
//------------------------------------------------------------------
// INDEXORDINAL
//------------------------------------------------------------------
typedef DWORD INDEXORDINAL;
typedef LPDWORD LPINDEXORDINAL;
cpp_quote("#define INVALID_INDEX_ORDINAL 0xFFFFFFFF")
//------------------------------------------------------------------
// COLUMNORDINAL
//------------------------------------------------------------------
typedef BYTE COLUMNORDINAL;
typedef BYTE *LPCOLUMNORDINAL;
//------------------------------------------------------------------
// COMPACTFLAGS
//------------------------------------------------------------------
typedef DWORD COMPACTFLAGS;
cpp_quote("#define COMPACT_PREEMPTABLE 0x00000001")
cpp_quote("#define COMPACT_YIELD 0x00000002")
//------------------------------------------------------------------
// LOCKNOTIFYFLAGS
//------------------------------------------------------------------
typedef DWORD LOCKNOTIFYFLAGS;
//------------------------------------------------------------------
// REGISTERNOTIFYFLAGS
//------------------------------------------------------------------
typedef DWORD REGISTERNOTIFYFLAGS;
cpp_quote("#define REGISTER_NOTIFY_NOADDREF 0x00000001")
cpp_quote("#define REGISTER_NOTIFY_ORDINALSONLY 0x00000002")
//------------------------------------------------------------------
// COMPAREFLAGS
//------------------------------------------------------------------
typedef BYTE COMPAREFLAGS;
cpp_quote("#define COMPARE_IGNORECASE 0x00000001")
cpp_quote("#define COMPARE_DESCENDING 0x00000002")
cpp_quote("#define COMPARE_ASANSI 0x00000004")
//------------------------------------------------------------------
// TABLESCHEMAFLAGS
//------------------------------------------------------------------
typedef DWORD TABLESCHEMAFLAGS;
cpp_quote("#define TSF_RESETIFBADVERSION 0x00000001")
cpp_quote("#define TSF_HASSTREAMS 0x00000002")
cpp_quote("#define TSF_HASEXTENSION 0x00000004")
//------------------------------------------------------------------
// CREATEROWSETFLAGS
//------------------------------------------------------------------
typedef DWORD CREATEROWSETFLAGS;
//------------------------------------------------------------------
// INDEXFLAGS
//------------------------------------------------------------------
typedef BYTE INDEXFLAGS;
cpp_quote("#define INDEX_DESCENDING 0x00000001")
//------------------------------------------------------------------
// INDEXORDINAL
//------------------------------------------------------------------
cpp_quote("#define IINDEX_PRIMARY 0")
//------------------------------------------------------------------
// ROWORDINAL
//------------------------------------------------------------------
typedef DWORD ROWORDINAL;
typedef LPDWORD LPROWORDINAL;
const ROWORDINAL INVALID_ROWORDINAL = 0xffffffff;
//------------------------------------------------------------------
// ACCESSTYPE
//------------------------------------------------------------------
typedef enum tagACCESSTYPE {
ACCESS_READ=100,
ACCESS_WRITE=200
} ACCESSTYPE;
//------------------------------------------------------------------
// COLUMNDATATYPE
//------------------------------------------------------------------
typedef enum tagCOLUMNDATATYPE {
CDT_FILETIME,
CDT_FIXSTRA,
CDT_VARSTRA,
CDT_BYTE,
CDT_DWORD,
CDT_WORD,
CDT_STREAM,
CDT_VARBLOB,
CDT_FIXBLOB,
CDT_FLAGS,
CDT_UNIQUE,
CDT_FIXSTRW,
CDT_VARSTRW,
CDT_LASTTYPE
} COLUMNDATATYPE;
//------------------------------------------------------------------
// SYMBOLTYPE
//------------------------------------------------------------------
typedef enum tagSYMBOLTYPE {
SYMBOL_INVALID,
SYMBOL_COLUMN,
SYMBOL_DWORD,
SYMBOL_METHOD
} SYMBOLTYPE;
//------------------------------------------------------------------
// SYMBOLINFO
//------------------------------------------------------------------
typedef struct tagSYMBOLINFO {
SYMBOLTYPE tySymbol;
LPCSTR pszName;
DWORD dwValue;
} SYMBOLINFO, *LPSYMBOLINFO;
//------------------------------------------------------------------
// SYMBOLTABLE
//------------------------------------------------------------------
typedef struct tagSYMBOLTABLE {
DWORD cSymbols;
SYMBOLINFO rgSymbol[32];
} SYMBOLTABLE, *LPSYMBOLTABLE;
typedef SYMBOLTABLE const *LPCSYMBOLTABLE;
//------------------------------------------------------------------
// ORDINALLIST
//------------------------------------------------------------------
typedef struct tagORDINALLIST {
ROWORDINAL rgiRecord1[CMAX_INDEXES];
ROWORDINAL rgiRecord2[CMAX_INDEXES];
} ORDINALLIST, *LPORDINALLIST;
//------------------------------------------------------------------
// INDEXKEY - 6 Bytes
//------------------------------------------------------------------
#pragma pack(1)
typedef struct tagINDEXKEY {
COLUMNORDINAL iColumn; // 1
COMPAREFLAGS bCompare; // 2
DWORD dwBits; // 6
} INDEXKEY, *LPINDEXKEY;
#pragma pack()
typedef INDEXKEY const *LPCINDEXKEY;
//------------------------------------------------------------------
// TABLEINDEX - 2 + (8 * 6) = 50 Bytes
//------------------------------------------------------------------
#pragma pack(1)
typedef struct tagTABLEINDEX {
BYTE cKeys; // 2
INDEXFLAGS bFlags; // 4
INDEXKEY rgKey[CMAX_KEYS];
} TABLEINDEX, *LPTABLEINDEX;
#pragma pack()
typedef TABLEINDEX const *LPCTABLEINDEX;
//------------------------------------------------------------------
// TABLECOLUMN
//------------------------------------------------------------------
typedef struct tagTABLECOLUMN {
COLUMNORDINAL iOrdinal;
COLUMNDATATYPE type;
DWORD ofBinding;
DWORD cbSize;
} TABLECOLUMN, *LPTABLECOLUMN;
typedef TABLECOLUMN const *LPCTABLECOLUMN;
//------------------------------------------------------------------
// TABLESCHEMA
//------------------------------------------------------------------
typedef struct tagTABLESCHEMA {
const CLSID *pclsidExtension;
DWORD cbBinding;
DWORD ofMemory;
DWORD ofVersion;
DWORD dwMinorVersion;
TABLESCHEMAFLAGS dwFlags;
DWORD cbUserData;
DWORD ofUniqueId;
BYTE cColumns;
LPCTABLECOLUMN prgColumn;
LPCTABLEINDEX pPrimaryIndex;
LPCSYMBOLTABLE pSymbols;
} TABLESCHEMA, *LPTABLESCHEMA;
typedef TABLESCHEMA const *LPCTABLESCHEMA;
//------------------------------------------------------------------
// BEGIN_TABLE_INDEX
//------------------------------------------------------------------
cpp_quote("#ifdef DEFINE_DIRECTDB")
cpp_quote("#define BEGIN_TABLE_INDEX(_index, _cKeys) \\")
cpp_quote(" extern const TABLEINDEX _index = { _cKeys, 0, {")
cpp_quote("#else")
cpp_quote("#define BEGIN_TABLE_INDEX(_index, _cKeys)")
cpp_quote("#endif")
//------------------------------------------------------------------
// DEFINE_KEY
//------------------------------------------------------------------
cpp_quote("#ifdef DEFINE_DIRECTDB")
cpp_quote("#define DEFINE_KEY(_iColumn, _wCompare, _dwBits) { _iColumn, _wCompare, _dwBits },")
cpp_quote("#else")
cpp_quote("#define DEFINE_KEY(_iColumn, _wCompare, _dwBits)")
cpp_quote("#endif")
//------------------------------------------------------------------
// END_TABLE_INDEX
//------------------------------------------------------------------
cpp_quote("#ifdef DEFINE_DIRECTDB")
cpp_quote("#define END_TABLE_INDEX } };")
cpp_quote("#else")
cpp_quote("#define END_TABLE_INDEX")
cpp_quote("#endif")
//------------------------------------------------------------------
// BEGIN_COLUMN_ARRAY
//------------------------------------------------------------------
cpp_quote("#ifdef DEFINE_DIRECTDB")
cpp_quote("#define BEGIN_COLUMN_ARRAY(_name, _cColumns) const TABLECOLUMN _name[_cColumns] = {")
cpp_quote("#else")
cpp_quote("#define BEGIN_COLUMN_ARRAY(_name, _cColumns)")
cpp_quote("#endif")
//------------------------------------------------------------------
// DEFINE_COLUMN
//------------------------------------------------------------------
cpp_quote("#ifdef DEFINE_DIRECTDB")
cpp_quote("#define DEFINE_COLUMN(_iColumn, _type, _structure, _member)\\")
cpp_quote(" { _iColumn, _type, offsetof(_structure, _member), sizeofMember(_structure, _member) },")
cpp_quote("#else")
cpp_quote("#define DEFINE_COLUMN(_iColumn, _type, _structure, _member)")
cpp_quote("#endif")
//------------------------------------------------------------------
// END_COLUMN_ARRAY
//------------------------------------------------------------------
cpp_quote("#ifdef DEFINE_DIRECTDB")
cpp_quote("#define END_COLUMN_ARRAY };")
cpp_quote("#else")
cpp_quote("#define END_COLUMN_ARRAY")
cpp_quote("#endif")
//------------------------------------------------------------------
// BEGIN_SYMBOL_TABLE
//------------------------------------------------------------------
cpp_quote("#ifdef DEFINE_DIRECTDB")
cpp_quote("#define BEGIN_SYMBOL_TABLE(_name, _cSymbols) \\")
cpp_quote(" extern const SYMBOLTABLE _name = { _cSymbols, {")
cpp_quote("#else")
cpp_quote("#define BEGIN_SYMBOL_TABLE(_name, _cSymbols)")
cpp_quote("#endif")
//------------------------------------------------------------------
// DEFINE_SYMBOL
//------------------------------------------------------------------
cpp_quote("#ifdef DEFINE_DIRECTDB")
cpp_quote("#define DEFINE_SYMBOL(_tySymbol, _pszName, _dwValue) \\")
cpp_quote(" { _tySymbol, (LPCSTR)_pszName, _dwValue },")
cpp_quote("#else")
cpp_quote("#define DEFINE_SYMBOL(_tySymbol, _pszName, _dwValue)")
cpp_quote("#endif")
//------------------------------------------------------------------
// END_SYMBOL_TABLE
//------------------------------------------------------------------
cpp_quote("#ifdef DEFINE_DIRECTDB")
cpp_quote("#define END_SYMBOL_TABLE } };")
cpp_quote("#else")
cpp_quote("#define END_SYMBOL_TABLE")
cpp_quote("#endif")
//------------------------------------------------------------------
// BEGIN_TABLE_SCHEMA
//------------------------------------------------------------------
cpp_quote("#ifdef DEFINE_DIRECTDB")
cpp_quote("#define BEGIN_TABLE_SCHEMA(_schema, _clsid, _binding) \\")
cpp_quote(" extern const TABLESCHEMA _schema = { \\")
cpp_quote(" &_clsid,\\")
cpp_quote(" sizeof(_binding),\\")
cpp_quote(" offsetof(_binding, pAllocated),\\")
cpp_quote(" offsetof(_binding, bVersion),")
cpp_quote("#else")
cpp_quote("#define BEGIN_TABLE_SCHEMA(_schema, _clsid, _binding)")
cpp_quote("#endif")
//------------------------------------------------------------------
// SCHEMA_PROPERTY
//------------------------------------------------------------------
cpp_quote("#ifdef DEFINE_DIRECTDB")
cpp_quote("#define SCHEMA_PROPERTY(_value) \\")
cpp_quote(" _value,")
cpp_quote("#else")
cpp_quote("#define SCHEMA_PROPERTY(_value)")
cpp_quote("#endif")
//------------------------------------------------------------------
// END_TABLE_SCHEMA
//------------------------------------------------------------------
cpp_quote("#ifdef DEFINE_DIRECTDB")
cpp_quote("#define END_TABLE_SCHEMA };")
cpp_quote("#else")
cpp_quote("#define END_TABLE_SCHEMA")
cpp_quote("#endif")
//------------------------------------------------------------------
// Locking Methods
//------------------------------------------------------------------
HRESULT Lock(
[out] LPHLOCK phLock);
HRESULT Unlock(
[out] LPHLOCK phLock);
//------------------------------------------------------------------
// Data Manipulation Methods
//------------------------------------------------------------------
HRESULT InsertRecord(
[in] LPVOID pRecord);
HRESULT UpdateRecord(
[in] LPVOID pRecord);
HRESULT DeleteRecord(
[in] LPVOID pRecord);
HRESULT FindRecord(
[in] INDEXORDINAL iIndex,
[in] DWORD cColumns, // Use COLUMNS_ALL to compare all columns of the index
[in,out] LPVOID pRecord,
[out] LPROWORDINAL piRow);
HRESULT GetRowOrdinal(
[in] INDEXORDINAL iIndex,
[in] LPVOID pRecord,
[out] LPROWORDINAL piRow);
HRESULT FreeRecord(
[in,out] LPVOID pRecord);
HRESULT GetUserData(
[in,out] LPVOID pvUserData,
[in] ULONG cbUserData);
HRESULT SetUserData(
[in] LPVOID pvUserData,
[in] ULONG cbUserData);
HRESULT GetRecordCount(
[in] INDEXORDINAL iIndex,
[out] LPDWORD pcRecords);
//------------------------------------------------------------------
// Schema Methods
//------------------------------------------------------------------
HRESULT GetIndexInfo(
[in] INDEXORDINAL iIndex,
[out] LPSTR *ppszFilter,
[out] LPTABLEINDEX pIndex);
HRESULT ModifyIndex(
[in] INDEXORDINAL iIndex,
[in] LPCSTR pszFilter,
[in] LPCTABLEINDEX pIndex);
HRESULT DeleteIndex(
[in] INDEXORDINAL iIndex);
//------------------------------------------------------------------
// Rowset Methods
//------------------------------------------------------------------
HRESULT CreateRowset(
[in] INDEXORDINAL iIndex,
[in] CREATEROWSETFLAGS dwFlags,
[out] LPHROWSET phRowset);
HRESULT SeekRowset(
[in] HROWSET hRowset,
[in] SEEKROWSETTYPE tySeek,
[in] LONG cRows,
[out] LPROWORDINAL piRowNew);
HRESULT QueryRowset(
[in] HROWSET hRowset,
[in] LONG cWanted,
[in,out] LPVOID *prgpRecord,
[out] LPDWORD pcObtained);
HRESULT CloseRowset(
[in,out] LPHROWSET phRowset);
//------------------------------------------------------------------
// Steaming Methods
//------------------------------------------------------------------
HRESULT CreateStream(
[out] LPFILEADDRESS pfaStart);
HRESULT DeleteStream(
[in] FILEADDRESS faStart);
HRESULT CopyStream(
[in] IDatabase *pDest,
[in] FILEADDRESS faStream,
[out] LPFILEADDRESS pfaNew);
HRESULT OpenStream(
[in] ACCESSTYPE tyAccess,
[in] FILEADDRESS faStream,
[out] IStream **ppStream);
HRESULT ChangeStreamLock(
[in] IStream *pStream,
[in] ACCESSTYPE tyAccessNew);
//------------------------------------------------------------------
// Notification Methods
//------------------------------------------------------------------
HRESULT RegisterNotify(
[in] INDEXORDINAL iIndex,
[in] REGISTERNOTIFYFLAGS dwFlags,
[in] DWORD_PTR dwCookie,
[in] IDatabaseNotify *pNotify);
HRESULT DispatchNotify(
[in] IDatabaseNotify *pNotify);
HRESULT SuspendNotify(
[in] IDatabaseNotify *pNotify);
HRESULT ResumeNotify(
[in] IDatabaseNotify *pNotify);
HRESULT UnregisterNotify(
[in] IDatabaseNotify *pNotify);
HRESULT LockNotify(
[in] LOCKNOTIFYFLAGS dwFlags,
[out] LPHLOCK phLock);
HRESULT UnlockNotify(
[in,out] LPHLOCK phLock);
HRESULT GetTransaction(
[in,out] LPHTRANSACTION phTransaction,
[out] LPTRANSACTIONTYPE ptyTransaction,
[in] LPVOID pRecord1,
[in] LPVOID pRecord2,
[in,out] LPINDEXORDINAL piIndex,
[in] LPORDINALLIST pOrdinals);
//------------------------------------------------------------------
// Maintenence Methods
//------------------------------------------------------------------
HRESULT MoveFile(
[in] LPCWSTR pwszFilePath);
HRESULT SetSize(
[in] DWORD cbSize);
HRESULT Repair(void);
HRESULT Compact(
[in] IDatabaseProgress *pProgress,
[in] COMPACTFLAGS dwFlags);
//------------------------------------------------------------------
// Fast-Heap Methods
//------------------------------------------------------------------
HRESULT HeapAllocate(
[in] DWORD dwFlags, // HEAP_xxx Flags normally passed to HeapAlloc
[in] DWORD cbSize,
[out] LPVOID *ppBuffer);
HRESULT HeapFree(
[in] LPVOID pBuffer);
//------------------------------------------------------------------
// General Utility Methods
//------------------------------------------------------------------
HRESULT GenerateId(
[out] LPDWORD pdwId);
HRESULT GetClientCount(
[out] LPDWORD pcClients);
HRESULT GetFile(
[out] LPWSTR *ppwszFile);
HRESULT GetSize(
[out] LPDWORD pcbFile,
[out] LPDWORD pcbAllocated,
[out] LPDWORD pcbFreed,
[out] LPDWORD pcbStreams);
}
cpp_quote("#endif // __LPDATABASE_DEFINED")
//----------------------------------------------------------------------
// IDatabaseSession
//----------------------------------------------------------------------
cpp_quote("#ifndef __LPDATABASESESSION_DEFINED")
cpp_quote("#define __LPDATABASESESSION_DEFINED")
[
object,
uuid(4A160440-676D-11d2-994E-00C04FA309D4),
pointer_default(unique)
]
interface IDatabaseSession : IUnknown
{
//------------------------------------------------------------------
// Pointer to an interface of this type
//------------------------------------------------------------------
typedef IDatabaseSession *LPDATABASESESSION;
//------------------------------------------------------------------
// OPENDATABASEFLAGS
//------------------------------------------------------------------
typedef DWORD OPENDATABASEFLAGS;
cpp_quote("#define OPEN_DATABASE_NORESET 0x00000001")
cpp_quote("#define OPEN_DATABASE_NOADDREFEXT 0x00000002")
cpp_quote("#define OPEN_DATABASE_NOEXTENSION 0x00000004")
//cpp_quote("#define OPEN_DATABASE_NOREPAIRUI 0x00000008")
cpp_quote("#define OPEN_DATABASE_NOMONITOR 0x00000010")
cpp_quote("#define OPEN_DATABASE_EXCLUSEIVE 0x00000020")
cpp_quote("#define OPEN_DATABASE_NOCREATE 0x00000040")
//------------------------------------------------------------------
// Members
//------------------------------------------------------------------
HRESULT OpenDatabase(
[in] LPCSTR pszFile,
[in] OPENDATABASEFLAGS dwFlags,
[in] LPCTABLESCHEMA pSchema,
[in] IDatabaseExtension *pExtension,
[out] IDatabase **ppDB);
HRESULT OpenDatabaseW(
[in] LPCWSTR pwszFile,
[in] OPENDATABASEFLAGS dwFlags,
[in] LPCTABLESCHEMA pSchema,
[in] IDatabaseExtension *pExtension,
[out] IDatabase **ppDB);
HRESULT OpenQuery(
[in] IDatabase *pDatabase,
[in] LPCSTR pszQuery,
[out] IDatabaseQuery **ppQuery);
}
cpp_quote("#endif // __LPDATABASESESSION_DEFINED")
//----------------------------------------------------------------------
// IDatabaseExtension
//----------------------------------------------------------------------
cpp_quote("#ifndef __LPDATABASEEXTENSION_DEFINED")
cpp_quote("#define __LPDATABASEEXTENSION_DEFINED")
[
object,
uuid(B58A0F80-0702-11d2-9A63-00C04FA309D4),
pointer_default(unique)
]
interface IDatabaseExtension : IUnknown
{
//------------------------------------------------------------------
// OPERATIONSTATE
//------------------------------------------------------------------
typedef enum tagOPERATIONSTATE {
OPERATION_BEFORE,
OPERATION_AFTER
} OPERATIONSTATE;
//------------------------------------------------------------------
// Pointer to an interface of this type
//------------------------------------------------------------------
typedef IDatabaseExtension *LPDATABASEEXTENSION;
//------------------------------------------------------------------
// Methods
//------------------------------------------------------------------
HRESULT Initialize(
[in] IDatabase *pDB);
HRESULT OnLock(void);
HRESULT OnUnlock(void);
HRESULT OnRecordInsert(
[in] OPERATIONSTATE tyState,
[in] LPORDINALLIST pOrdinals, // Only valid when tyState = OPERATION_AFTER
[in] LPVOID pRecord);
HRESULT OnRecordUpdate(
[in] OPERATIONSTATE tyState,
[in] LPORDINALLIST pOrdinals, // Only valid when tyState = OPERATION_AFTER
[in] LPVOID pRecordOld,
[in] LPVOID pRecordNew);
HRESULT OnRecordDelete(
[in] OPERATIONSTATE tyState,
[in] LPORDINALLIST pOrdinals, // Only valid when tyState = OPERATION_AFTER
[in] LPVOID pRecord);
HRESULT OnExecuteMethod(
[in] METHODID idMethod,
[in] LPVOID pBinding,
[in] LPDWORD pdwResult);
}
cpp_quote("#endif // __LPDATABASEEXTENSION_DEFINED")
//----------------------------------------------------------------------
// IDatabaseNotify
//----------------------------------------------------------------------
cpp_quote("#ifndef __LPDATABASENOTIFY_DEFINED")
cpp_quote("#define __LPDATABASENOTIFY_DEFINED")
[
object,
uuid(7CADFB4C-AC65-11d1-9A16-00C04FA309D4),
pointer_default(unique)
]
interface IDatabaseNotify : IUnknown
{
//------------------------------------------------------------------
// Pointer to an interface of this type
//------------------------------------------------------------------
typedef IDatabaseNotify *LPDATABASENOTIFY;
//------------------------------------------------------------------
// Methods
//------------------------------------------------------------------
HRESULT OnTransaction(
[in] HTRANSACTION hTransaction,
[in] DWORD_PTR dwCookie,
[in] IDatabase *pDB);
}
cpp_quote("#endif // __LPDATABASENOTIFY_DEFINED")
//----------------------------------------------------------------------
// IDatabaseStream
//----------------------------------------------------------------------
cpp_quote("#ifndef __LPDATABASESTREAM_DEFINED")
cpp_quote("#define __LPDATABASESTREAM_DEFINED")
[
object,
uuid(82EAD219-A6EC-11d1-9A11-00C04FA309D4),
pointer_default(unique)
]
interface IDatabaseStream : IStream
{
//------------------------------------------------------------------
// Pointer to an interface of this type
//------------------------------------------------------------------
typedef IDatabaseStream *LPDATABASESTREAM;
//------------------------------------------------------------------
// Methods
//------------------------------------------------------------------
HRESULT GetFileAddress(
[out] LPFILEADDRESS pfaStream);
HRESULT CompareDatabase(
[in] IDatabase *pDatabase);
}
cpp_quote("#endif // __LPDATABASESTREAM_DEFINED")
//----------------------------------------------------------------------
// IDatabaseProgress
//----------------------------------------------------------------------
cpp_quote("#ifndef __LPDATABASEPROGRESS_DEFINED")
cpp_quote("#define __LPDATABASEPROGRESS_DEFINED")
[
object,
uuid(7CADFB4B-AC65-11d1-9A16-00C04FA309D4),
pointer_default(unique)
]
interface IDatabaseProgress : IUnknown
{
HRESULT Update(
[in] DWORD cCount);
}
cpp_quote("#endif // __LPDATABASEPROGRESS_DEFINED")
//----------------------------------------------------------------------
// IDatabaseQuery
//----------------------------------------------------------------------
cpp_quote("#ifndef __LPDATABASEQUERY_DEFINED")
cpp_quote("#define __LPDATABASEQUERY_DEFINED")
[
object,
uuid(E6CEC131-7F4B-11d2-9962-00C04FA309D4),
pointer_default(unique)
]
interface IDatabaseQuery : IUnknown
{
HRESULT Evaluate(
[in] LPVOID pBinding);
}
cpp_quote("#endif // __LPDATABASEQUERY_DEFINED")
} // DirectDB Library Object Definition