zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

msoledbsql.h (62542B) - Raw


      1 /**
      2  * This file has no copyright assigned and is placed in the Public Domain.
      3  * This file is part of the mingw-w64 runtime package.
      4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
      5  */
      6 #ifndef __REQUIRED_RPCNDR_H_VERSION__
      7 #define __REQUIRED_RPCNDR_H_VERSION__ 475
      8 #endif
      9 
     10 #include "rpc.h"
     11 #include "rpcndr.h"
     12 
     13 #ifndef __RPCNDR_H_VERSION__
     14 #error This stub requires an updated version of <rpcndr.h>
     15 #endif
     16 
     17 #ifndef COM_NO_WINDOWS_H
     18 #include "windows.h"
     19 #include "ole2.h"
     20 #endif
     21 
     22 #ifndef __msoledbsql_h__
     23 #define __msoledbsql_h__
     24 
     25 #ifndef __ICommandWithParameters_FWD_DEFINED__
     26 #define __ICommandWithParameters_FWD_DEFINED__
     27 typedef struct ICommandWithParameters ICommandWithParameters;
     28 #endif
     29 
     30 #ifndef __IUMSInitialize_FWD_DEFINED__
     31 #define __IUMSInitialize_FWD_DEFINED__
     32 typedef struct IUMSInitialize IUMSInitialize;
     33 #endif
     34 
     35 #ifndef __ISQLServerErrorInfo_FWD_DEFINED__
     36 #define __ISQLServerErrorInfo_FWD_DEFINED__
     37 typedef struct ISQLServerErrorInfo ISQLServerErrorInfo;
     38 #endif
     39 
     40 #ifndef __IRowsetFastLoad_FWD_DEFINED__
     41 #define __IRowsetFastLoad_FWD_DEFINED__
     42 typedef struct IRowsetFastLoad IRowsetFastLoad;
     43 #endif
     44 
     45 #ifndef __ISchemaLock_FWD_DEFINED__
     46 #define __ISchemaLock_FWD_DEFINED__
     47 typedef struct ISchemaLock ISchemaLock;
     48 #endif
     49 
     50 #ifndef __IBCPSession_FWD_DEFINED__
     51 #define __IBCPSession_FWD_DEFINED__
     52 typedef struct IBCPSession IBCPSession;
     53 #endif
     54 
     55 #ifndef __IBCPSession2_FWD_DEFINED__
     56 #define __IBCPSession2_FWD_DEFINED__
     57 typedef struct IBCPSession2 IBCPSession2;
     58 #endif
     59 
     60 #ifndef __ISSAbort_FWD_DEFINED__
     61 #define __ISSAbort_FWD_DEFINED__
     62 typedef struct ISSAbort ISSAbort;
     63 #endif
     64 
     65 #ifndef __ISSCommandWithParameters_FWD_DEFINED__
     66 #define __ISSCommandWithParameters_FWD_DEFINED__
     67 typedef struct ISSCommandWithParameters ISSCommandWithParameters;
     68 #endif
     69 
     70 #ifndef __IDBAsynchStatus_FWD_DEFINED__
     71 #define __IDBAsynchStatus_FWD_DEFINED__
     72 typedef struct IDBAsynchStatus IDBAsynchStatus;
     73 #endif
     74 
     75 #ifndef __ISSAsynchStatus_FWD_DEFINED__
     76 #define __ISSAsynchStatus_FWD_DEFINED__
     77 typedef struct ISSAsynchStatus ISSAsynchStatus;
     78 #endif
     79 
     80 #include "unknwn.h"
     81 #include "oaidl.h"
     82 
     83 #ifdef __cplusplus
     84 extern "C"{
     85 #endif
     86 
     87 #ifndef MSOLEDBSQL_VER
     88 #define MSOLEDBSQL_VER 1800
     89 #endif
     90 
     91 #if (MSOLEDBSQL_VER >= 1800)
     92 #define MSOLEDBSQL_PRODUCT_NAME_FULL_ANSI "Microsoft OLE DB Driver for SQL Server"
     93 #define MSOLEDBSQL_PRODUCT_NAME_SHORT_ANSI "OLE DB Driver for SQL Server"
     94 #define MSOLEDBSQL_FILE_NAME_ANSI "msoledbsql"
     95 #define MSOLEDBSQL_FILE_NAME_FULL_ANSI "msoledbsql.dll"
     96 #define MSOLEDBSQL_PRODUCT_NAME_FULL_UNICODE L"Microsoft OLE DB Driver for SQL Server"
     97 #define MSOLEDBSQL_PRODUCT_NAME_SHORT_UNICODE L"OLE DB Driver for SQL Server"
     98 #define MSOLEDBSQL_FILE_NAME_UNICODE L"msoledbsql"
     99 #define MSOLEDBSQL_FILE_NAME_FULL_UNICODE L"msoledbsql.dll"
    100 #define MSOLEDBSQL_VI_PROG_ID_ANSI "MSOLEDBSQL"
    101 #define MSOLEDBSQL_VI_ERROR_LOOKUP_PROG_ID_ANSI "MSOLEDBSQL.ErrorLookup"
    102 #define MSOLEDBSQL_VI_ENUMERATOR_PROG_ID_ANSI "MSOLEDBSQL.Enumerator"
    103 #define MSOLEDBSQL_PROG_ID_ANSI "MSOLEDBSQL.1"
    104 #define MSOLEDBSQL_ERROR_LOOKUP_PROG_ID_ANSI "MSOLEDBSQL.ErrorLookup.1"
    105 #define MSOLEDBSQL_ENUMERATOR_PROG_ID_ANSI "MSOLEDBSQL.Enumerator.1"
    106 #define MSOLEDBSQL_VI_PROG_ID_UNICODE L"MSOLEDBSQL"
    107 #define MSOLEDBSQL_VI_ERROR_LOOKUP_PROG_ID_UNICODE L"MSOLEDBSQL.ErrorLookup"
    108 #define MSOLEDBSQL_VI_ENUMERATOR_PROG_ID_UNICODE L"MSOLEDBSQL.Enumerator"
    109 #define MSOLEDBSQL_PROG_ID_UNICODE L"MSOLEDBSQL.1"
    110 #define MSOLEDBSQL_ERROR_LOOKUP_PROG_ID_UNICODE L"MSOLEDBSQL.ErrorLookup.1"
    111 #define MSOLEDBSQL_ENUMERATOR_PROG_ID_UNICODE L"MSOLEDBSQL.Enumerator.1"
    112 #define MSOLEDBSQL_CLSID CLSID_MSOLEDBSQL
    113 #define MSOLEDBSQL_ERROR_CLSID CLSID_MSOLEDBSQL_ERROR
    114 #define MSOLEDBSQL_ENUMERATOR_CLSID CLSID_MSOLEDBSQL_ENUMERATOR
    115 #endif
    116 
    117 #if defined(_UNICODE) || defined(UNICODE)
    118 #define MSOLEDBSQL_PRODUCT_NAME_FULL MSOLEDBSQL_PRODUCT_NAME_FULL_UNICODE
    119 #define MSOLEDBSQL_PRODUCT_NAME_SHORT MSOLEDBSQL_PRODUCT_NAME_SHORT_UNICODE
    120 #define MSOLEDBSQL_FILE_NAME MSOLEDBSQL_FILE_NAME_UNICODE
    121 #define MSOLEDBSQL_FILE_NAME_FULL MSOLEDBSQL_FILE_NAME_FULL_UNICODE
    122 #define MSOLEDBSQL_VI_PROG_ID MSOLEDBSQL_VI_PROG_ID_UNICODE
    123 #define MSOLEDBSQL_VI_ERROR_LOOKUP_PROG_ID MSOLEDBSQL_VI_ERROR_LOOKUP_PROG_ID_UNICODE
    124 #define MSOLEDBSQL_VI_ENUMERATOR_PROG_ID MSOLEDBSQL_VI_ENUMERATOR_PROG_ID_UNICODE
    125 #define MSOLEDBSQL_PROG_ID MSOLEDBSQL_PROG_ID_UNICODE
    126 #define MSOLEDBSQL_ERROR_LOOKUP_PROG_ID MSOLEDBSQL_ERROR_LOOKUP_PROG_ID_UNICODE
    127 #define MSOLEDBSQL_ENUMERATOR_PROG_ID MSOLEDBSQL_ENUMERATOR_PROG_ID_UNICODE
    128 #else
    129 #define MSOLEDBSQL_PRODUCT_NAME_FULL MSOLEDBSQL_PRODUCT_NAME_FULL_ANSI
    130 #define MSOLEDBSQL_PRODUCT_NAME_SHORT MSOLEDBSQL_PRODUCT_NAME_SHORT_ANSI
    131 #define MSOLEDBSQL_FILE_NAME MSOLEDBSQL_FILE_NAME_ANSI
    132 #define MSOLEDBSQL_FILE_NAME_FULL MSOLEDBSQL_FILE_NAME_FULL_ANSI
    133 #define MSOLEDBSQL_VI_PROG_ID MSOLEDBSQL_VI_PROG_ID_ANSI
    134 #define MSOLEDBSQL_VI_ERROR_LOOKUP_PROG_ID MSOLEDBSQL_VI_ERROR_LOOKUP_PROG_ID_ANSI
    135 #define MSOLEDBSQL_VI_ENUMERATOR_PROG_ID MSOLEDBSQL_VI_ENUMERATOR_PROG_ID_ANSI
    136 #define MSOLEDBSQL_PROG_ID MSOLEDBSQL_PROG_ID_ANSI
    137 #define MSOLEDBSQL_ERROR_LOOKUP_PROG_ID MSOLEDBSQL_ERROR_LOOKUP_PROG_ID_ANSI
    138 #define MSOLEDBSQL_ENUMERATOR_PROG_ID MSOLEDBSQL_ENUMERATOR_PROG_ID_ANSI
    139 #endif
    140 
    141 #ifndef __oledb_h__
    142 #include <oledb.h>
    143 #endif
    144 
    145 #define V_SS_VT(X) ((X)->vt)
    146 #define V_SS_UNION(X, Y) ((X)->Y)
    147 #define V_SS_UI1(X) V_SS_UNION(X, bTinyIntVal)
    148 #define V_SS_I2(X) V_SS_UNION(X, sShortIntVal)
    149 #define V_SS_I4(X) V_SS_UNION(X, lIntVal)
    150 #define V_SS_I8(X) V_SS_UNION(X, llBigIntVal)
    151 #define V_SS_R4(X) V_SS_UNION(X, fltRealVal)
    152 #define V_SS_R8(X) V_SS_UNION(X, dblFloatVal)
    153 #define V_SS_UI4(X) V_SS_UNION(X, ulVal)
    154 #define V_SS_MONEY(X) V_SS_UNION(X, cyMoneyVal)
    155 #define V_SS_SMALLMONEY(X) V_SS_UNION(X, cyMoneyVal)
    156 #define V_SS_WSTRING(X) V_SS_UNION(X, NCharVal)
    157 #define V_SS_WVARSTRING(X) V_SS_UNION(X, NCharVal)
    158 #define V_SS_STRING(X) V_SS_UNION(X, CharVal)
    159 #define V_SS_VARSTRING(X) V_SS_UNION(X, CharVal)
    160 #define V_SS_BIT(X) V_SS_UNION(X, fBitVal)
    161 #define V_SS_GUID(X) V_SS_UNION(X, rgbGuidVal)
    162 #define V_SS_NUMERIC(X) V_SS_UNION(X, numNumericVal)
    163 #define V_SS_DECIMAL(X) V_SS_UNION(X, numNumericVal)
    164 #define V_SS_BINARY(X) V_SS_UNION(X, BinaryVal)
    165 #define V_SS_VARBINARY(X) V_SS_UNION(X, BinaryVal)
    166 #define V_SS_DATETIME(X) V_SS_UNION(X, tsDateTimeVal)
    167 #define V_SS_SMALLDATETIME(X) V_SS_UNION(X, tsDateTimeVal)
    168 #define V_SS_UNKNOWN(X) V_SS_UNION(X, UnknownType)
    169 #define V_SS_IMAGE(X) V_SS_UNION(X, ImageVal)
    170 #define V_SS_TEXT(X) V_SS_UNION(X, TextVal)
    171 #define V_SS_NTEXT(X) V_SS_UNION(X, NTextVal)
    172 #define V_SS_DATE(X) V_SS_UNION(X, dDateVal)
    173 #define V_SS_TIME2(X) V_SS_UNION(X, Time2Val)
    174 #define V_SS_DATETIME2(X) V_SS_UNION(X, DateTimeVal)
    175 #define V_SS_DATETIMEOFFSET(X) V_SS_UNION(X, DateTimeOffsetVal)
    176 
    177 typedef enum DBTYPEENUM EOledbTypes;
    178 #define DBTYPE_XML ((EOledbTypes) 141)
    179 #define DBTYPE_TABLE ((EOledbTypes) 143)
    180 #define DBTYPE_DBTIME2 ((EOledbTypes) 145)
    181 #define DBTYPE_DBTIMESTAMPOFFSET ((EOledbTypes) 146)
    182 #ifdef _SQLOLEDB_H_
    183 #undef DBTYPE_SQLVARIANT
    184 #endif
    185 #define DBTYPE_SQLVARIANT ((EOledbTypes) 144)
    186 
    187 #ifndef _SQLOLEDB_H_
    188 enum SQLVARENUM {
    189   VT_SS_EMPTY = DBTYPE_EMPTY, VT_SS_NULL = DBTYPE_NULL, VT_SS_UI1 = DBTYPE_UI1,
    190   VT_SS_I2 = DBTYPE_I2, VT_SS_I4 = DBTYPE_I4, VT_SS_I8 = DBTYPE_I8,
    191   VT_SS_R4 = DBTYPE_R4, VT_SS_R8 = DBTYPE_R8, VT_SS_MONEY = DBTYPE_CY,
    192   VT_SS_SMALLMONEY = 200, VT_SS_WSTRING = 201, VT_SS_WVARSTRING = 202,
    193   VT_SS_STRING = 203, VT_SS_VARSTRING = 204, VT_SS_BIT = DBTYPE_BOOL,
    194   VT_SS_GUID = DBTYPE_GUID, VT_SS_NUMERIC = DBTYPE_NUMERIC, VT_SS_DECIMAL = 205,
    195   VT_SS_DATETIME = DBTYPE_DBTIMESTAMP, VT_SS_SMALLDATETIME = 206,
    196   VT_SS_BINARY = 207, VT_SS_VARBINARY = 208, VT_SS_UNKNOWN = 209,
    197   VT_SS_DATE = DBTYPE_DBDATE, VT_SS_TIME2 = DBTYPE_DBTIME2,
    198   VT_SS_DATETIME2 = 212, VT_SS_DATETIMEOFFSET = DBTYPE_DBTIMESTAMPOFFSET
    199 };
    200 typedef unsigned short SSVARTYPE;
    201 
    202 enum DBPARAMFLAGSENUM_SS_100 {
    203   DBPARAMFLAGS_SS_ISVARIABLESCALE = 0x40000000
    204 };
    205 enum DBCOLUMNFLAGSENUM_SS_100 {
    206   DBCOLUMNFLAGS_SS_ISVARIABLESCALE = 0x40000000,
    207   DBCOLUMNFLAGS_SS_ISCOLUMNSET = 0x80000000
    208 };
    209 
    210 extern RPC_IF_HANDLE __MIDL_itf_msoledbsql_0000_0001_v0_0_c_ifspec;
    211 extern RPC_IF_HANDLE __MIDL_itf_msoledbsql_0000_0001_v0_0_s_ifspec;
    212 
    213 #ifndef __IUMSInitialize_INTERFACE_DEFINED__
    214 #define __IUMSInitialize_INTERFACE_DEFINED__
    215 
    216 EXTERN_C const IID IID_IUMSInitialize;
    217 
    218 #if defined(__cplusplus) && !defined(CINTERFACE)
    219 struct IUMSInitialize : public IUnknown {
    220 public:
    221   virtual HRESULT WINAPI Initialize(void *pUMS) = 0;
    222 };
    223 #else
    224 typedef struct IUMSInitializeVtbl {
    225   BEGIN_INTERFACE
    226     HRESULT (WINAPI *QueryInterface)(IUMSInitialize *This, REFIID riid, void **ppvObject);
    227     ULONG (WINAPI *AddRef)(IUMSInitialize *This);
    228     ULONG (WINAPI *Release)(IUMSInitialize *This);
    229     HRESULT (WINAPI *Initialize)(IUMSInitialize *This, void *pUMS);
    230   END_INTERFACE
    231 } IUMSInitializeVtbl;
    232 struct IUMSInitialize {
    233   CONST_VTBL struct IUMSInitializeVtbl *lpVtbl;
    234 };
    235 #ifdef COBJMACROS
    236 #define IUMSInitialize_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
    237 #define IUMSInitialize_AddRef(This) (This)->lpVtbl->AddRef(This)
    238 #define IUMSInitialize_Release(This) (This)->lpVtbl->Release(This)
    239 #define IUMSInitialize_Initialize(This,pUMS) (This)->lpVtbl->Initialize(This,pUMS)
    240 #endif
    241 #endif
    242 #endif
    243 
    244 typedef struct tagSSErrorInfo {
    245   LPOLESTR pwszMessage;
    246   LPOLESTR pwszServer;
    247   LPOLESTR pwszProcedure;
    248   LONG lNative;
    249   BYTE bState;
    250   BYTE bClass;
    251   WORD wLineNumber;
    252 } SSERRORINFO;
    253 
    254 extern RPC_IF_HANDLE __MIDL_itf_msoledbsql_0000_0002_v0_0_c_ifspec;
    255 extern RPC_IF_HANDLE __MIDL_itf_msoledbsql_0000_0002_v0_0_s_ifspec;
    256 
    257 #ifndef __ISQLServerErrorInfo_INTERFACE_DEFINED__
    258 #define __ISQLServerErrorInfo_INTERFACE_DEFINED__
    259 
    260 EXTERN_C const IID IID_ISQLServerErrorInfo;
    261 
    262 #if defined(__cplusplus) && !defined(CINTERFACE)
    263 struct ISQLServerErrorInfo : public IUnknown {
    264 public:
    265   virtual HRESULT WINAPI GetErrorInfo(SSERRORINFO **ppErrorInfo, OLECHAR **ppStringsBuffer) = 0;
    266 };
    267 #else
    268 typedef struct ISQLServerErrorInfoVtbl {
    269   BEGIN_INTERFACE
    270     HRESULT (WINAPI *QueryInterface)(ISQLServerErrorInfo *This, REFIID riid, void **ppvObject);
    271     ULONG (WINAPI *AddRef)(ISQLServerErrorInfo *This);
    272     ULONG (WINAPI *Release)(ISQLServerErrorInfo *This);
    273     HRESULT (WINAPI *GetErrorInfo)(ISQLServerErrorInfo *This, SSERRORINFO **ppErrorInfo, OLECHAR **ppStringsBuffer);
    274   END_INTERFACE
    275 } ISQLServerErrorInfoVtbl;
    276 struct ISQLServerErrorInfo {
    277   CONST_VTBL struct ISQLServerErrorInfoVtbl *lpVtbl;
    278 };
    279 #ifdef COBJMACROS
    280 #define ISQLServerErrorInfo_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
    281 #define ISQLServerErrorInfo_AddRef(This) (This)->lpVtbl->AddRef(This)
    282 #define ISQLServerErrorInfo_Release(This) (This)->lpVtbl->Release(This)
    283 #define ISQLServerErrorInfo_GetErrorInfo(This,ppErrorInfo,ppStringsBuffer) (This)->lpVtbl->GetErrorInfo(This,ppErrorInfo,ppStringsBuffer)
    284 #endif
    285 #endif
    286 #endif
    287 
    288 #ifndef __IRowsetFastLoad_INTERFACE_DEFINED__
    289 #define __IRowsetFastLoad_INTERFACE_DEFINED__
    290 
    291 EXTERN_C const IID IID_IRowsetFastLoad;
    292 
    293 #if defined(__cplusplus) && !defined(CINTERFACE)
    294 struct IRowsetFastLoad : public IUnknown {
    295 public:
    296   virtual HRESULT WINAPI InsertRow(HACCESSOR hAccessor, void *pData) = 0;
    297   virtual HRESULT WINAPI Commit(BOOL fDone) = 0;
    298 };
    299 #else
    300 typedef struct IRowsetFastLoadVtbl {
    301   BEGIN_INTERFACE
    302     HRESULT (WINAPI *QueryInterface)(IRowsetFastLoad *This, REFIID riid, void **ppvObject);
    303     ULONG (WINAPI *AddRef)(IRowsetFastLoad *This);
    304     ULONG (WINAPI *Release)(IRowsetFastLoad *This);
    305     HRESULT (WINAPI *InsertRow)(IRowsetFastLoad *This, HACCESSOR hAccessor, void *pData);
    306     HRESULT (WINAPI *Commit)(IRowsetFastLoad *This, BOOL fDone);
    307   END_INTERFACE
    308 } IRowsetFastLoadVtbl;
    309 struct IRowsetFastLoad {
    310   CONST_VTBL struct IRowsetFastLoadVtbl *lpVtbl;
    311 };
    312 #ifdef COBJMACROS
    313 #define IRowsetFastLoad_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
    314 #define IRowsetFastLoad_AddRef(This) (This)->lpVtbl->AddRef(This)
    315 #define IRowsetFastLoad_Release(This) (This)->lpVtbl->Release(This)
    316 #define IRowsetFastLoad_InsertRow(This,hAccessor,pData) (This)->lpVtbl->InsertRow(This,hAccessor,pData)
    317 #define IRowsetFastLoad_Commit(This,fDone) (This)->lpVtbl->Commit(This,fDone)
    318 #endif
    319 #endif
    320 #endif
    321 
    322 #include <pshpack8.h>
    323 
    324 typedef struct tagDBTIME2 {
    325   USHORT hour;
    326   USHORT minute;
    327   USHORT second;
    328   ULONG fraction;
    329 } DBTIME2;
    330 
    331 typedef struct tagDBTIMESTAMPOFFSET {
    332   SHORT year;
    333   USHORT month;
    334   USHORT day;
    335   USHORT hour;
    336   USHORT minute;
    337   USHORT second;
    338   ULONG fraction;
    339   SHORT timezone_hour;
    340   SHORT timezone_minute;
    341 } DBTIMESTAMPOFFSET;
    342 
    343 #include <poppack.h>
    344 
    345 /* The original msoledbsql.h header uses a Microsoft-specific "extension" which
    346  * allows Microsoft Visual C++ compiler to ignore the [class.union.anon]'s first
    347  * paragraph in the standard for C++.  To allow to use other compilers for this
    348  * header, we have to alter declaration the original `SSVARIANT` structure and
    349  * move declarations of some `struct`s out of the anonymous union inside the
    350  * `SSVARIANT` in the code below (yes -- breaking public API of the original
    351  * header).  Moreover, we must place those moved declarations in different
    352  * locations for C and C++ code.  To avoid code duplication we use the
    353  * `MSOLEDBSQL_H_DECL_SSVARIANT_STRUCTS` macro. */
    354 #define MSOLEDBSQL_H_DECL_SSVARIANT_STRUCTS \
    355     struct _Time2Val { \
    356       DBTIME2 tTime2Val; \
    357       BYTE bScale; \
    358     }; \
    359     struct _DateTimeVal { \
    360       DBTIMESTAMP tsDateTimeVal; \
    361       BYTE bScale; \
    362     }; \
    363     struct _DateTimeOffsetVal { \
    364       DBTIMESTAMPOFFSET tsoDateTimeOffsetVal; \
    365       BYTE bScale; \
    366     }; \
    367     struct _NCharVal { \
    368       SHORT sActualLength; \
    369       SHORT sMaxLength; \
    370       WCHAR *pwchNCharVal; \
    371       BYTE rgbReserved[5]; \
    372       DWORD dwReserved; \
    373       WCHAR *pwchReserved; \
    374     }; \
    375     struct _CharVal { \
    376       SHORT sActualLength; \
    377       SHORT sMaxLength; \
    378       CHAR *pchCharVal; \
    379       BYTE rgbReserved[5]; \
    380       DWORD dwReserved; \
    381       WCHAR *pwchReserved; \
    382     }; \
    383     struct _BinaryVal { \
    384       SHORT sActualLength; \
    385       SHORT sMaxLength; \
    386       BYTE *prgbBinaryVal; \
    387       DWORD dwReserved; \
    388     }; \
    389     struct _UnknownType { \
    390       DWORD dwActualLength; \
    391       BYTE rgMetadata[16]; \
    392       BYTE *pUnknownData; \
    393     }; \
    394     struct _BLOBType { \
    395       DBOBJECT dbobj; \
    396       IUnknown *pUnk; \
    397     };
    398 /* As it's already mentioned the original msoledbsql.h header defines members of
    399  * the `SSVARIANT::{unnamed union}` of structure types specifying those types
    400  * directly at the member definitions, which is fine for C, but not for C++ (see
    401  * commentaries above).  Therefore, we have to separate declaration of those
    402  * structure types from the definition of the union's members.
    403  * For C code (`-x c`/`-Tc`) we can't declare the structure types directly
    404  * inside definition of the `SSVARIANT` type.  Because: a) some C compilers know
    405  * about `-fms-extensions` option, and if the latter was specified when invoking
    406  * such compiler, a structure type declared within an enclosing structure type
    407  * becomes anonymous structure (changing memory layout of the enclosing `struct`
    408  * and disallowing several "nested" structure to have fields of the same name);
    409  * b) for all other C compilers there is no much sense to declare "nested"
    410  * structure types within an enclosing one, because semantically it declares all
    411  * those "nested" structure types at scope where this header is included (6.2.1
    412  * Scopes of identifiers). */
    413 #ifndef __cplusplus
    414   MSOLEDBSQL_H_DECL_SSVARIANT_STRUCTS
    415 #endif
    416 struct SSVARIANT {
    417   SSVARTYPE vt;
    418   DWORD dwReserved1;
    419   DWORD dwReserved2;
    420   /* For C++ code (`-x c++`/`-Tp`) we may move the declarations here.  This, at
    421    * least, limits scope of the declarations to the `SSVARIANT` structure, if we
    422    * compare declaration of the structures at the global scope (as it's made for
    423    * C code).  Both variants break public API of the original header file, but
    424    * unfortunately that's unavoidable. */
    425 #ifdef __cplusplus
    426   MSOLEDBSQL_H_DECL_SSVARIANT_STRUCTS
    427 #endif
    428   union {
    429     BYTE bTinyIntVal;
    430     SHORT sShortIntVal;
    431     LONG lIntVal;
    432     LONGLONG llBigIntVal;
    433     FLOAT fltRealVal;
    434     DOUBLE dblFloatVal;
    435     CY cyMoneyVal;
    436     VARIANT_BOOL fBitVal;
    437     BYTE rgbGuidVal[16];
    438     DB_NUMERIC numNumericVal;
    439     DBDATE dDateVal;
    440     DBTIMESTAMP tsDateTimeVal;
    441     struct _Time2Val Time2Val;
    442     struct _DateTimeVal DateTimeVal;
    443     struct _DateTimeOffsetVal DateTimeOffsetVal;
    444     struct _NCharVal NCharVal;
    445     struct _CharVal CharVal;
    446     struct _BinaryVal BinaryVal;
    447     struct _UnknownType UnknownType;
    448     struct _BLOBType BLOBType;
    449   };
    450 };
    451 typedef DWORD LOCKMODE;
    452 
    453 enum LOCKMODEENUM {
    454   LOCKMODE_INVALID = 0, LOCKMODE_EXCLUSIVE = (LOCKMODE_INVALID + 1),
    455   LOCKMODE_SHARED = (LOCKMODE_EXCLUSIVE + 1)
    456 };
    457 
    458 extern RPC_IF_HANDLE __MIDL_itf_msoledbsql_0000_0004_v0_0_c_ifspec;
    459 extern RPC_IF_HANDLE __MIDL_itf_msoledbsql_0000_0004_v0_0_s_ifspec;
    460 
    461 #ifndef __ISchemaLock_INTERFACE_DEFINED__
    462 #define __ISchemaLock_INTERFACE_DEFINED__
    463 
    464 EXTERN_C const IID IID_ISchemaLock;
    465 
    466 #if defined(__cplusplus) && !defined(CINTERFACE)
    467 struct ISchemaLock : public IUnknown {
    468 public:
    469   virtual HRESULT WINAPI GetSchemaLock(DBID *pTableID, LOCKMODE lmMode, HANDLE *phLockHandle, ULONGLONG *pTableVersion) = 0;
    470   virtual HRESULT WINAPI ReleaseSchemaLock(HANDLE hLockHandle) = 0;
    471 };
    472 #else
    473 typedef struct ISchemaLockVtbl {
    474   BEGIN_INTERFACE
    475     HRESULT (WINAPI *QueryInterface)(ISchemaLock *This, REFIID riid, void **ppvObject);
    476     ULONG (WINAPI *AddRef)(ISchemaLock *This);
    477     ULONG (WINAPI *Release)(ISchemaLock *This);
    478     HRESULT (WINAPI *GetSchemaLock)(ISchemaLock *This, DBID *pTableID, LOCKMODE lmMode, HANDLE *phLockHandle, ULONGLONG *pTableVersion);
    479     HRESULT (WINAPI *ReleaseSchemaLock)(ISchemaLock *This, HANDLE hLockHandle);
    480   END_INTERFACE
    481 } ISchemaLockVtbl;
    482 struct ISchemaLock {
    483   CONST_VTBL struct ISchemaLockVtbl *lpVtbl;
    484 };
    485 #ifdef COBJMACROS
    486 #define ISchemaLock_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
    487 #define ISchemaLock_AddRef(This) (This)->lpVtbl->AddRef(This)
    488 #define ISchemaLock_Release(This) (This)->lpVtbl->Release(This)
    489 #define ISchemaLock_GetSchemaLock(This,pTableID,lmMode,phLockHandle,pTableVersion) (This)->lpVtbl->GetSchemaLock(This,pTableID,lmMode,phLockHandle,pTableVersion)
    490 #define ISchemaLock_ReleaseSchemaLock(This,hLockHandle) (This)->lpVtbl->ReleaseSchemaLock(This,hLockHandle)
    491 #endif
    492 #endif
    493 #endif
    494 
    495 #ifndef __IBCPSession_INTERFACE_DEFINED__
    496 #define __IBCPSession_INTERFACE_DEFINED__
    497 
    498 EXTERN_C const IID IID_IBCPSession;
    499 
    500 #if defined(__cplusplus) && !defined(CINTERFACE)
    501 struct IBCPSession : public IUnknown {
    502 public:
    503   virtual HRESULT WINAPI BCPColFmt(DBORDINAL idxUserDataCol, int eUserDataType, int cbIndicator, int cbUserData, BYTE *pbUserDataTerm, int cbUserDataTerm, DBORDINAL idxServerCol) = 0;
    504   virtual HRESULT WINAPI BCPColumns(DBCOUNTITEM nColumns) = 0;
    505   virtual HRESULT WINAPI BCPControl(int eOption, void *iValue) = 0;
    506   virtual HRESULT WINAPI BCPDone(void) = 0;
    507   virtual HRESULT WINAPI BCPExec(DBROWCOUNT *pRowsCopied) = 0;
    508   virtual HRESULT WINAPI BCPInit(const wchar_t *pwszTable, const wchar_t *pwszDataFile, const wchar_t *pwszErrorFile, int eDirection) = 0;
    509   virtual HRESULT WINAPI BCPReadFmt(const wchar_t *pwszFormatFile) = 0;
    510   virtual HRESULT WINAPI BCPWriteFmt(const wchar_t *pwszFormatFile) = 0;
    511 };
    512 #else
    513 typedef struct IBCPSessionVtbl {
    514   BEGIN_INTERFACE
    515     HRESULT (WINAPI *QueryInterface)(IBCPSession *This, REFIID riid, void **ppvObject);
    516     ULONG (WINAPI *AddRef)(IBCPSession *This);
    517     ULONG (WINAPI *Release)(IBCPSession *This);
    518     HRESULT (WINAPI *BCPColFmt)(IBCPSession *This, DBORDINAL idxUserDataCol, int eUserDataType, int cbIndicator, int cbUserData, BYTE *pbUserDataTerm, int cbUserDataTerm, DBORDINAL idxServerCol);
    519     HRESULT (WINAPI *BCPColumns)(IBCPSession *This, DBCOUNTITEM nColumns);
    520     HRESULT (WINAPI *BCPControl)(IBCPSession *This, int eOption, void *iValue);
    521     HRESULT (WINAPI *BCPDone)(IBCPSession *This);
    522     HRESULT (WINAPI *BCPExec)(IBCPSession *This, DBROWCOUNT *pRowsCopied);
    523     HRESULT (WINAPI *BCPInit)(IBCPSession *This, const wchar_t *pwszTable, const wchar_t *pwszDataFile, const wchar_t *pwszErrorFile, int eDirection);
    524     HRESULT (WINAPI *BCPReadFmt)(IBCPSession *This, const wchar_t *pwszFormatFile);
    525     HRESULT (WINAPI *BCPWriteFmt)(IBCPSession *This, const wchar_t *pwszFormatFile);
    526   END_INTERFACE
    527 } IBCPSessionVtbl;
    528 struct IBCPSession {
    529   CONST_VTBL struct IBCPSessionVtbl *lpVtbl;
    530 };
    531 #ifdef COBJMACROS
    532 #define IBCPSession_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
    533 #define IBCPSession_AddRef(This) (This)->lpVtbl->AddRef(This)
    534 #define IBCPSession_Release(This) (This)->lpVtbl->Release(This)
    535 #define IBCPSession_BCPColFmt(This,idxUserDataCol,eUserDataType,cbIndicator,cbUserData,pbUserDataTerm,cbUserDataTerm,idxServerCol) (This)->lpVtbl->BCPColFmt(This,idxUserDataCol,eUserDataType,cbIndicator,cbUserData,pbUserDataTerm,cbUserDataTerm,idxServerCol)
    536 #define IBCPSession_BCPColumns(This,nColumns) (This)->lpVtbl->BCPColumns(This,nColumns)
    537 #define IBCPSession_BCPControl(This,eOption,iValue) (This)->lpVtbl->BCPControl(This,eOption,iValue)
    538 #define IBCPSession_BCPDone(This) (This)->lpVtbl->BCPDone(This)
    539 #define IBCPSession_BCPExec(This,pRowsCopied) (This)->lpVtbl->BCPExec(This,pRowsCopied)
    540 #define IBCPSession_BCPInit(This,pwszTable,pwszDataFile,pwszErrorFile,eDirection) (This)->lpVtbl->BCPInit(This,pwszTable,pwszDataFile,pwszErrorFile,eDirection)
    541 #define IBCPSession_BCPReadFmt(This,pwszFormatFile) (This)->lpVtbl->BCPReadFmt(This,pwszFormatFile)
    542 #define IBCPSession_BCPWriteFmt(This,pwszFormatFile) (This)->lpVtbl->BCPWriteFmt(This,pwszFormatFile)
    543 #endif
    544 #endif
    545 #endif
    546 
    547 #ifndef __IBCPSession2_INTERFACE_DEFINED__
    548 #define __IBCPSession2_INTERFACE_DEFINED__
    549 
    550 EXTERN_C const IID IID_IBCPSession2;
    551 
    552 #if defined(__cplusplus) && !defined(CINTERFACE)
    553 struct IBCPSession2 : public IBCPSession {
    554 public:
    555   virtual HRESULT WINAPI BCPSetBulkMode(int property, void *pField, int cbField, void *pRow, int cbRow) = 0;
    556 };
    557 #else
    558 typedef struct IBCPSession2Vtbl {
    559   BEGIN_INTERFACE
    560     HRESULT (WINAPI *QueryInterface)(IBCPSession2 *This, REFIID riid, void **ppvObject);
    561     ULONG (WINAPI *AddRef)(IBCPSession2 *This);
    562     ULONG (WINAPI *Release)(IBCPSession2 *This);
    563     HRESULT (WINAPI *BCPColFmt)(IBCPSession2 *This, DBORDINAL idxUserDataCol, int eUserDataType, int cbIndicator, int cbUserData, BYTE *pbUserDataTerm, int cbUserDataTerm, DBORDINAL idxServerCol);
    564     HRESULT (WINAPI *BCPColumns)(IBCPSession2 *This, DBCOUNTITEM nColumns);
    565     HRESULT (WINAPI *BCPControl)(IBCPSession2 *This, int eOption, void *iValue);
    566     HRESULT (WINAPI *BCPDone)(IBCPSession2 *This);
    567     HRESULT (WINAPI *BCPExec)(IBCPSession2 *This, DBROWCOUNT *pRowsCopied);
    568     HRESULT (WINAPI *BCPInit)(IBCPSession2 *This, const wchar_t *pwszTable, const wchar_t *pwszDataFile, const wchar_t *pwszErrorFile, int eDirection);
    569     HRESULT (WINAPI *BCPReadFmt)(IBCPSession2 *This, const wchar_t *pwszFormatFile);
    570     HRESULT (WINAPI *BCPWriteFmt)(IBCPSession2 *This, const wchar_t *pwszFormatFile);
    571     HRESULT (WINAPI *BCPSetBulkMode)(IBCPSession2 *This, int property, void *pField, int cbField, void *pRow, int cbRow);
    572   END_INTERFACE
    573 } IBCPSession2Vtbl;
    574 struct IBCPSession2 {
    575   CONST_VTBL struct IBCPSession2Vtbl *lpVtbl;
    576 };
    577 #ifdef COBJMACROS
    578 #define IBCPSession2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
    579 #define IBCPSession2_AddRef(This) (This)->lpVtbl->AddRef(This)
    580 #define IBCPSession2_Release(This) (This)->lpVtbl->Release(This)
    581 #define IBCPSession2_BCPColFmt(This,idxUserDataCol,eUserDataType,cbIndicator,cbUserData,pbUserDataTerm,cbUserDataTerm,idxServerCol) (This)->lpVtbl->BCPColFmt(This,idxUserDataCol,eUserDataType,cbIndicator,cbUserData,pbUserDataTerm,cbUserDataTerm,idxServerCol)
    582 #define IBCPSession2_BCPColumns(This,nColumns) (This)->lpVtbl->BCPColumns(This,nColumns)
    583 #define IBCPSession2_BCPControl(This,eOption,iValue) (This)->lpVtbl->BCPControl(This,eOption,iValue)
    584 #define IBCPSession2_BCPDone(This) (This)->lpVtbl->BCPDone(This)
    585 #define IBCPSession2_BCPExec(This,pRowsCopied) (This)->lpVtbl->BCPExec(This,pRowsCopied)
    586 #define IBCPSession2_BCPInit(This,pwszTable,pwszDataFile,pwszErrorFile,eDirection) (This)->lpVtbl->BCPInit(This,pwszTable,pwszDataFile,pwszErrorFile,eDirection)
    587 #define IBCPSession2_BCPReadFmt(This,pwszFormatFile) (This)->lpVtbl->BCPReadFmt(This,pwszFormatFile)
    588 #define IBCPSession2_BCPWriteFmt(This,pwszFormatFile) (This)->lpVtbl->BCPWriteFmt(This,pwszFormatFile)
    589 #define IBCPSession2_BCPSetBulkMode(This,property,pField,cbField,pRow,cbRow) (This,property,pField,cbField,pRow,cbRow)
    590 #endif
    591 #endif
    592 #endif
    593 #endif /* not _SQLOLEDB_H_ */
    594 
    595 #define ISOLATIONLEVEL_SNAPSHOT ((ISOLATIONLEVEL)(0x01000000))
    596 #define DBPROPVAL_TI_SNAPSHOT 0x01000000L
    597 
    598 extern RPC_IF_HANDLE __MIDL_itf_msoledbsql_0000_0007_v0_0_c_ifspec;
    599 extern RPC_IF_HANDLE __MIDL_itf_msoledbsql_0000_0007_v0_0_s_ifspec;
    600 
    601 #ifndef __ISSAbort_INTERFACE_DEFINED__
    602 #define __ISSAbort_INTERFACE_DEFINED__
    603 
    604 EXTERN_C const IID IID_ISSAbort;
    605 
    606 #if defined(__cplusplus) && !defined(CINTERFACE)
    607 struct ISSAbort : public IUnknown {
    608 public:
    609   virtual HRESULT WINAPI Abort(void) = 0;
    610 };
    611 #else
    612 typedef struct ISSAbortVtbl {
    613   BEGIN_INTERFACE
    614     HRESULT (WINAPI *QueryInterface)(ISSAbort *This, REFIID riid, void **ppvObject);
    615     ULONG (WINAPI *AddRef)(ISSAbort *This);
    616     ULONG (WINAPI *Release)(ISSAbort *This);
    617     HRESULT (WINAPI *Abort)(ISSAbort *This);
    618   END_INTERFACE
    619 } ISSAbortVtbl;
    620 struct ISSAbort {
    621   CONST_VTBL struct ISSAbortVtbl *lpVtbl;
    622 };
    623 #ifdef COBJMACROS
    624 #define ISSAbort_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
    625 #define ISSAbort_AddRef(This) (This)->lpVtbl->AddRef(This)
    626 #define ISSAbort_Release(This) (This)->lpVtbl->Release(This)
    627 #define ISSAbort_Abort(This) (This)->lpVtbl->Abort(This)
    628 #endif
    629 #endif
    630 #endif
    631 
    632 enum DBBINDFLAGENUM90 {
    633   DBBINDFLAG_OBJECT = 0x2
    634 };
    635 
    636 enum SSACCESSORFLAGS {
    637   SSACCESSOR_ROWDATA = 0x100
    638 };
    639 
    640 enum DBPROPFLAGSENUM90 {
    641   DBPROPFLAGS_PARAMETER = 0x10000
    642 };
    643 
    644 typedef struct tagSSPARAMPROPS {
    645   DBORDINAL iOrdinal;
    646   ULONG cPropertySets;
    647   DBPROPSET *rgPropertySets;
    648 } SSPARAMPROPS;
    649 
    650 extern RPC_IF_HANDLE __MIDL_itf_msoledbsql_0000_0008_v0_0_c_ifspec;
    651 extern RPC_IF_HANDLE __MIDL_itf_msoledbsql_0000_0008_v0_0_s_ifspec;
    652 
    653 #ifndef __ISSCommandWithParameters_INTERFACE_DEFINED__
    654 #define __ISSCommandWithParameters_INTERFACE_DEFINED__
    655 
    656 EXTERN_C const IID IID_ISSCommandWithParameters;
    657 
    658 #if defined(__cplusplus) && !defined(CINTERFACE)
    659 struct ISSCommandWithParameters : public ICommandWithParameters {
    660 public:
    661   virtual HRESULT WINAPI GetParameterProperties(DB_UPARAMS *pcParams, SSPARAMPROPS **prgParamProperties) = 0;
    662   virtual HRESULT WINAPI SetParameterProperties(DB_UPARAMS cParams, SSPARAMPROPS rgParamProperties[]) = 0;
    663 };
    664 #else
    665 typedef struct ISSCommandWithParametersVtbl {
    666   BEGIN_INTERFACE
    667     HRESULT (WINAPI *QueryInterface)(ISSCommandWithParameters *This, REFIID riid, void **ppvObject);
    668     ULONG (WINAPI *AddRef)(ISSCommandWithParameters *This);
    669     ULONG (WINAPI *Release)(ISSCommandWithParameters *This);
    670     HRESULT (WINAPI *GetParameterInfo)(ISSCommandWithParameters *This, DB_UPARAMS *pcParams, DBPARAMINFO **prgParamInfo, OLECHAR **ppNamesBuffer);
    671     HRESULT (WINAPI *MapParameterNames)(ISSCommandWithParameters *This, DB_UPARAMS cParamNames, const OLECHAR *rgParamNames[], DB_LPARAMS rgParamOrdinals[]);
    672     HRESULT (WINAPI *SetParameterInfo)(ISSCommandWithParameters *This, DB_UPARAMS cParams, const DB_UPARAMS rgParamOrdinals[], const DBPARAMBINDINFO rgParamBindInfo[]);
    673     HRESULT (WINAPI *GetParameterProperties)(ISSCommandWithParameters *This, DB_UPARAMS *pcParams, SSPARAMPROPS **prgParamProperties);
    674     HRESULT (WINAPI *SetParameterProperties)(ISSCommandWithParameters *This, DB_UPARAMS cParams, SSPARAMPROPS rgParamProperties[]);
    675   END_INTERFACE
    676 } ISSCommandWithParametersVtbl;
    677 struct ISSCommandWithParameters {
    678   CONST_VTBL struct ISSCommandWithParametersVtbl *lpVtbl;
    679 };
    680 #ifdef COBJMACROS
    681 #define ISSCommandWithParameters_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
    682 #define ISSCommandWithParameters_AddRef(This) (This)->lpVtbl->AddRef(This)
    683 #define ISSCommandWithParameters_Release(This) (This)->lpVtbl->Release(This)
    684 #define ISSCommandWithParameters_GetParameterInfo(This,pcParams,prgParamInfo,ppNamesBuffer) (This)->lpVtbl->GetParameterInfo(This,pcParams,prgParamInfo,ppNamesBuffer)
    685 #define ISSCommandWithParameters_MapParameterNames(This,cParamNames,rgParamNames,rgParamOrdinals) (This)->lpVtbl->MapParameterNames(This,cParamNames,rgParamNames,rgParamOrdinals)
    686 #define ISSCommandWithParameters_SetParameterInfo(This,cParams,rgParamOrdinals,rgParamBindInfo) (This)->lpVtbl->SetParameterInfo(This,cParams,rgParamOrdinals,rgParamBindInfo)
    687 #define ISSCommandWithParameters_GetParameterProperties(This,pcParams,prgParamProperties) (This)->lpVtbl->GetParameterProperties(This,pcParams,prgParamProperties)
    688 #define ISSCommandWithParameters_SetParameterProperties(This,cParams,rgParamProperties) (This)->lpVtbl->SetParameterProperties(This,cParams,rgParamProperties)
    689 #endif
    690 #endif
    691 #endif
    692 
    693 #ifndef __IDBAsynchStatus_INTERFACE_DEFINED__
    694 #define __IDBAsynchStatus_INTERFACE_DEFINED__
    695 
    696 EXTERN_C const IID IID_IDBAsynchStatus;
    697 
    698 #if defined(__cplusplus) && !defined(CINTERFACE)
    699 struct IDBAsynchStatus : public IUnknown {
    700 public:
    701   virtual HRESULT WINAPI Abort(HCHAPTER hChapter, DBASYNCHOP eOperation) = 0;
    702   virtual HRESULT WINAPI GetStatus(HCHAPTER hChapter, DBASYNCHOP eOperation, DBCOUNTITEM *pulProgress, DBCOUNTITEM *pulProgressMax, DBASYNCHPHASE *peAsynchPhase, LPOLESTR *ppwszStatusText) = 0;
    703 };
    704 #else
    705 typedef struct IDBAsynchStatusVtbl {
    706   BEGIN_INTERFACE
    707     HRESULT (WINAPI *QueryInterface)(IDBAsynchStatus *This, REFIID riid, void **ppvObject);
    708     ULONG (WINAPI *AddRef)(IDBAsynchStatus *This);
    709     ULONG (WINAPI *Release)(IDBAsynchStatus *This);
    710     HRESULT (WINAPI *Abort)(IDBAsynchStatus *This, HCHAPTER hChapter, DBASYNCHOP eOperation);
    711     HRESULT (WINAPI *GetStatus)(IDBAsynchStatus *This, HCHAPTER hChapter, DBASYNCHOP eOperation, DBCOUNTITEM *pulProgress, DBCOUNTITEM *pulProgressMax, DBASYNCHPHASE *peAsynchPhase, LPOLESTR *ppwszStatusText);
    712   END_INTERFACE
    713 } IDBAsynchStatusVtbl;
    714 struct IDBAsynchStatus {
    715   CONST_VTBL struct IDBAsynchStatusVtbl *lpVtbl;
    716 };
    717 #ifdef COBJMACROS
    718 #define IDBAsynchStatus_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
    719 #define IDBAsynchStatus_AddRef(This) (This)->lpVtbl->AddRef(This)
    720 #define IDBAsynchStatus_Release(This) (This)->lpVtbl->Release(This)
    721 #define IDBAsynchStatus_Abort(This,hChapter,eOperation) (This)->lpVtbl->Abort(This,hChapter,eOperation)
    722 #define IDBAsynchStatus_GetStatus(This,hChapter,eOperation,pulProgress,pulProgressMax,peAsynchPhase,ppwszStatusText) (This)->lpVtbl->GetStatus(This,hChapter,eOperation,pulProgress,pulProgressMax,peAsynchPhase,ppwszStatusText)
    723 #endif
    724 #endif
    725 
    726 HRESULT WINAPI IDBAsynchStatus_RemoteAbort_Proxy(IDBAsynchStatus *This, HCHAPTER hChapter, DBASYNCHOP eOperation, IErrorInfo **ppErrorInfoRem);
    727 void __RPC_STUB IDBAsynchStatus_RemoteAbort_Stub(IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase);
    728 HRESULT WINAPI IDBAsynchStatus_RemoteGetStatus_Proxy(IDBAsynchStatus *This, HCHAPTER hChapter, DBASYNCHOP eOperation, DBCOUNTITEM *pulProgress, DBCOUNTITEM *pulProgressMax, DBASYNCHPHASE *peAsynchPhase, LPOLESTR *ppwszStatusText, IErrorInfo **ppErrorInfoRem);
    729 void __RPC_STUB IDBAsynchStatus_RemoteGetStatus_Stub(IRpcStubBuffer *This, IRpcChannelBuffer *_pRpcChannelBuffer, PRPC_MESSAGE _pRpcMessage, DWORD *_pdwStubPhase);
    730 #endif
    731 
    732 #ifndef __ISSAsynchStatus_INTERFACE_DEFINED__
    733 #define __ISSAsynchStatus_INTERFACE_DEFINED__
    734 
    735 EXTERN_C const IID IID_ISSAsynchStatus;
    736 
    737 #if defined(__cplusplus) && !defined(CINTERFACE)
    738 struct ISSAsynchStatus : public IDBAsynchStatus {
    739 public:
    740   virtual HRESULT WINAPI WaitForAsynchCompletion(DWORD dwMillisecTimeOut) = 0;
    741 };
    742 #else
    743 typedef struct ISSAsynchStatusVtbl {
    744   BEGIN_INTERFACE
    745     HRESULT (WINAPI *QueryInterface)(ISSAsynchStatus *This, REFIID riid, void **ppvObject);
    746     ULONG (WINAPI *AddRef)(ISSAsynchStatus *This);
    747     ULONG (WINAPI *Release)(ISSAsynchStatus *This);
    748     HRESULT (WINAPI *Abort)(ISSAsynchStatus *This, HCHAPTER hChapter, DBASYNCHOP eOperation);
    749     HRESULT (WINAPI *GetStatus)(ISSAsynchStatus *This, HCHAPTER hChapter, DBASYNCHOP eOperation, DBCOUNTITEM *pulProgress, DBCOUNTITEM *pulProgressMax, DBASYNCHPHASE *peAsynchPhase, LPOLESTR *ppwszStatusText);
    750     HRESULT (WINAPI *WaitForAsynchCompletion)(ISSAsynchStatus *This, DWORD dwMillisecTimeOut);
    751   END_INTERFACE
    752 } ISSAsynchStatusVtbl;
    753 struct ISSAsynchStatus {
    754   CONST_VTBL struct ISSAsynchStatusVtbl *lpVtbl;
    755 };
    756 #ifdef COBJMACROS
    757 #define ISSAsynchStatus_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
    758 #define ISSAsynchStatus_AddRef(This) (This)->lpVtbl->AddRef(This)
    759 #define ISSAsynchStatus_Release(This) (This)->lpVtbl->Release(This)
    760 #define ISSAsynchStatus_Abort(This,hChapter,eOperation) (This)->lpVtbl->Abort(This,hChapter,eOperation)
    761 #define ISSAsynchStatus_GetStatus(This,hChapter,eOperation,pulProgress,pulProgressMax,peAsynchPhase,ppwszStatusText) (This)->lpVtbl->GetStatus(This,hChapter,eOperation,pulProgress,pulProgressMax,peAsynchPhase,ppwszStatusText)
    762 #define ISSAsynchStatus_WaitForAsynchCompletion(This,dwMillisecTimeOut) (This)->lpVtbl->WaitForAsynchCompletion(This,dwMillisecTimeOut)
    763 #endif
    764 #endif
    765 #endif
    766 
    767 #define TABLE_HAS_UPDATE_INSTEAD_OF_TRIGGER 0x00000001
    768 #define TABLE_HAS_DELETE_INSTEAD_OF_TRIGGER 0x00000002
    769 #define TABLE_HAS_INSERT_INSTEAD_OF_TRIGGER 0x00000004
    770 #define TABLE_HAS_AFTER_UPDATE_TRIGGER 0x00000008
    771 #define TABLE_HAS_AFTER_DELETE_TRIGGER 0x00000010
    772 #define TABLE_HAS_AFTER_INSERT_TRIGGER 0x00000020
    773 #define TABLE_HAS_CASCADE_UPDATE 0x00000040
    774 #define TABLE_HAS_CASCADE_DELETE 0x00000080
    775 
    776 #if (OLEDBVER >= 0x0210)
    777 #define DBPROP_INIT_GENERALTIMEOUT 0x11cL
    778 #endif
    779 
    780 #define SSPROP_ENABLEFASTLOAD 2
    781 #define SSPROP_ENABLEBULKCOPY 3
    782 #define SSPROP_UNICODELCID 2
    783 #define SSPROP_UNICODECOMPARISONSTYLE 3
    784 #define SSPROP_COLUMNLEVELCOLLATION 4
    785 #define SSPROP_CHARACTERSET 5
    786 #define SSPROP_SORTORDER 6
    787 #define SSPROP_CURRENTCOLLATION 7
    788 #define SSPROP_INTEGRATEDAUTHENTICATIONMETHOD 8
    789 #define SSPROP_MUTUALLYAUTHENTICATED 9
    790 #define SSPROP_INIT_CURRENTLANGUAGE 4
    791 #define SSPROP_INIT_NETWORKADDRESS 5
    792 #define SSPROP_INIT_NETWORKLIBRARY 6
    793 #define SSPROP_INIT_USEPROCFORPREP 7
    794 #define SSPROP_INIT_AUTOTRANSLATE 8
    795 #define SSPROP_INIT_PACKETSIZE 9
    796 #define SSPROP_INIT_APPNAME 10
    797 #define SSPROP_INIT_WSID 11
    798 #define SSPROP_INIT_FILENAME 12
    799 #define SSPROP_INIT_ENCRYPT 13
    800 #define SSPROP_AUTH_REPL_SERVER_NAME 14
    801 #define SSPROP_INIT_TAGCOLUMNCOLLATION 15
    802 #define SSPROP_INIT_MARSCONNECTION 16
    803 #define SSPROP_INIT_FAILOVERPARTNER 18
    804 #define SSPROP_AUTH_OLD_PASSWORD 19
    805 #define SSPROP_INIT_DATATYPECOMPATIBILITY 20
    806 #define SSPROP_INIT_TRUST_SERVER_CERTIFICATE 21
    807 #define SSPROP_INIT_SERVERSPN 22
    808 #define SSPROP_INIT_FAILOVERPARTNERSPN 23
    809 #define SSPROP_INIT_APPLICATIONINTENT 24
    810 #define SSPROP_INIT_MULTISUBNETFAILOVER 25
    811 #define SSPROP_INIT_USEFMTONLY 26
    812 #define SSPROPVAL_USEPROCFORPREP_OFF 0
    813 #define SSPROPVAL_USEPROCFORPREP_ON 1
    814 #define SSPROPVAL_USEPROCFORPREP_ON_DROP 2
    815 #define SSPROPVAL_DATATYPECOMPATIBILITY_SQL2000 80
    816 #define SSPROPVAL_DATATYPECOMPATIBILITY_DEFAULT 0
    817 #define SSPROP_QUOTEDCATALOGNAMES 2
    818 #define SSPROP_ALLOWNATIVEVARIANT 3
    819 #define SSPROP_SQLXMLXPROGID 4
    820 #define SSPROP_ASYNCH_BULKCOPY 5
    821 #define SSPROP_MAXBLOBLENGTH 8
    822 #define SSPROP_FASTLOADOPTIONS 9
    823 #define SSPROP_FASTLOADKEEPNULLS 10
    824 #define SSPROP_FASTLOADKEEPIDENTITY 11
    825 #define SSPROP_CURSORAUTOFETCH 12
    826 #define SSPROP_DEFERPREPARE 13
    827 #define SSPROP_IRowsetFastLoad 14
    828 #define SSPROP_QP_NOTIFICATION_TIMEOUT 17
    829 #define SSPROP_QP_NOTIFICATION_MSGTEXT 18
    830 #define SSPROP_QP_NOTIFICATION_OPTIONS 19
    831 #define SSPROP_NOCOUNT_STATUS 20
    832 #define SSPROP_COMPUTE_ID 21
    833 #define SSPROP_COLUMN_ID 22
    834 #define SSPROP_COMPUTE_BYLIST 23
    835 #define SSPROP_ISSAsynchStatus 24
    836 #define SSPROPVAL_DEFAULT_NOTIFICATION_TIMEOUT 432000
    837 #define SSPROPVAL_MAX_NOTIFICATION_TIMEOUT 0x7FFFFFFF
    838 #define MAX_NOTIFICATION_LEN 2000
    839 #define SSPROP_COL_COLLATIONNAME 14
    840 #define SSPROP_COL_UDT_CATALOGNAME 31
    841 #define SSPROP_COL_UDT_SCHEMANAME 32
    842 #define SSPROP_COL_UDT_NAME 33
    843 #define SSPROP_COL_XML_SCHEMACOLLECTION_CATALOGNAME 34
    844 #define SSPROP_COL_XML_SCHEMACOLLECTION_SCHEMANAME 35
    845 #define SSPROP_COL_XML_SCHEMACOLLECTIONNAME 36
    846 #define SSPROP_COL_COMPUTED 37
    847 #define SSPROP_STREAM_XMLROOT 19
    848 #define SSPROP_PARAM_XML_SCHEMACOLLECTION_CATALOGNAME 24
    849 #define SSPROP_PARAM_XML_SCHEMACOLLECTION_SCHEMANAME 25
    850 #define SSPROP_PARAM_XML_SCHEMACOLLECTIONNAME 26
    851 #define SSPROP_PARAM_UDT_CATALOGNAME 27
    852 #define SSPROP_PARAM_UDT_SCHEMANAME 28
    853 #define SSPROP_PARAM_UDT_NAME 29
    854 #define SSPROP_PARAM_TYPE_CATALOGNAME 38
    855 #define SSPROP_PARAM_TYPE_SCHEMANAME 39
    856 #define SSPROP_PARAM_TYPE_TYPENAME 40
    857 #define SSPROP_PARAM_TABLE_DEFAULT_COLUMNS 41
    858 #define SSPROP_PARAM_TABLE_COLUMN_SORT_ORDER 42
    859 #define SSPROP_INDEX_XML 1
    860 #define BCP_TYPE_DEFAULT 0x00
    861 #define BCP_TYPE_SQLTEXT 0x23
    862 #define BCP_TYPE_SQLVARBINARY 0x25
    863 #define BCP_TYPE_SQLINTN 0x26
    864 #define BCP_TYPE_SQLVARCHAR 0x27
    865 #define BCP_TYPE_SQLBINARY 0x2d
    866 #define BCP_TYPE_SQLIMAGE 0x22
    867 #define BCP_TYPE_SQLCHARACTER 0x2f
    868 #define BCP_TYPE_SQLINT1 0x30
    869 #define BCP_TYPE_SQLBIT 0x32
    870 #define BCP_TYPE_SQLINT2 0x34
    871 #define BCP_TYPE_SQLINT4 0x38
    872 #define BCP_TYPE_SQLMONEY 0x3c
    873 #define BCP_TYPE_SQLDATETIME 0x3d
    874 #define BCP_TYPE_SQLFLT8 0x3e
    875 #define BCP_TYPE_SQLFLTN 0x6d
    876 #define BCP_TYPE_SQLMONEYN 0x6e
    877 #define BCP_TYPE_SQLDATETIMN 0x6f
    878 #define BCP_TYPE_SQLFLT4 0x3b
    879 #define BCP_TYPE_SQLMONEY4 0x7a
    880 #define BCP_TYPE_SQLDATETIM4 0x3a
    881 #define BCP_TYPE_SQLDECIMAL 0x6a
    882 #define BCP_TYPE_SQLNUMERIC 0x6c
    883 #define BCP_TYPE_SQLUNIQUEID 0x24
    884 #define BCP_TYPE_SQLBIGCHAR 0xaf
    885 #define BCP_TYPE_SQLBIGVARCHAR 0xa7
    886 #define BCP_TYPE_SQLBIGBINARY 0xad
    887 #define BCP_TYPE_SQLBIGVARBINARY
    888 #define BCP_TYPE_SQLBITN 0x68
    889 #define BCP_TYPE_SQLNCHAR 0xef
    890 #define BCP_TYPE_SQLNVARCHAR 0xe7
    891 #define BCP_TYPE_SQLNTEXT 0x63
    892 #define BCP_TYPE_SQLDECIMALN 0x6a
    893 #define BCP_TYPE_SQLNUMERICN 0x6c
    894 #define BCP_TYPE_SQLINT8 0x7f
    895 #define BCP_TYPE_SQLVARIANT 0x62
    896 #define BCP_TYPE_SQLUDT 0xf0
    897 #define BCP_TYPE_SQLXML 0xf1
    898 #define BCP_TYPE_SQLDATE 0x28
    899 #define BCP_TYPE_SQLTIME 0x29
    900 #define BCP_TYPE_SQLDATETIME2 0x2a
    901 #define BCP_TYPE_SQLDATETIMEOFFSET 0x2b
    902 #define BCP_DIRECTION_IN 1
    903 #define BCP_DIRECTION_OUT 2
    904 #define BCP_OPTION_MAXERRS 1
    905 #define BCP_OPTION_FIRST 2
    906 #define BCP_OPTION_LAST 3
    907 #define BCP_OPTION_BATCH 4
    908 #define BCP_OPTION_KEEPNULLS 5
    909 #define BCP_OPTION_ABORT 6
    910 #define BCP_OPTION_KEEPIDENTITY 8
    911 #define BCP_OPTION_HINTSA 10
    912 #define BCP_OPTION_HINTSW 11
    913 #define BCP_OPTION_FILECP 12
    914 #define BCP_OPTION_UNICODEFILE 13
    915 #define BCP_OPTION_TEXTFILE 14
    916 #define BCP_OPTION_FILEFMT 15
    917 #define BCP_OPTION_FMTXML 16
    918 #define BCP_OPTION_FIRSTEX 17
    919 #define BCP_OPTION_LASTEX 18
    920 #define BCP_OPTION_ROWCOUNT 19
    921 #define BCP_OPTION_DELAYREADFMT 20
    922 #define BCP_OUT_CHARACTER_MODE 0x01
    923 #define BCP_OUT_WIDE_CHARACTER_MODE 0x02
    924 #define BCP_OUT_NATIVE_TEXT_MODE 0x03
    925 #define BCP_OUT_NATIVE_MODE 0x04
    926 #define BCP_FILECP_ACP 0
    927 #define BCP_FILECP_OEMCP 1
    928 #define BCP_FILECP_RAW (-1)
    929 #ifdef UNICODE
    930 #define BCP_OPTION_HINTS BCP_OPTION_HINTSW
    931 #else
    932 #define BCP_OPTION_HINTS BCP_OPTION_HINTSA
    933 #endif
    934 #define BCP_PREFIX_DEFAULT (-10)
    935 #define BCP_LENGTH_NULL (-1)
    936 #define BCP_LENGTH_VARIABLE (-10)
    937 
    938 #if (MSOLEDBSQL_VER >= 1800)
    939 #ifdef DBINITCONSTANTS
    940 extern const GUID CLSID_MSOLEDBSQL = {0x5a23de84L,0x1d7b,0x4a16,{0x8d,0xed,0xb2,0x9c,0x9,0xcb,0x64,0x8d}};
    941 extern const GUID CLSID_MSOLEDBSQL_ERROR = {0xecab1ccbL,0x116a,0x4541,{0xad,0xba,0x69,0xc,0xeb,0x9c,0xc8,0x43}};
    942 extern const GUID CLSID_MSOLEDBSQL_ENUMERATOR = {0x720818d5L,0x1465,0x4812,{0x83,0x9f,0x9f,0x15,0xc3,0x8a,0x52,0xcb}};
    943 #else
    944 extern const GUID CLSID_MSOLEDBSQL;
    945 extern const GUID CLSID_MSOLEDBSQL_ERROR;
    946 extern const GUID CLSID_MSOLEDBSQL_ENUMERATOR;
    947 #endif
    948 #endif
    949 #ifdef DBINITCONSTANTS
    950 extern const GUID CLSID_ROWSET_TVP = {0xc7ef28d5L,0x7bee,0x443f,{0x86,0xda,0xe3,0x98,0x4f,0xcd,0x4d,0xf9}};
    951 #else
    952 extern const GUID CLSID_ROWSET_TVP;
    953 #endif
    954 
    955 #ifndef _SQLOLEDB_H_
    956 #ifdef DBINITCONSTANTS
    957 extern const GUID IID_ISQLServerErrorInfo = {0x5cf4ca12,0xef21,0x11d0,{0x97,0xe7,0x0,0xc0,0x4f,0xc2,0xad,0x98}};
    958 extern const GUID IID_IRowsetFastLoad = {0x5cf4ca13,0xef21,0x11d0,{0x97,0xe7,0x0,0xc0,0x4f,0xc2,0xad,0x98}};
    959 extern const GUID IID_IUMSInitialize = {0x5cf4ca14,0xef21,0x11d0,{0x97,0xe7,0x0,0xc0,0x4f,0xc2,0xad,0x98}};
    960 extern const GUID IID_ISchemaLock = {0x4c2389fb,0x2511,0x11d4,{0xb2,0x58,0x0,0xc0,0x4f,0x79,0x71,0xce}};
    961 extern const GUID IID_ISQLXMLHelper = {0xd22a7678L,0xf860,0x40cd,{0xa5,0x67,0x15,0x63,0xde,0xb4,0x6d,0x49}};
    962 #else
    963 extern const GUID IID_ISQLServerErrorInfo;
    964 extern const GUID IID_IRowsetFastLoad;
    965 extern const GUID IID_IUMSInitialize;
    966 extern const GUID IID_ISchemaLock;
    967 extern const GUID IID_ISQLXMLHelper;
    968 #endif
    969 #endif
    970 #ifdef DBINITCONSTANTS
    971 extern const GUID IID_ISSAbort = {0x5cf4ca15,0xef21,0x11d0,{0x97,0xe7,0x0,0xc0,0x4f,0xc2,0xad,0x98}};
    972 extern const GUID IID_IBCPSession = {0x88352D80,0x42D1,0x42f0,{0xA1,0x70,0xAB,0x0F,0x8B,0x45,0xB9,0x39}};
    973 extern const GUID IID_IBCPSession2 = {0xad79d3b6,0x59dd,0x46a3,{0xbf,0xc6,0xe6,0x2a,0x65,0xff,0x35,0x23}};
    974 extern const GUID IID_ISSCommandWithParameters = {0xeec30162,0x6087,0x467c,{0xb9,0x95,0x7c,0x52,0x3c,0xe9,0x65,0x61}};
    975 extern const GUID IID_ISSAsynchStatus = {0x1FF1F743,0x8BB0, 0x4c00,{0xAC,0xC4,0xC1,0x0E,0x43,0xB0,0x8F,0xC1}};
    976 #else
    977 extern const GUID IID_ISSAbort;
    978 extern const GUID IID_IBCPSession;
    979 extern const GUID IID_IBCPSession2;
    980 extern const GUID IID_ISSCommandWithParameters;
    981 extern const GUID IID_ISSAsynchStatus;
    982 #endif
    983 
    984 #ifndef _SQLOLEDB_H_
    985 #ifdef DBINITCONSTANTS
    986 extern const GUID DBSCHEMA_LINKEDSERVERS = {0x9093caf4,0x2eac,0x11d1,{0x98,0x9,0x0,0xc0,0x4f,0xc2,0xad,0x98}};
    987 #else
    988 extern const GUID DBSCHEMA_LINKEDSERVERS;
    989 #endif
    990 #endif
    991 #ifdef DBINITCONSTANTS
    992 extern const GUID DBSCHEMA_SQL_ASSEMBLIES = {0x7c1112c8, 0xc2d3, 0x4f6e, {0x94, 0x9a, 0x98, 0x3d, 0x38, 0xa5, 0x8f, 0x46}};
    993 extern const GUID DBSCHEMA_SQL_ASSEMBLY_DEPENDENCIES = {0xcb0f837b, 0x974c, 0x41b8, {0x90, 0x9d, 0x64, 0x9c, 0xaf, 0x45, 0xad, 0x2f}};
    994 extern const GUID DBSCHEMA_SQL_USER_TYPES = {0xf1198bd8, 0xa424, 0x4ea3, {0x8d, 0x4c, 0x60, 0x7e, 0xee, 0x2b, 0xab, 0x60}};
    995 extern const GUID DBSCHEMA_XML_COLLECTIONS = {0x56bfad8c, 0x6e8f, 0x480d, {0x91, 0xde, 0x35, 0x16, 0xd9, 0x9a, 0x5d, 0x10}};
    996 extern const GUID DBSCHEMA_SQL_TABLE_TYPES = {0x4e26cde7, 0xaaa4, 0x41ed, {0x93, 0xdd, 0x37, 0x6e, 0x6d, 0x40, 0x9c, 0x17}};
    997 extern const GUID DBSCHEMA_SQL_TABLE_TYPE_PRIMARY_KEYS = {0x9738faea, 0x31e8, 0x4f63, {0xae,  0xd, 0x61, 0x33, 0x16, 0x41, 0x8c, 0xdd}};
    998 extern const GUID DBSCHEMA_SQL_TABLE_TYPE_COLUMNS = {0xa663d94b, 0xddf7, 0x4a7f, {0xa5, 0x37, 0xd6, 0x1f, 0x12, 0x36, 0x5d, 0x7c}};
    999 extern const GUID DBSCHEMA_COLUMNS_EXTENDED = {0x66462f01, 0x633a, 0x44d9, {0xb0, 0xd0, 0xfe, 0x66, 0xf2, 0x1a, 0x0d, 0x24}};
   1000 extern const GUID DBSCHEMA_SPARSE_COLUMN_SET = {0x31a4837c, 0xf9ff, 0x405f, {0x89, 0x82, 0x02, 0x19, 0xaa, 0xaa, 0x4a, 0x12}};
   1001 #else
   1002 extern const GUID DBSCHEMA_SQL_ASSEMBLIES;
   1003 extern const GUID DBSCHEMA_SQL_ASSEMBLY_DEPENDENCIES;
   1004 extern const GUID DBSCHEMA_SQL_USER_TYPES;
   1005 extern const GUID DBSCHEMA_XML_COLLECTIONS;
   1006 extern const GUID DBSCHEMA_SQL_TABLE_TYPES;
   1007 extern const GUID DBSCHEMA_SQL_TABLE_TYPE_PRIMARY_KEYS;
   1008 extern const GUID DBSCHEMA_SQL_TABLE_TYPE_COLUMNS;
   1009 extern const GUID DBSCHEMA_COLUMNS_EXTENDED;
   1010 extern const GUID DBSCHEMA_SPARSE_COLUMN_SET;
   1011 #endif
   1012 
   1013 #ifndef CRESTRICTIONS_DBSCHEMA_LINKEDSERVERS
   1014 #define CRESTRICTIONS_DBSCHEMA_LINKEDSERVERS 1
   1015 #endif
   1016 #ifndef CRESTRICTIONS_DBSCHEMA_ASSEMBLIES
   1017 #define CRESTRICTIONS_DBSCHEMA_SQL_ASSEMBLIES 4
   1018 #endif
   1019 #ifndef CRESTRICTIONS_DBSCHEMA_ASSEMBLY_DEPENDENCIES
   1020 #define CRESTRICTIONS_DBSCHEMA_SQL_ASSEMBLY_DEPENDENCIES 4
   1021 #endif
   1022 #ifndef CRESTRICTIONS_DBSCHEMA_USER_TYPES
   1023 #define CRESTRICTIONS_DBSCHEMA_SQL_USER_TYPES 3
   1024 #endif
   1025 #ifndef CRESTRICTIONS_DBSCHEMA_XML_COLLECTIONS
   1026 #define CRESTRICTIONS_DBSCHEMA_XML_COLLECTIONS 4
   1027 #endif
   1028 #ifndef CRESTRICTIONS_DBSCHEMA_SQL_TABLE_TYPES
   1029 #define CRESTRICTIONS_DBSCHEMA_SQL_TABLE_TYPES 3
   1030 #endif
   1031 #ifndef CRESTRICTIONS_DBSCHEMA_SQL_TABLE_TYPE_PRIMARY_KEYS
   1032 #define CRESTRICTIONS_DBSCHEMA_SQL_TABLE_TYPE_PRIMARY_KEYS 3
   1033 #endif
   1034 #ifndef CRESTRICTIONS_DBSCHEMA_SQL_TABLE_TYPE_COLUMNS
   1035 #define CRESTRICTIONS_DBSCHEMA_SQL_TABLE_TYPE_COLUMNS 4
   1036 #endif
   1037 #ifndef CRESTRICTIONS_DBSCHEMA_COLUMNS_EXTENDED
   1038 #define CRESTRICTIONS_DBSCHEMA_COLUMNS_EXTENDED 4
   1039 #endif
   1040 #ifndef CRESTRICTIONS_DBSCHEMA_SPARSE_COLUMN_SET
   1041 #define CRESTRICTIONS_DBSCHEMA_SPARSE_COLUMN_SET 4
   1042 #endif
   1043 
   1044 #ifndef _SQLOLEDB_H_
   1045 extern const GUID OLEDBDECLSPEC DBPROPSET_SQLSERVERDATASOURCE = {0x28efaee4,0x2d2c,0x11d1,{0x98,0x7,0x0,0xc0,0x4f,0xc2,0xad,0x98}};
   1046 extern const GUID OLEDBDECLSPEC DBPROPSET_SQLSERVERDATASOURCEINFO= {0xdf10cb94,0x35f6,0x11d2,{0x9c,0x54,0x0,0xc0,0x4f,0x79,0x71,0xd3}};
   1047 extern const GUID OLEDBDECLSPEC DBPROPSET_SQLSERVERDBINIT = {0x5cf4ca10,0xef21,0x11d0,{0x97,0xe7,0x0,0xc0,0x4f,0xc2,0xad,0x98}};
   1048 extern const GUID OLEDBDECLSPEC DBPROPSET_SQLSERVERROWSET = {0x5cf4ca11,0xef21,0x11d0,{0x97,0xe7,0x0,0xc0,0x4f,0xc2,0xad,0x98}};
   1049 extern const GUID OLEDBDECLSPEC DBPROPSET_SQLSERVERSESSION = {0x28efaee5,0x2d2c,0x11d1,{0x98,0x7,0x0,0xc0,0x4f,0xc2,0xad,0x98}};
   1050 extern const GUID OLEDBDECLSPEC DBPROPSET_SQLSERVERCOLUMN = {0x3b63fb5e,0x3fbb,0x11d3,{0x9f,0x29,0x0,0xc0,0x4f,0x8e,0xe9,0xdc}};
   1051 extern const GUID OLEDBDECLSPEC DBPROPSET_SQLSERVERSTREAM = {0x9f79c073,0x8a6d,0x4bca,{0xa8,0xa8,0xc9,0xb7,0x9a,0x9b,0x96,0x2d}};
   1052 #endif
   1053 extern const GUID OLEDBDECLSPEC DBPROPSET_SQLSERVERPARAMETER = {0xfee09128,0xa67d,0x47ea,{0x8d,0x40,0x24,0xa1,0xd4,0x73,0x7e,0x8d}};
   1054 extern const GUID OLEDBDECLSPEC DBPROPSET_SQLSERVERINDEX = {0xE428B84E,0xA6B7,0x413a,{0x94,0x65,0x56,0x23,0x2E,0x0D,0x2B,0xEB}};
   1055 extern const GUID OLEDBDECLSPEC DBPROPSET_PARAMETERALL = {0x2cd2b7d8,0xe7c2,0x4f6c,{0x9b,0x30,0x75,0xe2,0x58,0x46,0x10,0x97}};
   1056 
   1057 #define DBCOLUMN_SS_X_GUID {0x627bd890,0xed54,0x11d2,{0xb9,0x94,0x0,0xc0,0x4f,0x8c,0xa8,0x2c}}
   1058 
   1059 #ifndef _SQLOLEDB_H_
   1060 extern const DBID OLEDBDECLSPEC DBCOLUMN_SS_COMPFLAGS = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)100};
   1061 extern const DBID OLEDBDECLSPEC DBCOLUMN_SS_SORTID = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)101};
   1062 extern const DBID OLEDBDECLSPEC DBCOLUMN_BASETABLEINSTANCE = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)102};
   1063 extern const DBID OLEDBDECLSPEC DBCOLUMN_SS_TDSCOLLATION = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)103};
   1064 #endif
   1065 extern const DBID OLEDBDECLSPEC DBCOLUMN_BASESERVERNAME = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)104};
   1066 extern const DBID OLEDBDECLSPEC DBCOLUMN_SS_XML_SCHEMACOLLECTION_CATALOGNAME = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)105};
   1067 extern const DBID OLEDBDECLSPEC DBCOLUMN_SS_XML_SCHEMACOLLECTION_SCHEMANAME = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)106};
   1068 extern const DBID OLEDBDECLSPEC DBCOLUMN_SS_XML_SCHEMACOLLECTIONNAME = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)107};
   1069 extern const DBID OLEDBDECLSPEC DBCOLUMN_SS_UDT_CATALOGNAME = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)108};
   1070 extern const DBID OLEDBDECLSPEC DBCOLUMN_SS_UDT_SCHEMANAME = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)109};
   1071 extern const DBID OLEDBDECLSPEC DBCOLUMN_SS_UDT_NAME = {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)110};
   1072 extern const DBID OLEDBDECLSPEC DBCOLUMN_SS_ASSEMBLY_TYPENAME= {DBCOLUMN_SS_X_GUID, DBKIND_GUID_PROPID, (LPOLESTR)111};
   1073 
   1074 #ifndef SQL_FILESTREAM_DEFINED
   1075 #define SQL_FILESTREAM_DEFINED
   1076 typedef enum _SQL_FILESTREAM_DESIRED_ACCESS {
   1077   SQL_FILESTREAM_READ = 0, SQL_FILESTREAM_WRITE = 1,
   1078   SQL_FILESTREAM_READWRITE = 2
   1079 } SQL_FILESTREAM_DESIRED_ACCESS;
   1080 #define SQL_FILESTREAM_OPEN_FLAG_ASYNC 0x00000001L
   1081 #define SQL_FILESTREAM_OPEN_FLAG_NO_BUFFERING 0x00000002L
   1082 #define SQL_FILESTREAM_OPEN_FLAG_NO_WRITE_THROUGH 0x00000004L
   1083 #define SQL_FILESTREAM_OPEN_FLAG_SEQUENTIAL_SCAN 0x00000008L
   1084 #define SQL_FILESTREAM_OPEN_FLAG_RANDOM_ACCESS 0x00000010L
   1085 HANDLE __stdcall OpenSqlFilestream(LPCWSTR FilestreamPath, SQL_FILESTREAM_DESIRED_ACCESS DesiredAccess, ULONG OpenOptions, LPBYTE FilestreamTransactionContext, SSIZE_T FilestreamTransactionContextLength, PLARGE_INTEGER AllocationSize);
   1086 #define FSCTL_SQL_FILESTREAM_FETCH_OLD_CONTENT CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 2392, METHOD_BUFFERED, FILE_ANY_ACCESS)
   1087 #endif
   1088 
   1089 #ifndef _SQLUSERINSTANCE_H_
   1090 #define _SQLUSERINSTANCE_H_
   1091 
   1092 #include <windows.h>
   1093 
   1094 #ifdef __cplusplus
   1095 extern "C" {
   1096 #endif
   1097 
   1098 #define LOCALDB_MAX_SQLCONNECTION_BUFFER_SIZE 260
   1099 typedef HRESULT __cdecl FnLocalDBCreateInstance(PCWSTR wszVersion, PCWSTR pInstanceName, DWORD dwFlags);
   1100 typedef FnLocalDBCreateInstance* PFnLocalDBCreateInstance;
   1101 typedef HRESULT __cdecl FnLocalDBStartInstance(PCWSTR pInstanceName, DWORD dwFlags, LPWSTR wszSqlConnection, LPDWORD lpcchSqlConnection);
   1102 typedef FnLocalDBStartInstance* PFnLocalDBStartInstance;
   1103 #define LOCALDB_TRUNCATE_ERR_MESSAGE 0x0001L
   1104 typedef HRESULT __cdecl FnLocalDBFormatMessage(HRESULT hrLocalDB, DWORD dwFlags, DWORD dwLanguageId, LPWSTR wszMessage, LPDWORD lpcchMessage);
   1105 typedef FnLocalDBFormatMessage* PFnLocalDBFormatMessage;
   1106 #define LOCALDB_ERROR_NOT_INSTALLED ((HRESULT)0x89C50116L)
   1107 FnLocalDBCreateInstance LocalDBCreateInstance;
   1108 FnLocalDBStartInstance LocalDBStartInstance;
   1109 typedef HRESULT __cdecl FnLocalDBStopInstance(PCWSTR pInstanceName, DWORD dwFlags, ULONG ulTimeout);
   1110 typedef FnLocalDBStopInstance* PFnLocalDBStopInstance;
   1111 #define LOCALDB_SHUTDOWN_KILL_PROCESS 0x0001L
   1112 #define LOCALDB_SHUTDOWN_WITH_NOWAIT 0x0002L
   1113 FnLocalDBStopInstance LocalDBStopInstance;
   1114 typedef HRESULT __cdecl FnLocalDBDeleteInstance(PCWSTR pInstanceName, DWORD dwFlags);
   1115 typedef FnLocalDBDeleteInstance* PFnLocalDBDeleteInstance;
   1116 FnLocalDBDeleteInstance LocalDBDeleteInstance;
   1117 FnLocalDBFormatMessage LocalDBFormatMessage;
   1118 #define MAX_LOCALDB_INSTANCE_NAME_LENGTH 128
   1119 #define MAX_LOCALDB_PARENT_INSTANCE_LENGTH MAX_INSTANCE_NAME
   1120 typedef WCHAR TLocalDBInstanceName[MAX_LOCALDB_INSTANCE_NAME_LENGTH + 1];
   1121 typedef TLocalDBInstanceName* PTLocalDBInstanceName;
   1122 typedef HRESULT __cdecl FnLocalDBGetInstances(PTLocalDBInstanceName pInstanceNames, LPDWORD lpdwNumberOfInstances);
   1123 typedef FnLocalDBGetInstances* PFnLocalDBGetInstances;
   1124 FnLocalDBGetInstances LocalDBGetInstances;
   1125 #define MAX_STRING_SID_LENGTH 186
   1126 
   1127 #pragma pack(push,8)
   1128 
   1129 typedef struct _LocalDBInstanceInfo {
   1130   DWORD cbLocalDBInstanceInfoSize;
   1131   TLocalDBInstanceName wszInstanceName;
   1132   BOOL bExists;
   1133   BOOL bConfigurationCorrupted;
   1134   BOOL bIsRunning;
   1135   DWORD dwMajor;
   1136   DWORD dwMinor;
   1137   DWORD dwBuild;
   1138   DWORD dwRevision;
   1139   FILETIME ftLastStartDateUTC;
   1140   WCHAR wszConnection[LOCALDB_MAX_SQLCONNECTION_BUFFER_SIZE];
   1141   BOOL bIsShared;
   1142   TLocalDBInstanceName wszSharedInstanceName;
   1143   WCHAR wszOwnerSID[MAX_STRING_SID_LENGTH + 1];
   1144   BOOL bIsAutomatic;
   1145 } LocalDBInstanceInfo;
   1146 
   1147 #pragma pack(pop)
   1148 
   1149 typedef LocalDBInstanceInfo* PLocalDBInstanceInfo;
   1150 typedef HRESULT __cdecl FnLocalDBGetInstanceInfo(PCWSTR wszInstanceName, PLocalDBInstanceInfo pInfo, DWORD cbInfo);
   1151 typedef FnLocalDBGetInstanceInfo* PFnLocalDBGetInstanceInfo;
   1152 FnLocalDBGetInstanceInfo LocalDBGetInstanceInfo;
   1153 #define MAX_LOCALDB_VERSION_LENGTH 43
   1154 typedef WCHAR TLocalDBVersion[MAX_LOCALDB_VERSION_LENGTH + 1];
   1155 typedef TLocalDBVersion* PTLocalDBVersion;
   1156 typedef HRESULT __cdecl FnLocalDBGetVersions(PTLocalDBVersion pVersions, LPDWORD lpdwNumberOfVersions);
   1157 typedef FnLocalDBGetVersions* PFnLocalDBGetVersions;
   1158 FnLocalDBGetVersions LocalDBGetVersions;
   1159 
   1160 #pragma pack(push,8)
   1161 
   1162 typedef struct _LocalDBVersionInfo {
   1163   DWORD cbLocalDBVersionInfoSize;
   1164   TLocalDBVersion wszVersion;
   1165   BOOL bExists;
   1166   DWORD dwMajor;
   1167   DWORD dwMinor;
   1168   DWORD dwBuild;
   1169   DWORD dwRevision;
   1170 } LocalDBVersionInfo;
   1171 
   1172 #pragma pack(pop)
   1173 
   1174 typedef LocalDBVersionInfo* PLocalDBVersionInfo;
   1175 typedef HRESULT __cdecl FnLocalDBGetVersionInfo(PCWSTR wszVersion, PLocalDBVersionInfo pVersionInfo, DWORD cbVersionInfo);
   1176 typedef FnLocalDBGetVersionInfo* PFnLocalDBGetVersionInfo;
   1177 FnLocalDBGetVersionInfo LocalDBGetVersionInfo;
   1178 typedef HRESULT __cdecl FnLocalDBStartTracing();
   1179 typedef FnLocalDBStartTracing* PFnLocalDBStartTracing;
   1180 FnLocalDBStartTracing LocalDBStartTracing;
   1181 typedef HRESULT __cdecl FnLocalDBStopTracing();
   1182 typedef FnLocalDBStopTracing* PFnFnLocalDBStopTracing;
   1183 FnLocalDBStopTracing LocalDBStopTracing;
   1184 typedef HRESULT __cdecl FnLocalDBShareInstance(PSID pOwnerSID, PCWSTR wszPrivateLocalDBInstanceName, PCWSTR wszSharedName, DWORD dwFlags);
   1185 typedef FnLocalDBShareInstance* PFnLocalDBShareInstance;
   1186 FnLocalDBShareInstance LocalDBShareInstance;
   1187 typedef HRESULT __cdecl FnLocalDBUnshareInstance(PCWSTR pInstanceName, DWORD dwFlags);
   1188 typedef FnLocalDBUnshareInstance* PFnLocalDBUnshareInstance;
   1189 FnLocalDBUnshareInstance LocalDBUnshareInstance;
   1190 
   1191 #ifdef __cplusplus
   1192 } // extern "C"
   1193 #endif
   1194 
   1195 #ifdef LOCALDB_DEFINE_PROXY_FUNCTIONS
   1196 #define LOCALDB_PROXY(LocalDBFn) static Fn##LocalDBFn* pfn##LocalDBFn = NULL; if (!pfn##LocalDBFn) {HRESULT hr = LocalDBGetPFn(#LocalDBFn, (FARPROC *)&pfn##LocalDBFn); if (FAILED(hr)) return hr;} return (*pfn##LocalDBFn)
   1197 
   1198 typedef struct {
   1199   DWORD dwComponent[2];
   1200   WCHAR wszKeyName[256];
   1201 } Version;
   1202 
   1203 static BOOL ParseVersion(Version * pVersion)
   1204 {
   1205   pVersion->dwComponent[0] = 0;
   1206   pVersion->dwComponent[1] = 0;
   1207   WCHAR *pwch = pVersion->wszKeyName;
   1208 
   1209   for (int i = 0; i < 2; i++) {
   1210     LONGLONG llVal = 0;
   1211     BOOL fHaveDigit = FALSE;
   1212 
   1213     while (*pwch >= L'0' && *pwch <= L'9') {
   1214         llVal = llVal * 10 + (*pwch++ - L'0');
   1215         fHaveDigit = TRUE;
   1216         if (llVal > 0x7fffffff) {
   1217             return FALSE;
   1218         }
   1219     }
   1220 
   1221     if (!fHaveDigit)
   1222         return FALSE;
   1223 
   1224     pVersion->dwComponent[i] = (DWORD)llVal;
   1225 
   1226     if (*pwch == L'\0')
   1227         return TRUE;
   1228 
   1229     if (*pwch != L'.')
   1230         return FALSE;
   1231 
   1232     pwch++;
   1233   }
   1234   return FALSE;
   1235 }
   1236 
   1237 #include <assert.h>
   1238 
   1239 static HRESULT LocalDBGetPFn(LPCSTR szLocalDBFn, FARPROC *pfnLocalDBFn)
   1240 {
   1241   static volatile HMODULE hLocalDBDll = NULL;
   1242 
   1243   if (!hLocalDBDll) {
   1244     LONG ec;
   1245     HKEY hkeyVersions = NULL;
   1246     HKEY hkeyVersion = NULL;
   1247     Version verHigh = {0};
   1248     Version verCurrent;
   1249     DWORD cchKeyName;
   1250     DWORD dwValueType;
   1251     WCHAR wszLocalDBDll[MAX_PATH+1];
   1252     DWORD cbLocalDBDll = sizeof(wszLocalDBDll) - sizeof(WCHAR);
   1253     HMODULE hLocalDBDllTemp = NULL;
   1254 
   1255     if (ERROR_SUCCESS != (ec = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Microsoft SQL Server Local DB\\Installed Versions", 0, KEY_READ, &hkeyVersions)))
   1256       goto Cleanup;
   1257 
   1258     for (int i = 0; ; i++) {
   1259       cchKeyName = 256;
   1260       if (ERROR_SUCCESS != (ec = RegEnumKeyExW(hkeyVersions, i, verCurrent.wszKeyName, &cchKeyName, 0, NULL, NULL, NULL))) {
   1261         if (ERROR_NO_MORE_ITEMS == ec)
   1262           break;
   1263         goto Cleanup;
   1264       }
   1265 
   1266       if (!ParseVersion(&verCurrent))
   1267         continue;
   1268 
   1269       if (verCurrent.dwComponent[0] > verHigh.dwComponent[0] ||
   1270           (verCurrent.dwComponent[0] == verHigh.dwComponent[0] && verCurrent.dwComponent[1] > verHigh.dwComponent[1]))
   1271         verHigh = verCurrent;
   1272     }
   1273     if (!verHigh.wszKeyName[0]) {
   1274       assert(ec == ERROR_NO_MORE_ITEMS);
   1275 
   1276       ec = ERROR_FILE_NOT_FOUND;
   1277       goto Cleanup;
   1278     }
   1279 
   1280     if (ERROR_SUCCESS != (ec = RegOpenKeyExW(hkeyVersions, verHigh.wszKeyName, 0, KEY_READ, &hkeyVersion)))
   1281       goto Cleanup;
   1282     if (ERROR_SUCCESS != (ec = RegQueryValueExW(hkeyVersion, L"InstanceAPIPath", NULL, &dwValueType, (PBYTE) wszLocalDBDll, &cbLocalDBDll)))
   1283       goto Cleanup;
   1284     if (dwValueType != REG_SZ) {
   1285       ec = ERROR_INVALID_DATA;
   1286       goto Cleanup;
   1287     }
   1288     wszLocalDBDll[cbLocalDBDll/sizeof(WCHAR)] = L'\0';
   1289 
   1290     hLocalDBDllTemp = LoadLibraryW(wszLocalDBDll);
   1291     if (NULL == hLocalDBDllTemp) {
   1292       ec = GetLastError();
   1293       goto Cleanup;
   1294     }
   1295     if (NULL == InterlockedCompareExchangePointer((volatile PVOID *)&hLocalDBDll, hLocalDBDllTemp, NULL))
   1296       hLocalDBDllTemp = NULL;
   1297     ec = ERROR_SUCCESS;
   1298 Cleanup:
   1299     if (hLocalDBDllTemp)
   1300       FreeLibrary(hLocalDBDllTemp);
   1301     if (hkeyVersion)
   1302       RegCloseKey(hkeyVersion);
   1303     if (hkeyVersions)
   1304       RegCloseKey(hkeyVersions);
   1305 
   1306     if (ec == ERROR_FILE_NOT_FOUND)
   1307       return LOCALDB_ERROR_NOT_INSTALLED;
   1308 
   1309     if (ec != ERROR_SUCCESS)
   1310       return HRESULT_FROM_WIN32(ec);
   1311   }
   1312 
   1313   FARPROC pfn = GetProcAddress(hLocalDBDll, szLocalDBFn);
   1314 
   1315   if (!pfn)
   1316      return HRESULT_FROM_WIN32(GetLastError());
   1317   *pfnLocalDBFn = pfn;
   1318   return S_OK;
   1319 }
   1320 
   1321 HRESULT __cdecl LocalDBCreateInstance(PCWSTR wszVersion, PCWSTR pInstanceName, DWORD dwFlags)
   1322 {
   1323   LOCALDB_PROXY(LocalDBCreateInstance)(wszVersion, pInstanceName, dwFlags);
   1324 }
   1325 
   1326 HRESULT __cdecl LocalDBStartInstance(PCWSTR pInstanceName, DWORD dwFlags, LPWSTR wszSqlConnection, LPDWORD lpcchSqlConnection)
   1327 {
   1328   LOCALDB_PROXY(LocalDBStartInstance)(pInstanceName, dwFlags, wszSqlConnection, lpcchSqlConnection);
   1329 }
   1330 
   1331 HRESULT __cdecl LocalDBStopInstance(PCWSTR pInstanceName, DWORD dwFlags, ULONG ulTimeout)
   1332 {
   1333   LOCALDB_PROXY(LocalDBStopInstance)(pInstanceName, dwFlags, ulTimeout);
   1334 }
   1335 
   1336 HRESULT __cdecl LocalDBDeleteInstance(PCWSTR pInstanceName, DWORD dwFlags)
   1337 {
   1338   LOCALDB_PROXY(LocalDBDeleteInstance)(pInstanceName, dwFlags);
   1339 }
   1340 
   1341 HRESULT __cdecl LocalDBFormatMessage(HRESULT hrLocalDB, DWORD dwFlags, DWORD dwLanguageId, LPWSTR wszMessage, LPDWORD lpcchMessage)
   1342 {
   1343   LOCALDB_PROXY(LocalDBFormatMessage)(hrLocalDB, dwFlags, dwLanguageId, wszMessage, lpcchMessage);
   1344 }
   1345 
   1346 HRESULT __cdecl LocalDBGetInstances(PTLocalDBInstanceName pInstanceNames, LPDWORD lpdwNumberOfInstances)
   1347 {
   1348   LOCALDB_PROXY(LocalDBGetInstances)(pInstanceNames, lpdwNumberOfInstances);
   1349 }
   1350 
   1351 HRESULT __cdecl LocalDBGetInstanceInfo(PCWSTR wszInstanceName, PLocalDBInstanceInfo pInfo, DWORD cbInfo)
   1352 {
   1353   LOCALDB_PROXY(LocalDBGetInstanceInfo)(wszInstanceName, pInfo, cbInfo);
   1354 }
   1355 
   1356 HRESULT __cdecl LocalDBStartTracing()
   1357 {
   1358   LOCALDB_PROXY(LocalDBStartTracing)();
   1359 }
   1360 
   1361 HRESULT __cdecl LocalDBStopTracing()
   1362 {
   1363   LOCALDB_PROXY(LocalDBStopTracing)();
   1364 }
   1365 
   1366 HRESULT __cdecl LocalDBShareInstance(PSID pOwnerSID, PCWSTR wszLocalDBInstancePrivateName, PCWSTR wszSharedName, DWORD dwFlags)
   1367 {
   1368   LOCALDB_PROXY(LocalDBShareInstance)(pOwnerSID, wszLocalDBInstancePrivateName, wszSharedName, dwFlags);
   1369 }
   1370 
   1371 HRESULT __cdecl LocalDBGetVersions(PTLocalDBVersion pVersions, LPDWORD lpdwNumberOfVersions)
   1372 {
   1373   LOCALDB_PROXY(LocalDBGetVersions)(pVersions, lpdwNumberOfVersions);
   1374 }
   1375 
   1376 HRESULT __cdecl LocalDBUnshareInstance(PCWSTR pInstanceName, DWORD dwFlags)
   1377 {
   1378   LOCALDB_PROXY(LocalDBUnshareInstance)(pInstanceName, dwFlags);
   1379 }
   1380 
   1381 HRESULT __cdecl LocalDBGetVersionInfo(PCWSTR wszVersion, PLocalDBVersionInfo pVersionInfo, DWORD cbVersionInfo)
   1382 {
   1383   LOCALDB_PROXY(LocalDBGetVersionInfo)(wszVersion, pVersionInfo, cbVersionInfo);
   1384 }
   1385 #endif
   1386 #endif
   1387 
   1388 #ifndef _LOCALDB_MESSAGES_H_
   1389 #define _LOCALDB_MESSAGES_H_
   1390 #define FACILITY_LOCALDB 0x9C5
   1391 #define LOCALDB_SEVERITY_SUCCESS 0x0
   1392 #define LOCALDB_SEVERITY_ERROR 0x2
   1393 #define LOCALDB_ERROR_CANNOT_CREATE_INSTANCE_FOLDER ((HRESULT)0x89C50100L)
   1394 #define LOCALDB_ERROR_INVALID_PARAMETER ((HRESULT)0x89C50101L)
   1395 #define LOCALDB_ERROR_INSTANCE_EXISTS_WITH_LOWER_VERSION ((HRESULT)0x89C50102L)
   1396 #define LOCALDB_ERROR_CANNOT_GET_USER_PROFILE_FOLDER ((HRESULT)0x89C50103L)
   1397 #define LOCALDB_ERROR_INSTANCE_FOLDER_PATH_TOO_LONG ((HRESULT)0x89C50104L)
   1398 #define LOCALDB_ERROR_CANNOT_ACCESS_INSTANCE_FOLDER ((HRESULT)0x89C50105L)
   1399 #define LOCALDB_ERROR_CANNOT_ACCESS_INSTANCE_REGISTRY ((HRESULT)0x89C50106L)
   1400 #define LOCALDB_ERROR_UNKNOWN_INSTANCE ((HRESULT)0x89C50107L)
   1401 #define LOCALDB_ERROR_INTERNAL_ERROR ((HRESULT)0x89C50108L)
   1402 #define LOCALDB_ERROR_CANNOT_MODIFY_INSTANCE_REGISTRY ((HRESULT)0x89C50109L)
   1403 #define LOCALDB_ERROR_SQL_SERVER_STARTUP_FAILED ((HRESULT)0x89C5010AL)
   1404 #define LOCALDB_ERROR_INSTANCE_CONFIGURATION_CORRUPT ((HRESULT)0x89C5010BL)
   1405 #define LOCALDB_ERROR_CANNOT_CREATE_SQL_PROCESS ((HRESULT)0x89C5010CL)
   1406 #define LOCALDB_ERROR_UNKNOWN_VERSION ((HRESULT)0x89C5010DL)
   1407 #define LOCALDB_ERROR_UNKNOWN_LANGUAGE_ID ((HRESULT)0x89C5010EL)
   1408 #define LOCALDB_ERROR_INSTANCE_STOP_FAILED ((HRESULT)0x89C5010FL)
   1409 #define LOCALDB_ERROR_UNKNOWN_ERROR_CODE ((HRESULT)0x89C50110L)
   1410 #define LOCALDB_ERROR_VERSION_REQUESTED_NOT_INSTALLED ((HRESULT)0x89C50111L)
   1411 #define LOCALDB_ERROR_INSTANCE_BUSY ((HRESULT)0x89C50112L)
   1412 #define LOCALDB_ERROR_INVALID_OPERATION ((HRESULT)0x89C50113L)
   1413 #define LOCALDB_ERROR_INSUFFICIENT_BUFFER ((HRESULT)0x89C50114L)
   1414 #define LOCALDB_ERROR_WAIT_TIMEOUT ((HRESULT)0x89C50115L)
   1415 #define LOCALDB_ERROR_XEVENT_FAILED ((HRESULT)0x89C50117L)
   1416 #define LOCALDB_ERROR_AUTO_INSTANCE_CREATE_FAILED ((HRESULT)0x89C50118L)
   1417 #define LOCALDB_ERROR_SHARED_NAME_TAKEN ((HRESULT)0x89C50119L)
   1418 #define LOCALDB_ERROR_CALLER_IS_NOT_OWNER ((HRESULT)0x89C5011AL)
   1419 #define LOCALDB_ERROR_INVALID_INSTANCE_NAME ((HRESULT)0x89C5011BL)
   1420 #define LOCALDB_ERROR_INSTANCE_ALREADY_SHARED ((HRESULT)0x89C5011CL)
   1421 #define LOCALDB_ERROR_INSTANCE_NOT_SHARED ((HRESULT)0x89C5011DL)
   1422 #define LOCALDB_ERROR_ADMIN_RIGHTS_REQUIRED ((HRESULT)0x89C5011EL)
   1423 #define LOCALDB_ERROR_TOO_MANY_SHARED_INSTANCES ((HRESULT)0x89C5011FL)
   1424 #define LOCALDB_ERROR_CANNOT_GET_LOCAL_APP_DATA_PATH ((HRESULT)0x89C50120L)
   1425 #define LOCALDB_ERROR_CANNOT_LOAD_RESOURCES ((HRESULT)0x89C50121L)
   1426 #define LOCALDB_EDETAIL_DATADIRECTORY_IS_MISSING ((HRESULT)0x89C50200L)
   1427 #define LOCALDB_EDETAIL_CANNOT_ACCESS_INSTANCE_FOLDER ((HRESULT)0x89C50201L)
   1428 #define LOCALDB_EDETAIL_DATADIRECTORY_IS_TOO_LONG ((HRESULT)0x89C50202L)
   1429 #define LOCALDB_EDETAIL_PARENT_INSTANCE_IS_MISSING ((HRESULT)0x89C50203L)
   1430 #define LOCALDB_EDETAIL_PARENT_INSTANCE_IS_TOO_LONG ((HRESULT)0x89C50204L)
   1431 #define LOCALDB_EDETAIL_DATA_DIRECTORY_INVALID ((HRESULT)0x89C50205L)
   1432 #define LOCALDB_EDETAIL_XEVENT_ASSERT ((HRESULT)0x89C50206L)
   1433 #define LOCALDB_EDETAIL_XEVENT_ERROR ((HRESULT)0x89C50207L)
   1434 #define LOCALDB_EDETAIL_INSTALLATION_CORRUPTED ((HRESULT)0x89C50208L)
   1435 #define LOCALDB_EDETAIL_CANNOT_GET_PROGRAM_FILES_LOCATION ((HRESULT)0x89C50209L)
   1436 #define LOCALDB_EDETAIL_XEVENT_CANNOT_INITIALIZE ((HRESULT)0x89C5020AL)
   1437 #define LOCALDB_EDETAIL_XEVENT_CANNOT_FIND_CONF_FILE ((HRESULT)0x89C5020BL)
   1438 #define LOCALDB_EDETAIL_XEVENT_CANNOT_CONFIGURE ((HRESULT)0x89C5020CL)
   1439 #define LOCALDB_EDETAIL_XEVENT_CONF_FILE_NAME_TOO_LONG ((HRESULT)0x89C5020DL)
   1440 #define LOCALDB_EDETAIL_COINITIALIZEEX_FAILED ((HRESULT)0x89C5020EL)
   1441 #define LOCALDB_EDETAIL_PARENT_INSTANCE_VERSION_INVALID ((HRESULT)0x89C5020FL)
   1442 #define LOCALDB_EDETAIL_WINAPI_ERROR ((HRESULT)0xC9C50210L)
   1443 #define LOCALDB_EDETAIL_UNEXPECTED_RESULT ((HRESULT)0x89C50211L)
   1444 #endif
   1445 
   1446 extern RPC_IF_HANDLE __MIDL_itf_msoledbsql_0000_0011_v0_0_c_ifspec;
   1447 extern RPC_IF_HANDLE __MIDL_itf_msoledbsql_0000_0011_v0_0_s_ifspec;
   1448 
   1449 #ifdef __cplusplus
   1450 }
   1451 #endif
   1452 #endif