2025-11-28 00:35:46 +09:00

3758 lines
146 KiB
C++

//-----------------------------------------------------------------------------
// Microsoft OLE DB RowsetViewer
// Copyright (C) 1994 - 1999 By Microsoft Corporation.
//
// @doc
//
// @module ERROR.CPP
//
//-----------------------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////
// Includes
//
////////////////////////////////////////////////////////////////////////
#include "Headers.h"
////////////////////////////////////////////////////////////////////////
// Globals
//
////////////////////////////////////////////////////////////////////////
DWORD g_dwErrorPost = EP_ERRORINFO_FAILURE | EP_HRESULT_NOERRORINFO;
DWORD g_dwBreakID = 0;
BOOL SetErrorPosting(ERRORPOST eErrorPost, BOOL fSet)
{
if(fSet)
g_dwErrorPost |= eErrorPost;
else
g_dwErrorPost &= ~eErrorPost;
return TRUE;
};
BOOL GetErrorPosting(ERRORPOST eErrorPost)
{
return g_dwErrorPost & eErrorPost;
};
/////////////////////////////////////////////////////////////////////////////
// Interface Map
//
/////////////////////////////////////////////////////////////////////////////
const static WIDEGUIDMAP g_rgInterfaceMaps[] =
{
//TEnumerator
VALUE_PWCHAR(IID_IParseDisplayName),
VALUE_PWCHAR(IID_ISourcesRowset),
//TDataSource
VALUE_PWCHAR(IID_IDBInitialize),
VALUE_PWCHAR(IID_IDBProperties),
VALUE_PWCHAR(IID_IDBCreateSession),
VALUE_PWCHAR(IID_IDBInfo),
VALUE_PWCHAR(IID_IPersist),
VALUE_PWCHAR(IID_IDBAsynchStatus),
VALUE_PWCHAR(IID_IDBDataSourceAdmin),
VALUE_PWCHAR(IID_IPersistFile),
VALUE_PWCHAR(IID_ISupportErrorInfo),
VALUE_PWCHAR(IID_IServiceProvider),
VALUE_PWCHAR(IID_ISpecifyPropertyPages),
//TSession
VALUE_PWCHAR(IID_IGetDataSource),
VALUE_PWCHAR(IID_IOpenRowset),
VALUE_PWCHAR(IID_ISessionProperties),
VALUE_PWCHAR(IID_IDBCreateCommand),
VALUE_PWCHAR(IID_IDBSchemaRowset),
VALUE_PWCHAR(IID_IIndexDefinition),
VALUE_PWCHAR(IID_IAlterIndex),
VALUE_PWCHAR(IID_IAlterTable),
VALUE_PWCHAR(IID_ITableDefinition),
VALUE_PWCHAR(IID_ITransactionJoin),
VALUE_PWCHAR(IID_ITransactionLocal),
VALUE_PWCHAR(IID_ITransactionObject),
//TCommand
VALUE_PWCHAR(IID_IAccessor),
VALUE_PWCHAR(IID_IColumnsInfo),
VALUE_PWCHAR(IID_ICommand),
VALUE_PWCHAR(IID_ICommandProperties),
VALUE_PWCHAR(IID_ICommandText),
VALUE_PWCHAR(IID_IConvertType),
VALUE_PWCHAR(IID_IColumnsRowset),
VALUE_PWCHAR(IID_ICommandPrepare),
VALUE_PWCHAR(IID_ICommandPersist),
VALUE_PWCHAR(IID_ICommandStream),
VALUE_PWCHAR(IID_ICommandWithParameters),
//TRowset
VALUE_PWCHAR(IID_IRowset),
VALUE_PWCHAR(IID_IRowsetInfo),
VALUE_PWCHAR(IID_IConnectionPointContainer),
VALUE_PWCHAR(IID_IRowsetChange),
VALUE_PWCHAR(IID_IRowsetIdentity),
VALUE_PWCHAR(IID_IRowsetLocate),
VALUE_PWCHAR(IID_IRowsetFind),
VALUE_PWCHAR(IID_IRowsetView),
VALUE_PWCHAR(IID_IChapteredRowset),
VALUE_PWCHAR(IID_IRowsetResynch),
VALUE_PWCHAR(IID_IRowsetRefresh),
VALUE_PWCHAR(IID_IRowsetScroll),
VALUE_PWCHAR(IID_IRowsetUpdate),
VALUE_PWCHAR(IID_IRowsetBookmark),
VALUE_PWCHAR(IID_IParentRowset),
VALUE_PWCHAR(IID_IGetRow),
//TRow
VALUE_PWCHAR(IID_IRow),
VALUE_PWCHAR(IID_IGetSession),
VALUE_PWCHAR(IID_IColumnsInfo2),
VALUE_PWCHAR(IID_IRowChange),
VALUE_PWCHAR(IID_IRowSchemaChange),
VALUE_PWCHAR(IID_ICreateRow),
VALUE_PWCHAR(IID_IScopedOperations),
//TTransaction
VALUE_PWCHAR(IID_ITransaction),
VALUE_PWCHAR(IID_ITransactionOptions),
//TMultipleResults
VALUE_PWCHAR(IID_IMultipleResults),
//TView
VALUE_PWCHAR(IID_IViewChapter),
VALUE_PWCHAR(IID_IViewFilter),
VALUE_PWCHAR(IID_IViewRowset),
VALUE_PWCHAR(IID_IViewSort),
//TIndex
VALUE_PWCHAR(IID_IRowsetIndex),
//TError
VALUE_PWCHAR(IID_IErrorInfo),
VALUE_PWCHAR(IID_IErrorRecords),
VALUE_PWCHAR(IID_ISQLErrorInfo),
//Connection Points
VALUE_PWCHAR(IID_IConnectionPoint),
VALUE_PWCHAR(IID_IRowsetNotify),
VALUE_PWCHAR(IID_IDBAsynchNotify),
VALUE_PWCHAR(IID_IRowPositionChange),
//Misc
VALUE_PWCHAR(IID_IRowPosition),
VALUE_PWCHAR(IID_ISequentialStream),
VALUE_PWCHAR(IID_IStream),
VALUE_PWCHAR(IID_IStorage),
VALUE_PWCHAR(IID_ILockBytes),
//MD
VALUE_PWCHAR(IID_IMDDataset),
VALUE_PWCHAR(IID_IMDFind),
VALUE_PWCHAR(IID_IMDRangeRowset),
//Security
VALUE_PWCHAR(IID_ITrusteeAdmin),
VALUE_PWCHAR(IID_ITrusteeGroupAdmin),
VALUE_PWCHAR(IID_IObjectAccessControl),
VALUE_PWCHAR(IID_ISecurityInfo),
//Table Creation
VALUE_PWCHAR(IID_ITableDefinitionWithConstraints),
VALUE_PWCHAR(IID_ITableCreation),
//TBinder
VALUE_PWCHAR(IID_IBindResource),
VALUE_PWCHAR(IID_IDBBinderProperties),
VALUE_PWCHAR(IID_IRegisterProvider),
//TStream
VALUE_PWCHAR(IID_IGetSourceRow),
//Service Components
VALUE_PWCHAR(IID_IDBPromptInitialize),
VALUE_PWCHAR(IID_IDataInitialize),
//Aggregation
VALUE_PWCHAR(IID_IAggregate),
//IUnknown
VALUE_PWCHAR(IID_IUnknown),
VALUE_PWCHAR(IID_NULL),
};
const static ULONG g_cInterfaceMaps = NUMELE(g_rgInterfaceMaps);
////////////////////////////////////////////////////////////////////////
// rgDBTypes
//
////////////////////////////////////////////////////////////////////////
const static WIDENAMEMAP g_rgDBTypes[] =
{
VALUE_WCHAR(DBTYPE_EMPTY ),
VALUE_WCHAR(DBTYPE_NULL ),
VALUE_WCHAR(DBTYPE_I2 ),
VALUE_WCHAR(DBTYPE_I4 ),
VALUE_WCHAR(DBTYPE_R4 ),
VALUE_WCHAR(DBTYPE_R8 ),
VALUE_WCHAR(DBTYPE_CY ),
VALUE_WCHAR(DBTYPE_DATE ),
VALUE_WCHAR(DBTYPE_BSTR ),
VALUE_WCHAR(DBTYPE_IDISPATCH ),
VALUE_WCHAR(DBTYPE_ERROR ),
VALUE_WCHAR(DBTYPE_BOOL ),
VALUE_WCHAR(DBTYPE_VARIANT ),
VALUE_WCHAR(DBTYPE_IUNKNOWN ),
VALUE_WCHAR(DBTYPE_DECIMAL ),
VALUE_WCHAR(DBTYPE_UI1 ),
VALUE_WCHAR(DBTYPE_ARRAY ),
VALUE_WCHAR(DBTYPE_BYREF ),
VALUE_WCHAR(DBTYPE_I1 ),
VALUE_WCHAR(DBTYPE_UI2 ),
VALUE_WCHAR(DBTYPE_UI4 ),
VALUE_WCHAR(DBTYPE_I8 ),
VALUE_WCHAR(DBTYPE_UI8 ),
VALUE_WCHAR(DBTYPE_GUID ),
VALUE_WCHAR(DBTYPE_VECTOR ),
VALUE_WCHAR(DBTYPE_RESERVED ),
VALUE_WCHAR(DBTYPE_BYTES ),
VALUE_WCHAR(DBTYPE_STR ),
VALUE_WCHAR(DBTYPE_WSTR ),
VALUE_WCHAR(DBTYPE_NUMERIC ),
VALUE_WCHAR(DBTYPE_UDT ),
VALUE_WCHAR(DBTYPE_DBDATE ),
VALUE_WCHAR(DBTYPE_DBTIME ),
VALUE_WCHAR(DBTYPE_DBTIMESTAMP ),
VALUE_WCHAR(DBTYPE_HCHAPTER ),
//2.0 Types
VALUE_WCHAR(DBTYPE_FILETIME ),
VALUE_WCHAR(DBTYPE_PROPVARIANT ),
VALUE_WCHAR(DBTYPE_VARNUMERIC ),
};
const static ULONG g_cDBTypes = NUMELE(g_rgDBTypes);
////////////////////////////////////////////////////////////////////////
// rgVariantTypes
//
////////////////////////////////////////////////////////////////////////
const static WIDENAMEMAP g_rgVariantTypes[] =
{
VALUE_WCHAR(VT_EMPTY ),
VALUE_WCHAR(VT_NULL ),
VALUE_WCHAR(VT_I2 ),
VALUE_WCHAR(VT_I4 ),
VALUE_WCHAR(VT_R4 ),
VALUE_WCHAR(VT_R8 ),
VALUE_WCHAR(VT_CY ),
VALUE_WCHAR(VT_DATE ),
VALUE_WCHAR(VT_BSTR ),
VALUE_WCHAR(VT_DISPATCH ),
VALUE_WCHAR(VT_ERROR ),
VALUE_WCHAR(VT_BOOL ),
VALUE_WCHAR(VT_VARIANT ),
VALUE_WCHAR(VT_UNKNOWN ),
VALUE_WCHAR(VT_DECIMAL ),
VALUE_WCHAR(VT_I1 ),
VALUE_WCHAR(VT_UI1 ),
VALUE_WCHAR(VT_UI2 ),
VALUE_WCHAR(VT_UI4 ),
VALUE_WCHAR(VT_I8 ),
VALUE_WCHAR(VT_UI8 ),
VALUE_WCHAR(VT_INT ),
VALUE_WCHAR(VT_UINT ),
VALUE_WCHAR(VT_VOID ),
VALUE_WCHAR(VT_HRESULT ),
VALUE_WCHAR(VT_PTR ),
VALUE_WCHAR(VT_SAFEARRAY ),
VALUE_WCHAR(VT_CARRAY ),
VALUE_WCHAR(VT_USERDEFINED ),
VALUE_WCHAR(VT_LPSTR ),
VALUE_WCHAR(VT_LPWSTR ),
VALUE_WCHAR(VT_FILETIME ),
VALUE_WCHAR(VT_BLOB ),
VALUE_WCHAR(VT_STREAM ),
VALUE_WCHAR(VT_STORAGE ),
VALUE_WCHAR(VT_STREAMED_OBJECT ),
VALUE_WCHAR(VT_STORED_OBJECT ),
VALUE_WCHAR(VT_BLOB_OBJECT ),
VALUE_WCHAR(VT_CF ),
VALUE_WCHAR(VT_CLSID ),
VALUE_WCHAR(VT_VECTOR ),
VALUE_WCHAR(VT_ARRAY ),
VALUE_WCHAR(VT_BYREF ),
VALUE_WCHAR(VT_RESERVED ),
VALUE_WCHAR(VT_ILLEGAL ),
VALUE_WCHAR(VT_ILLEGALMASKED ),
VALUE_WCHAR(VT_TYPEMASK ),
};
const static ULONG g_cVariantTypes = NUMELE(g_rgVariantTypes);
////////////////////////////////////////////////////////////////////////
// ERRORMAP
//
////////////////////////////////////////////////////////////////////////
const static NAMEMAP g_rgErrorMap[] =
{
//System Success
VALUE_CHAR(S_OK),
VALUE_CHAR(S_FALSE),
VALUE_CHAR(CO_S_NOTALLINTERFACES),
//System Errors
VALUE_CHAR(E_FAIL),
VALUE_CHAR(E_INVALIDARG),
VALUE_CHAR(E_OUTOFMEMORY),
VALUE_CHAR(E_NOINTERFACE),
VALUE_CHAR(REGDB_E_CLASSNOTREG),
VALUE_CHAR(CLASS_E_NOAGGREGATION),
VALUE_CHAR(E_UNEXPECTED),
VALUE_CHAR(E_NOTIMPL),
VALUE_CHAR(E_POINTER),
VALUE_CHAR(E_HANDLE),
VALUE_CHAR(E_ABORT),
VALUE_CHAR(E_ACCESSDENIED),
VALUE_CHAR(E_PENDING),
//OLE DB Warnings 1.1
VALUE_CHAR(DB_S_ROWLIMITEXCEEDED),
VALUE_CHAR(DB_S_COLUMNTYPEMISMATCH),
VALUE_CHAR(DB_S_TYPEINFOOVERRIDDEN),
VALUE_CHAR(DB_S_BOOKMARKSKIPPED),
VALUE_CHAR(DB_S_ENDOFROWSET),
VALUE_CHAR(DB_S_COMMANDREEXECUTED),
VALUE_CHAR(DB_S_BUFFERFULL),
VALUE_CHAR(DB_S_NORESULT),
VALUE_CHAR(DB_S_CANTRELEASE),
VALUE_CHAR(DB_S_DIALECTIGNORED),
VALUE_CHAR(DB_S_UNWANTEDPHASE),
VALUE_CHAR(DB_S_UNWANTEDREASON),
VALUE_CHAR(DB_S_COLUMNSCHANGED),
VALUE_CHAR(DB_S_ERRORSRETURNED),
VALUE_CHAR(DB_S_BADROWHANDLE),
VALUE_CHAR(DB_S_DELETEDROW),
VALUE_CHAR(DB_S_STOPLIMITREACHED),
VALUE_CHAR(DB_S_LOCKUPGRADED),
VALUE_CHAR(DB_S_PROPERTIESCHANGED),
VALUE_CHAR(DB_S_ERRORSOCCURRED),
VALUE_CHAR(DB_S_PARAMUNAVAILABLE),
VALUE_CHAR(DB_S_MULTIPLECHANGES),
//OLE DB Errors 1.1
VALUE_CHAR(DB_E_BADACCESSORHANDLE),
VALUE_CHAR(DB_E_ROWLIMITEXCEEDED),
VALUE_CHAR(DB_E_READONLYACCESSOR),
VALUE_CHAR(DB_E_SCHEMAVIOLATION),
VALUE_CHAR(DB_E_BADROWHANDLE),
VALUE_CHAR(DB_E_OBJECTOPEN),
VALUE_CHAR(DB_E_CANTCONVERTVALUE),
VALUE_CHAR(DB_E_BADBINDINFO),
VALUE_CHAR(DB_SEC_E_PERMISSIONDENIED),
VALUE_CHAR(DB_E_NOTAREFERENCECOLUMN),
VALUE_CHAR(DB_E_NOCOMMAND),
VALUE_CHAR(DB_E_BADBOOKMARK),
VALUE_CHAR(DB_E_BADLOCKMODE),
VALUE_CHAR(DB_E_PARAMNOTOPTIONAL),
VALUE_CHAR(DB_E_BADCOLUMNID),
VALUE_CHAR(DB_E_BADRATIO),
VALUE_CHAR(DB_E_ERRORSINCOMMAND),
VALUE_CHAR(DB_E_CANTCANCEL),
VALUE_CHAR(DB_E_DIALECTNOTSUPPORTED),
VALUE_CHAR(DB_E_DUPLICATEDATASOURCE),
VALUE_CHAR(DB_E_CANNOTRESTART),
VALUE_CHAR(DB_E_NOTFOUND),
VALUE_CHAR(DB_E_NEWLYINSERTED),
VALUE_CHAR(DB_E_UNSUPPORTEDCONVERSION),
VALUE_CHAR(DB_E_BADSTARTPOSITION),
VALUE_CHAR(DB_E_NOTREENTRANT),
VALUE_CHAR(DB_E_ERRORSOCCURRED),
VALUE_CHAR(DB_E_NOAGGREGATION),
VALUE_CHAR(DB_E_DELETEDROW),
VALUE_CHAR(DB_E_CANTFETCHBACKWARDS),
VALUE_CHAR(DB_E_ROWSNOTRELEASED),
VALUE_CHAR(DB_E_BADSTORAGEFLAG),
VALUE_CHAR(DB_E_BADSTATUSVALUE),
VALUE_CHAR(DB_E_CANTSCROLLBACKWARDS),
VALUE_CHAR(DB_E_MULTIPLESTATEMENTS),
VALUE_CHAR(DB_E_INTEGRITYVIOLATION),
VALUE_CHAR(DB_E_BADTYPENAME),
VALUE_CHAR(DB_E_ABORTLIMITREACHED),
VALUE_CHAR(DB_E_DUPLICATEINDEXID),
VALUE_CHAR(DB_E_NOINDEX),
VALUE_CHAR(DB_E_INDEXINUSE),
VALUE_CHAR(DB_E_NOTABLE),
VALUE_CHAR(DB_E_CONCURRENCYVIOLATION),
VALUE_CHAR(DB_E_BADCOPY),
VALUE_CHAR(DB_E_BADPRECISION),
VALUE_CHAR(DB_E_BADSCALE),
VALUE_CHAR(DB_E_BADID),
VALUE_CHAR(DB_E_BADTYPE),
VALUE_CHAR(DB_E_DUPLICATECOLUMNID),
VALUE_CHAR(DB_E_DUPLICATETABLEID),
VALUE_CHAR(DB_E_TABLEINUSE),
VALUE_CHAR(DB_E_NOLOCALE),
VALUE_CHAR(DB_E_BADRECORDNUM),
VALUE_CHAR(DB_E_BOOKMARKSKIPPED),
VALUE_CHAR(DB_E_BADPROPERTYVALUE),
VALUE_CHAR(DB_E_INVALID),
VALUE_CHAR(DB_E_BADACCESSORFLAGS),
VALUE_CHAR(DB_E_BADSTORAGEFLAGS),
VALUE_CHAR(DB_E_BYREFACCESSORNOTSUPPORTED),
VALUE_CHAR(DB_E_NULLACCESSORNOTSUPPORTED),
VALUE_CHAR(DB_E_NOTPREPARED),
VALUE_CHAR(DB_E_BADACCESSORTYPE),
VALUE_CHAR(DB_E_WRITEONLYACCESSOR),
VALUE_CHAR(DB_SEC_E_AUTH_FAILED),
VALUE_CHAR(DB_E_CANCELED),
VALUE_CHAR(DB_E_BADSOURCEHANDLE),
VALUE_CHAR(DB_E_PARAMUNAVAILABLE),
VALUE_CHAR(DB_E_ALREADYINITIALIZED),
VALUE_CHAR(DB_E_NOTSUPPORTED),
VALUE_CHAR(DB_E_MAXPENDCHANGESEXCEEDED),
VALUE_CHAR(DB_E_BADORDINAL),
VALUE_CHAR(DB_E_PENDINGCHANGES),
VALUE_CHAR(DB_E_DATAOVERFLOW),
VALUE_CHAR(DB_E_BADHRESULT),
VALUE_CHAR(DB_E_BADLOOKUPID),
VALUE_CHAR(DB_E_BADDYNAMICERRORID),
VALUE_CHAR(DB_E_PENDINGINSERT),
VALUE_CHAR(DB_E_BADCONVERTFLAG),
VALUE_CHAR(DB_E_BADPARAMETERNAME),
VALUE_CHAR(DB_E_MULTIPLESTORAGE),
VALUE_CHAR(DB_E_CANTFILTER),
VALUE_CHAR(DB_E_CANTORDER),
//OLE DB Warnings 1.5
VALUE_CHAR(DB_S_ASYNCHRONOUS),
VALUE_CHAR(DB_S_UNWANTEDOPERATION),
//OLE DB Warnings 2.0
VALUE_CHAR(DB_S_NONEXTROWSET),
//OLE DB Warnings 2.1
VALUE_CHAR(DB_S_NOTSINGLETON),
VALUE_CHAR(DB_S_NOROWSPECIFICCOLUMNS),
//OLE DB Warnings 2.5
VALUE_CHAR(DB_S_GOALCHANGED),
VALUE_CHAR(DB_S_TOOMANYCHANGES),
//OLE DB Errors 1.5
VALUE_CHAR(DB_E_BADCHAPTER),
VALUE_CHAR(DB_E_BADCOMPAREOP),
//OLE DB Errors 2.0
VALUE_CHAR(DB_E_BADVALUES),
VALUE_CHAR(DB_E_NOQUERY),
VALUE_CHAR(DB_E_ROWSETINCOMMAND),
VALUE_CHAR(DB_E_CANTTRANSLATE),
VALUE_CHAR(DB_E_CHAPTERNOTRELEASED),
VALUE_CHAR(MD_E_BADTUPLE),
VALUE_CHAR(MD_E_BADCOORDINATE),
VALUE_CHAR(MD_E_INVALIDAXIS),
VALUE_CHAR(MD_E_INVALIDCELLRANGE),
VALUE_CHAR(DB_E_NOCOLUMN),
VALUE_CHAR(DB_E_COMMANDNOTPERSISTED),
VALUE_CHAR(DB_E_DUPLICATEID),
VALUE_CHAR(DB_E_OBJECTCREATIONLIMITREACHED),
VALUE_CHAR(DB_E_BADINDEXID),
VALUE_CHAR(DB_E_BADCOMMANDID),
//OLE DB Errors 2.1
VALUE_CHAR(SEC_E_PERMISSIONDENIED),
VALUE_CHAR(SEC_E_BADTRUSTEEID ),
VALUE_CHAR(SEC_E_NOTRUSTEEID ),
VALUE_CHAR(SEC_E_NOMEMBERSHIPSUPPORT ),
VALUE_CHAR(SEC_E_INVALIDOBJECT ),
VALUE_CHAR(SEC_E_NOOWNER ),
VALUE_CHAR(SEC_E_INVALIDACCESSENTRYLIST ),
VALUE_CHAR(SEC_E_INVALIDOWNER ),
VALUE_CHAR(SEC_E_INVALIDACCESSENTRY ),
VALUE_CHAR(DB_E_BADCONSTRAINTTYPE ),
VALUE_CHAR(DB_E_BADCONSTRAINTFORM ),
VALUE_CHAR(DB_E_BADDEFERRABILITY ),
VALUE_CHAR(DB_E_BADMATCHTYPE ),
VALUE_CHAR(DB_E_BADUPDATEDELETERULE ),
VALUE_CHAR(DB_E_BADCONSTRAINTID ),
VALUE_CHAR(DB_E_BADCOMMANDFLAGS ),
VALUE_CHAR(DB_E_OBJECTMISMATCH ),
VALUE_CHAR(DB_E_NOSOURCEOBJECT ),
VALUE_CHAR(DB_E_RESOURCELOCKED ),
VALUE_CHAR(DB_E_NOTCOLLECTION ),
VALUE_CHAR(DB_E_READONLY ),
VALUE_CHAR(DB_E_ASYNCNOTSUPPORTED ),
VALUE_CHAR(DB_E_CANNOTCONNECT ),
VALUE_CHAR(DB_E_TIMEOUT ),
VALUE_CHAR(DB_E_RESOURCEEXISTS ),
VALUE_CHAR(DB_E_RESOURCEOUTOFSCOPE ),
VALUE_CHAR(DB_E_DROPRESTRICTED ),
VALUE_CHAR(DB_E_DUPLICATECONSTRAINTID ),
//OLE DB Errors 2.5
VALUE_CHAR(DB_SEC_E_SAFEMODE_DENIED ),
VALUE_CHAR(DB_E_LIMITREJECTED),
VALUE_CHAR(DB_E_COSTLIMIT),
VALUE_CHAR(DB_E_CANNOTFREE),
VALUE_CHAR(DB_E_GOALREJECTED),
VALUE_CHAR(DB_E_BADREGIONHANDLE),
VALUE_CHAR(DB_E_NONCONTIGUOUSRANGE),
VALUE_CHAR(DB_E_INVALIDTRANSITION),
VALUE_CHAR(DB_E_NOTASUBREGION),
//OLE DB Errors 2.6
VALUE_CHAR(DB_E_NOSTATISTIC ),
VALUE_CHAR(DB_E_ALTERRESTRICTED ),
VALUE_CHAR(DB_E_RESOURCENOTSUPPORTED ),
VALUE_CHAR(DB_E_NOCONSTRAINT ),
VALUE_CHAR(DB_E_COLUMNUNAVAILABLE ),
//Transactions
VALUE_CHAR(XACT_E_ABORTED ),
VALUE_CHAR(XACT_E_ALREADYOTHERSINGLEPHASE ),
VALUE_CHAR(XACT_E_ALREADYINPROGRESS ),
VALUE_CHAR(XACT_E_CANTRETAIN ),
VALUE_CHAR(XACT_E_COMMITFAILED ),
VALUE_CHAR(XACT_E_COMMITPREVENTED ),
VALUE_CHAR(XACT_E_CONNECTION_DENIED ),
VALUE_CHAR(XACT_E_CONNECTION_DOWN ),
VALUE_CHAR(XACT_E_HEURISTICABORT ),
VALUE_CHAR(XACT_E_HEURISTICCOMMIT ),
VALUE_CHAR(XACT_E_HEURISTICDAMAGE ),
VALUE_CHAR(XACT_E_HEURISTICDANGER ),
VALUE_CHAR(XACT_E_INDOUBT ),
VALUE_CHAR(XACT_E_INVALIDCOOKIE ),
VALUE_CHAR(XACT_E_ISOLATIONLEVEL ),
VALUE_CHAR(XACT_E_LOGFULL ),
VALUE_CHAR(XACT_E_NOASYNC ),
VALUE_CHAR(XACT_E_NOENLIST ),
VALUE_CHAR(XACT_E_NOIMPORTOBJECT ),
VALUE_CHAR(XACT_E_NOISORETAIN ),
VALUE_CHAR(XACT_E_NORESOURCE ),
VALUE_CHAR(XACT_E_NOTCURRENT ),
VALUE_CHAR(XACT_E_NOTIMEOUT ),
VALUE_CHAR(XACT_E_NOTRANSACTION ),
VALUE_CHAR(XACT_E_NOTSUPPORTED ),
VALUE_CHAR(XACT_E_REENLISTTIMEOUT ),
VALUE_CHAR(XACT_E_TMNOTAVAILABLE ),
VALUE_CHAR(XACT_E_UNKNOWNRMGRID ),
VALUE_CHAR(XACT_E_WRONGSTATE ),
VALUE_CHAR(XACT_E_WRONGUOW ),
VALUE_CHAR(XACT_E_XTIONEXISTS ),
VALUE_CHAR(XACT_S_ABORTING ),
VALUE_CHAR(XACT_S_ALLNORETAIN ),
VALUE_CHAR(XACT_S_ASYNC ),
VALUE_CHAR(XACT_S_DEFECT ),
VALUE_CHAR(XACT_S_OKINFORM ),
VALUE_CHAR(XACT_S_MADECHANGESCONTENT ),
VALUE_CHAR(XACT_S_MADECHANGESINFORM ),
VALUE_CHAR(XACT_S_READONLY ),
VALUE_CHAR(XACT_S_SINGLEPHASE ),
VALUE_CHAR(XACT_S_SOMENORETAIN ),
//Com Errors
VALUE_CHAR(CO_E_NOTINITIALIZED ),
VALUE_CHAR(CO_E_ALREADYINITIALIZED ),
VALUE_CHAR(CO_E_CANTDETERMINECLASS ),
VALUE_CHAR(CO_E_CLASSSTRING ),
VALUE_CHAR(CO_E_IIDSTRING ),
VALUE_CHAR(CO_E_APPNOTFOUND ),
VALUE_CHAR(CO_E_APPSINGLEUSE ),
VALUE_CHAR(CO_E_ERRORINAPP ),
VALUE_CHAR(CO_E_DLLNOTFOUND ),
VALUE_CHAR(CO_E_ERRORINDLL ),
VALUE_CHAR(CO_E_WRONGOSFORAPP ),
VALUE_CHAR(CO_E_OBJNOTREG ),
VALUE_CHAR(CO_E_OBJISREG ),
VALUE_CHAR(CO_E_OBJNOTCONNECTED ),
VALUE_CHAR(CO_E_APPDIDNTREG ),
VALUE_CHAR(CO_E_RELEASED ),
//Moniker Errors
VALUE_CHAR(MK_E_CONNECTMANUALLY ),
VALUE_CHAR(MK_E_EXCEEDEDDEADLINE ),
VALUE_CHAR(MK_E_NEEDGENERIC ),
VALUE_CHAR(MK_E_UNAVAILABLE ),
VALUE_CHAR(MK_E_SYNTAX ),
VALUE_CHAR(MK_E_NOOBJECT ),
VALUE_CHAR(MK_E_INVALIDEXTENSION ),
VALUE_CHAR(MK_E_INTERMEDIATEINTERFACENOTSUPPORTED ),
VALUE_CHAR(MK_E_NOTBINDABLE ),
VALUE_CHAR(MK_E_NOTBOUND ),
VALUE_CHAR(MK_E_CANTOPENFILE ),
VALUE_CHAR(MK_E_MUSTBOTHERUSER ),
VALUE_CHAR(MK_E_NOINVERSE ),
VALUE_CHAR(MK_E_NOSTORAGE ),
VALUE_CHAR(MK_E_NOPREFIX ),
VALUE_CHAR(MK_E_ENUMERATION_FAILED ),
//Connection Points
VALUE_CHAR(CONNECT_E_NOCONNECTION),
VALUE_CHAR(CONNECT_E_ADVISELIMIT),
VALUE_CHAR(CONNECT_E_CANNOTCONNECT),
VALUE_CHAR(CONNECT_E_OVERRIDDEN),
//Dispatch/Variant Errors
VALUE_CHAR(DISP_E_UNKNOWNINTERFACE),
VALUE_CHAR(DISP_E_MEMBERNOTFOUND),
VALUE_CHAR(DISP_E_PARAMNOTFOUND),
VALUE_CHAR(DISP_E_TYPEMISMATCH),
VALUE_CHAR(DISP_E_UNKNOWNNAME),
VALUE_CHAR(DISP_E_NONAMEDARGS),
VALUE_CHAR(DISP_E_BADVARTYPE),
VALUE_CHAR(DISP_E_EXCEPTION),
VALUE_CHAR(DISP_E_OVERFLOW),
VALUE_CHAR(DISP_E_BADINDEX),
VALUE_CHAR(DISP_E_UNKNOWNLCID),
VALUE_CHAR(DISP_E_ARRAYISLOCKED),
VALUE_CHAR(DISP_E_BADPARAMCOUNT),
VALUE_CHAR(DISP_E_PARAMNOTOPTIONAL),
VALUE_CHAR(DISP_E_BADCALLEE),
VALUE_CHAR(DISP_E_NOTACOLLECTION),
//DataSource Locator Errors
VALUE_CHAR(DB_E_BADINITSTRING),
VALUE_CHAR(DB_E_NOPROVIDERSREGISTERED),
VALUE_CHAR(DB_E_MISMATCHEDPROVIDER),
//STG Errors
VALUE_CHAR(STG_E_INVALIDFUNCTION ),
VALUE_CHAR(STG_E_FILENOTFOUND ),
VALUE_CHAR(STG_E_PATHNOTFOUND ),
VALUE_CHAR(STG_E_TOOMANYOPENFILES ),
VALUE_CHAR(STG_E_ACCESSDENIED ),
VALUE_CHAR(STG_E_INVALIDHANDLE ),
VALUE_CHAR(STG_E_INSUFFICIENTMEMORY ),
VALUE_CHAR(STG_E_INVALIDPOINTER ),
VALUE_CHAR(STG_E_NOMOREFILES ),
VALUE_CHAR(STG_E_DISKISWRITEPROTECTED ),
VALUE_CHAR(STG_E_SEEKERROR ),
VALUE_CHAR(STG_E_WRITEFAULT ),
VALUE_CHAR(STG_E_READFAULT ),
VALUE_CHAR(STG_E_SHAREVIOLATION ),
VALUE_CHAR(STG_E_LOCKVIOLATION ),
VALUE_CHAR(STG_E_FILEALREADYEXISTS ),
VALUE_CHAR(STG_E_INVALIDPARAMETER ),
VALUE_CHAR(STG_E_MEDIUMFULL ),
VALUE_CHAR(STG_E_PROPSETMISMATCHED ),
VALUE_CHAR(STG_E_ABNORMALAPIEXIT ),
VALUE_CHAR(STG_E_INVALIDHEADER ),
VALUE_CHAR(STG_E_INVALIDNAME ),
VALUE_CHAR(STG_E_UNKNOWN ),
VALUE_CHAR(STG_E_UNIMPLEMENTEDFUNCTION ),
VALUE_CHAR(STG_E_INVALIDFLAG ),
VALUE_CHAR(STG_E_INUSE ),
VALUE_CHAR(STG_E_NOTCURRENT ),
VALUE_CHAR(STG_E_REVERTED ),
VALUE_CHAR(STG_E_CANTSAVE ),
VALUE_CHAR(STG_E_OLDFORMAT ),
VALUE_CHAR(STG_E_OLDDLL ),
VALUE_CHAR(STG_E_SHAREREQUIRED ),
VALUE_CHAR(STG_E_NOTFILEBASEDSTORAGE ),
VALUE_CHAR(STG_E_EXTANTMARSHALLINGS ),
VALUE_CHAR(STG_E_DOCFILECORRUPT ),
VALUE_CHAR(STG_E_BADBASEADDRESS ),
VALUE_CHAR(STG_E_INCOMPLETE ),
VALUE_CHAR(STG_E_TERMINATED ),
VALUE_CHAR(STG_S_CONVERTED ),
VALUE_CHAR(STG_S_BLOCK ),
VALUE_CHAR(STG_S_RETRYNOW ),
VALUE_CHAR(STG_S_MONITORING ),
//RPC Errors
VALUE_CHAR( CO_E_INIT_TLS ),
VALUE_CHAR( CO_E_INIT_SHARED_ALLOCATOR ),
VALUE_CHAR( CO_E_INIT_MEMORY_ALLOCATOR ),
VALUE_CHAR( CO_E_INIT_CLASS_CACHE ),
VALUE_CHAR( CO_E_INIT_RPC_CHANNEL ),
VALUE_CHAR( CO_E_INIT_TLS_SET_CHANNEL_CONTROL ),
VALUE_CHAR( CO_E_INIT_TLS_CHANNEL_CONTROL ),
VALUE_CHAR( CO_E_INIT_UNACCEPTED_USER_ALLOCATOR ),
VALUE_CHAR( CO_E_INIT_SCM_MUTEX_EXISTS ),
VALUE_CHAR( CO_E_INIT_SCM_FILE_MAPPING_EXISTS ),
VALUE_CHAR( CO_E_INIT_SCM_MAP_VIEW_OF_FILE ),
VALUE_CHAR( CO_E_INIT_SCM_EXEC_FAILURE ),
VALUE_CHAR( CO_E_INIT_ONLY_SINGLE_THREADED ),
VALUE_CHAR( CO_E_CANT_REMOTE ),
VALUE_CHAR( CO_E_BAD_SERVER_NAME ),
VALUE_CHAR( CO_E_WRONG_SERVER_IDENTITY ),
VALUE_CHAR( CO_E_OLE1DDE_DISABLED ),
VALUE_CHAR( CO_E_RUNAS_SYNTAX ),
VALUE_CHAR( CO_E_CREATEPROCESS_FAILURE ),
VALUE_CHAR( CO_E_RUNAS_CREATEPROCESS_FAILURE ),
VALUE_CHAR( CO_E_RUNAS_LOGON_FAILURE ),
VALUE_CHAR( CO_E_LAUNCH_PERMSSION_DENIED ),
VALUE_CHAR( CO_E_START_SERVICE_FAILURE ),
VALUE_CHAR( CO_E_REMOTE_COMMUNICATION_FAILURE ),
VALUE_CHAR( CO_E_SERVER_START_TIMEOUT ),
VALUE_CHAR( CO_E_CLSREG_INCONSISTENT ),
VALUE_CHAR( CO_E_IIDREG_INCONSISTENT ),
VALUE_CHAR( CO_E_NOT_SUPPORTED ),
//RPC Errors
VALUE_CHAR_HR(ERROR_BAD_FORMAT ),
VALUE_CHAR_HR(ERROR_INVALID_ACCESS ),
VALUE_CHAR_HR(ERROR_INVALID_DATA ),
VALUE_CHAR_HR(ERROR_OUTOFMEMORY ),
VALUE_CHAR_HR(ERROR_INVALID_DRIVE ),
VALUE_CHAR_HR(ERROR_CURRENT_DIRECTORY ),
VALUE_CHAR_HR(ERROR_NOT_SAME_DEVICE ),
VALUE_CHAR_HR(ERROR_NO_MORE_FILES ),
VALUE_CHAR_HR(ERROR_WRITE_PROTECT ),
VALUE_CHAR_HR(ERROR_BAD_UNIT ),
VALUE_CHAR_HR(ERROR_NOT_READY ),
VALUE_CHAR_HR(ERROR_BAD_COMMAND ),
VALUE_CHAR_HR(ERROR_CRC ),
VALUE_CHAR_HR(ERROR_BAD_LENGTH ),
VALUE_CHAR_HR(ERROR_SEEK ),
VALUE_CHAR_HR(ERROR_NOT_DOS_DISK ),
VALUE_CHAR_HR(ERROR_SECTOR_NOT_FOUND ),
VALUE_CHAR_HR(ERROR_OUT_OF_PAPER ),
VALUE_CHAR_HR(ERROR_WRITE_FAULT ),
VALUE_CHAR_HR(ERROR_READ_FAULT ),
VALUE_CHAR_HR(ERROR_GEN_FAILURE ),
VALUE_CHAR_HR(ERROR_SHARING_VIOLATION ),
VALUE_CHAR_HR(ERROR_LOCK_VIOLATION ),
VALUE_CHAR_HR(ERROR_WRONG_DISK ),
VALUE_CHAR_HR(ERROR_SHARING_BUFFER_EXCEEDED ),
VALUE_CHAR_HR(ERROR_HANDLE_EOF ),
VALUE_CHAR_HR(ERROR_HANDLE_DISK_FULL ),
VALUE_CHAR_HR(ERROR_NOT_SUPPORTED ),
VALUE_CHAR_HR(ERROR_REM_NOT_LIST ),
VALUE_CHAR_HR(ERROR_DUP_NAME ),
VALUE_CHAR_HR(ERROR_BAD_NETPATH ),
VALUE_CHAR_HR(ERROR_NETWORK_BUSY ),
VALUE_CHAR_HR(ERROR_DEV_NOT_EXIST ),
VALUE_CHAR_HR(ERROR_TOO_MANY_CMDS ),
VALUE_CHAR_HR(ERROR_ADAP_HDW_ERR ),
VALUE_CHAR_HR(ERROR_BAD_NET_RESP ),
VALUE_CHAR_HR(ERROR_UNEXP_NET_ERR ),
VALUE_CHAR_HR(ERROR_BAD_REM_ADAP ),
VALUE_CHAR_HR(ERROR_PRINTQ_FULL ),
VALUE_CHAR_HR(ERROR_NO_SPOOL_SPACE ),
VALUE_CHAR_HR(ERROR_PRINT_CANCELLED ),
VALUE_CHAR_HR(ERROR_NETNAME_DELETED ),
VALUE_CHAR_HR(ERROR_NETWORK_ACCESS_DENIED ),
VALUE_CHAR_HR(ERROR_BAD_DEV_TYPE ),
VALUE_CHAR_HR(ERROR_BAD_NET_NAME ),
VALUE_CHAR_HR(ERROR_TOO_MANY_NAMES ),
VALUE_CHAR_HR(ERROR_TOO_MANY_SESS ),
VALUE_CHAR_HR(ERROR_SHARING_PAUSED ),
VALUE_CHAR_HR(ERROR_REQ_NOT_ACCEP ),
VALUE_CHAR_HR(ERROR_REDIR_PAUSED ),
VALUE_CHAR_HR(ERROR_FILE_EXISTS ),
VALUE_CHAR_HR(ERROR_CANNOT_MAKE ),
VALUE_CHAR_HR(ERROR_FAIL_I24 ),
VALUE_CHAR_HR(ERROR_OUT_OF_STRUCTURES ),
VALUE_CHAR_HR(ERROR_ALREADY_ASSIGNED ),
VALUE_CHAR_HR(ERROR_INVALID_PASSWORD ),
VALUE_CHAR_HR(ERROR_INVALID_PARAMETER ),
VALUE_CHAR_HR(ERROR_NET_WRITE_FAULT ),
VALUE_CHAR_HR(ERROR_NO_PROC_SLOTS ),
VALUE_CHAR_HR(ERROR_TOO_MANY_SEMAPHORES ),
VALUE_CHAR_HR(ERROR_EXCL_SEM_ALREADY_OWNED ),
VALUE_CHAR_HR(ERROR_SEM_IS_SET ),
VALUE_CHAR_HR(ERROR_TOO_MANY_SEM_REQUESTS ),
VALUE_CHAR_HR(ERROR_INVALID_AT_INTERRUPT_TIME ),
VALUE_CHAR_HR(ERROR_SEM_OWNER_DIED ),
VALUE_CHAR_HR(ERROR_SEM_USER_LIMIT ),
VALUE_CHAR_HR(ERROR_DISK_CHANGE ),
VALUE_CHAR_HR(ERROR_DRIVE_LOCKED ),
VALUE_CHAR_HR(ERROR_BROKEN_PIPE ),
VALUE_CHAR_HR(ERROR_OPEN_FAILED ),
VALUE_CHAR_HR(ERROR_BUFFER_OVERFLOW ),
VALUE_CHAR_HR(ERROR_DISK_FULL ),
VALUE_CHAR_HR(ERROR_NO_MORE_SEARCH_HANDLES ),
VALUE_CHAR_HR(ERROR_INVALID_TARGET_HANDLE ),
VALUE_CHAR_HR(ERROR_INVALID_CATEGORY ),
VALUE_CHAR_HR(ERROR_INVALID_VERIFY_SWITCH ),
VALUE_CHAR_HR(ERROR_BAD_DRIVER_LEVEL ),
VALUE_CHAR_HR(ERROR_CALL_NOT_IMPLEMENTED ),
VALUE_CHAR_HR(ERROR_SEM_TIMEOUT ),
VALUE_CHAR_HR(ERROR_INSUFFICIENT_BUFFER ),
VALUE_CHAR_HR(ERROR_INVALID_NAME ),
VALUE_CHAR_HR(ERROR_INVALID_LEVEL ),
VALUE_CHAR_HR(ERROR_NO_VOLUME_LABEL ),
VALUE_CHAR_HR(ERROR_MOD_NOT_FOUND ),
VALUE_CHAR_HR(ERROR_PROC_NOT_FOUND ),
VALUE_CHAR_HR(ERROR_WAIT_NO_CHILDREN ),
VALUE_CHAR_HR(ERROR_CHILD_NOT_COMPLETE ),
VALUE_CHAR_HR(ERROR_DIRECT_ACCESS_HANDLE ),
VALUE_CHAR_HR(ERROR_NEGATIVE_SEEK ),
VALUE_CHAR_HR(ERROR_SEEK_ON_DEVICE ),
VALUE_CHAR_HR(ERROR_IS_JOIN_TARGET ),
VALUE_CHAR_HR(ERROR_IS_JOINED ),
VALUE_CHAR_HR(ERROR_IS_SUBSTED ),
VALUE_CHAR_HR(ERROR_NOT_JOINED ),
VALUE_CHAR_HR(ERROR_NOT_SUBSTED ),
VALUE_CHAR_HR(ERROR_JOIN_TO_JOIN ),
VALUE_CHAR_HR(ERROR_SUBST_TO_SUBST ),
VALUE_CHAR_HR(ERROR_JOIN_TO_SUBST ),
VALUE_CHAR_HR(ERROR_SUBST_TO_JOIN ),
VALUE_CHAR_HR(ERROR_BUSY_DRIVE ),
VALUE_CHAR_HR(ERROR_SAME_DRIVE ),
VALUE_CHAR_HR(ERROR_DIR_NOT_ROOT ),
VALUE_CHAR_HR(ERROR_DIR_NOT_EMPTY ),
VALUE_CHAR_HR(ERROR_IS_SUBST_PATH ),
VALUE_CHAR_HR(ERROR_IS_JOIN_PATH ),
VALUE_CHAR_HR(ERROR_PATH_BUSY ),
VALUE_CHAR_HR(ERROR_IS_SUBST_TARGET ),
VALUE_CHAR_HR(ERROR_SYSTEM_TRACE ),
VALUE_CHAR_HR(ERROR_INVALID_EVENT_COUNT ),
VALUE_CHAR_HR(ERROR_TOO_MANY_MUXWAITERS ),
VALUE_CHAR_HR(ERROR_INVALID_LIST_FORMAT ),
VALUE_CHAR_HR(ERROR_LABEL_TOO_LONG ),
VALUE_CHAR_HR(ERROR_TOO_MANY_TCBS ),
VALUE_CHAR_HR(ERROR_SIGNAL_REFUSED ),
VALUE_CHAR_HR(ERROR_DISCARDED ),
VALUE_CHAR_HR(ERROR_NOT_LOCKED ),
VALUE_CHAR_HR(ERROR_BAD_THREADID_ADDR ),
VALUE_CHAR_HR(ERROR_BAD_ARGUMENTS ),
VALUE_CHAR_HR(ERROR_BAD_PATHNAME ),
VALUE_CHAR_HR(ERROR_SIGNAL_PENDING ),
VALUE_CHAR_HR(ERROR_MAX_THRDS_REACHED ),
VALUE_CHAR_HR(ERROR_LOCK_FAILED ),
VALUE_CHAR_HR(ERROR_BUSY ),
VALUE_CHAR_HR(ERROR_CANCEL_VIOLATION ),
VALUE_CHAR_HR(ERROR_ATOMIC_LOCKS_NOT_SUPPORTED ),
VALUE_CHAR_HR(ERROR_INVALID_SEGMENT_NUMBER ),
VALUE_CHAR_HR(ERROR_INVALID_ORDINAL ),
VALUE_CHAR_HR(ERROR_ALREADY_EXISTS ),
VALUE_CHAR_HR(ERROR_INVALID_FLAG_NUMBER ),
VALUE_CHAR_HR(ERROR_SEM_NOT_FOUND ),
VALUE_CHAR_HR(ERROR_INVALID_STARTING_CODESEG ),
VALUE_CHAR_HR(ERROR_INVALID_STACKSEG ),
VALUE_CHAR_HR(ERROR_INVALID_MODULETYPE ),
VALUE_CHAR_HR(ERROR_INVALID_EXE_SIGNATURE ),
VALUE_CHAR_HR(ERROR_EXE_MARKED_INVALID ),
VALUE_CHAR_HR(ERROR_BAD_EXE_FORMAT ),
VALUE_CHAR_HR(ERROR_ITERATED_DATA_EXCEEDS_64k ),
VALUE_CHAR_HR(ERROR_INVALID_MINALLOCSIZE ),
VALUE_CHAR_HR(ERROR_DYNLINK_FROM_INVALID_RING ),
VALUE_CHAR_HR(ERROR_IOPL_NOT_ENABLED ),
VALUE_CHAR_HR(ERROR_INVALID_SEGDPL ),
VALUE_CHAR_HR(ERROR_AUTODATASEG_EXCEEDS_64k ),
VALUE_CHAR_HR(ERROR_RING2SEG_MUST_BE_MOVABLE ),
VALUE_CHAR_HR(ERROR_RELOC_CHAIN_XEEDS_SEGLIM ),
VALUE_CHAR_HR(ERROR_INFLOOP_IN_RELOC_CHAIN ),
VALUE_CHAR_HR(ERROR_ENVVAR_NOT_FOUND ),
VALUE_CHAR_HR(ERROR_NO_SIGNAL_SENT ),
VALUE_CHAR_HR(ERROR_FILENAME_EXCED_RANGE ),
VALUE_CHAR_HR(ERROR_RING2_STACK_IN_USE ),
VALUE_CHAR_HR(ERROR_META_EXPANSION_TOO_LONG ),
VALUE_CHAR_HR(ERROR_INVALID_SIGNAL_NUMBER ),
VALUE_CHAR_HR(ERROR_THREAD_1_INACTIVE ),
VALUE_CHAR_HR(ERROR_LOCKED ),
VALUE_CHAR_HR(ERROR_TOO_MANY_MODULES ),
VALUE_CHAR_HR(ERROR_NESTING_NOT_ALLOWED ),
VALUE_CHAR_HR(ERROR_EXE_MACHINE_TYPE_MISMATCH ),
VALUE_CHAR_HR(ERROR_BAD_PIPE ),
VALUE_CHAR_HR(ERROR_PIPE_BUSY ),
VALUE_CHAR_HR(ERROR_NO_DATA ),
VALUE_CHAR_HR(ERROR_PIPE_NOT_CONNECTED ),
VALUE_CHAR_HR(ERROR_MORE_DATA ),
VALUE_CHAR_HR(ERROR_VC_DISCONNECTED ),
VALUE_CHAR_HR(ERROR_INVALID_EA_NAME ),
VALUE_CHAR_HR(ERROR_EA_LIST_INCONSISTENT ),
VALUE_CHAR_HR(ERROR_NO_MORE_ITEMS ),
VALUE_CHAR_HR(ERROR_CANNOT_COPY ),
VALUE_CHAR_HR(ERROR_DIRECTORY ),
VALUE_CHAR_HR(ERROR_EAS_DIDNT_FIT ),
VALUE_CHAR_HR(ERROR_EA_FILE_CORRUPT ),
VALUE_CHAR_HR(ERROR_EA_TABLE_FULL ),
VALUE_CHAR_HR(ERROR_INVALID_EA_HANDLE ),
VALUE_CHAR_HR(ERROR_EAS_NOT_SUPPORTED ),
VALUE_CHAR_HR(ERROR_NOT_OWNER ),
VALUE_CHAR_HR(ERROR_TOO_MANY_POSTS ),
VALUE_CHAR_HR(ERROR_PARTIAL_COPY ),
VALUE_CHAR_HR(ERROR_MR_MID_NOT_FOUND ),
VALUE_CHAR_HR(ERROR_INVALID_ADDRESS ),
VALUE_CHAR_HR(ERROR_ARITHMETIC_OVERFLOW ),
VALUE_CHAR_HR(ERROR_PIPE_CONNECTED ),
VALUE_CHAR_HR(ERROR_PIPE_LISTENING ),
VALUE_CHAR_HR(ERROR_EA_ACCESS_DENIED ),
VALUE_CHAR_HR(ERROR_OPERATION_ABORTED ),
VALUE_CHAR_HR(ERROR_IO_INCOMPLETE ),
VALUE_CHAR_HR(ERROR_IO_PENDING ),
VALUE_CHAR_HR(ERROR_NOACCESS ),
VALUE_CHAR_HR(ERROR_SWAPERROR ),
VALUE_CHAR_HR(ERROR_STACK_OVERFLOW ),
VALUE_CHAR_HR(ERROR_INVALID_MESSAGE ),
VALUE_CHAR_HR(ERROR_CAN_NOT_COMPLETE ),
VALUE_CHAR_HR(ERROR_INVALID_FLAGS ),
VALUE_CHAR_HR(ERROR_UNRECOGNIZED_VOLUME ),
VALUE_CHAR_HR(ERROR_FILE_INVALID ),
VALUE_CHAR_HR(ERROR_FULLSCREEN_MODE ),
VALUE_CHAR_HR(ERROR_NO_TOKEN ),
VALUE_CHAR_HR(ERROR_BADDB ),
VALUE_CHAR_HR(ERROR_BADKEY ),
VALUE_CHAR_HR(ERROR_CANTOPEN ),
VALUE_CHAR_HR(ERROR_CANTREAD ),
VALUE_CHAR_HR(ERROR_CANTWRITE ),
VALUE_CHAR_HR(ERROR_REGISTRY_RECOVERED ),
VALUE_CHAR_HR(ERROR_REGISTRY_CORRUPT ),
VALUE_CHAR_HR(ERROR_REGISTRY_IO_FAILED ),
VALUE_CHAR_HR(ERROR_NOT_REGISTRY_FILE ),
VALUE_CHAR_HR(ERROR_KEY_DELETED ),
VALUE_CHAR_HR(ERROR_NO_LOG_SPACE ),
VALUE_CHAR_HR(ERROR_KEY_HAS_CHILDREN ),
VALUE_CHAR_HR(ERROR_CHILD_MUST_BE_VOLATILE ),
VALUE_CHAR_HR(ERROR_NOTIFY_ENUM_DIR ),
VALUE_CHAR_HR(ERROR_DEPENDENT_SERVICES_RUNNING ),
VALUE_CHAR_HR(ERROR_INVALID_SERVICE_CONTROL ),
VALUE_CHAR_HR(ERROR_SERVICE_REQUEST_TIMEOUT ),
VALUE_CHAR_HR(ERROR_SERVICE_NO_THREAD ),
VALUE_CHAR_HR(ERROR_SERVICE_DATABASE_LOCKED ),
VALUE_CHAR_HR(ERROR_SERVICE_ALREADY_RUNNING ),
VALUE_CHAR_HR(ERROR_INVALID_SERVICE_ACCOUNT ),
VALUE_CHAR_HR(ERROR_SERVICE_DISABLED ),
VALUE_CHAR_HR(ERROR_CIRCULAR_DEPENDENCY ),
VALUE_CHAR_HR(ERROR_SERVICE_DOES_NOT_EXIST ),
VALUE_CHAR_HR(ERROR_SERVICE_CANNOT_ACCEPT_CTRL ),
VALUE_CHAR_HR(ERROR_SERVICE_NOT_ACTIVE ),
VALUE_CHAR_HR(ERROR_FAILED_SERVICE_CONTROLLER_CONNECT ),
VALUE_CHAR_HR(ERROR_EXCEPTION_IN_SERVICE ),
VALUE_CHAR_HR(ERROR_DATABASE_DOES_NOT_EXIST ),
VALUE_CHAR_HR(ERROR_SERVICE_SPECIFIC_ERROR ),
VALUE_CHAR_HR(ERROR_PROCESS_ABORTED ),
VALUE_CHAR_HR(ERROR_SERVICE_DEPENDENCY_FAIL ),
VALUE_CHAR_HR(ERROR_SERVICE_LOGON_FAILED ),
VALUE_CHAR_HR(ERROR_SERVICE_START_HANG ),
VALUE_CHAR_HR(ERROR_INVALID_SERVICE_LOCK ),
VALUE_CHAR_HR(ERROR_SERVICE_MARKED_FOR_DELETE ),
VALUE_CHAR_HR(ERROR_SERVICE_EXISTS ),
VALUE_CHAR_HR(ERROR_ALREADY_RUNNING_LKG ),
VALUE_CHAR_HR(ERROR_SERVICE_DEPENDENCY_DELETED ),
VALUE_CHAR_HR(ERROR_BOOT_ALREADY_ACCEPTED ),
VALUE_CHAR_HR(ERROR_SERVICE_NEVER_STARTED ),
VALUE_CHAR_HR(ERROR_DUPLICATE_SERVICE_NAME ),
VALUE_CHAR_HR(ERROR_DIFFERENT_SERVICE_ACCOUNT ),
VALUE_CHAR_HR(ERROR_END_OF_MEDIA ),
VALUE_CHAR_HR(ERROR_FILEMARK_DETECTED ),
VALUE_CHAR_HR(ERROR_BEGINNING_OF_MEDIA ),
VALUE_CHAR_HR(ERROR_SETMARK_DETECTED ),
VALUE_CHAR_HR(ERROR_NO_DATA_DETECTED ),
VALUE_CHAR_HR(ERROR_PARTITION_FAILURE ),
VALUE_CHAR_HR(ERROR_INVALID_BLOCK_LENGTH ),
VALUE_CHAR_HR(ERROR_DEVICE_NOT_PARTITIONED ),
VALUE_CHAR_HR(ERROR_UNABLE_TO_LOCK_MEDIA ),
VALUE_CHAR_HR(ERROR_UNABLE_TO_UNLOAD_MEDIA ),
VALUE_CHAR_HR(ERROR_MEDIA_CHANGED ),
VALUE_CHAR_HR(ERROR_BUS_RESET ),
VALUE_CHAR_HR(ERROR_NO_MEDIA_IN_DRIVE ),
VALUE_CHAR_HR(ERROR_NO_UNICODE_TRANSLATION ),
VALUE_CHAR_HR(ERROR_DLL_INIT_FAILED ),
VALUE_CHAR_HR(ERROR_SHUTDOWN_IN_PROGRESS ),
VALUE_CHAR_HR(ERROR_NO_SHUTDOWN_IN_PROGRESS ),
VALUE_CHAR_HR(ERROR_IO_DEVICE ),
VALUE_CHAR_HR(ERROR_SERIAL_NO_DEVICE ),
VALUE_CHAR_HR(ERROR_IRQ_BUSY ),
VALUE_CHAR_HR(ERROR_MORE_WRITES ),
VALUE_CHAR_HR(ERROR_COUNTER_TIMEOUT ),
VALUE_CHAR_HR(ERROR_FLOPPY_ID_MARK_NOT_FOUND ),
VALUE_CHAR_HR(ERROR_FLOPPY_WRONG_CYLINDER ),
VALUE_CHAR_HR(ERROR_FLOPPY_UNKNOWN_ERROR ),
VALUE_CHAR_HR(ERROR_FLOPPY_BAD_REGISTERS ),
VALUE_CHAR_HR(ERROR_DISK_RECALIBRATE_FAILED ),
VALUE_CHAR_HR(ERROR_DISK_OPERATION_FAILED ),
VALUE_CHAR_HR(ERROR_DISK_RESET_FAILED ),
VALUE_CHAR_HR(ERROR_EOM_OVERFLOW ),
VALUE_CHAR_HR(ERROR_NOT_ENOUGH_SERVER_MEMORY ),
VALUE_CHAR_HR(ERROR_POSSIBLE_DEADLOCK ),
VALUE_CHAR_HR(ERROR_MAPPED_ALIGNMENT ),
VALUE_CHAR_HR(ERROR_SET_POWER_STATE_VETOED ),
VALUE_CHAR_HR(ERROR_SET_POWER_STATE_FAILED ),
VALUE_CHAR_HR(ERROR_TOO_MANY_LINKS ),
VALUE_CHAR_HR(ERROR_OLD_WIN_VERSION ),
VALUE_CHAR_HR(ERROR_APP_WRONG_OS ),
VALUE_CHAR_HR(ERROR_SINGLE_INSTANCE_APP ),
VALUE_CHAR_HR(ERROR_RMODE_APP ),
VALUE_CHAR_HR(ERROR_INVALID_DLL ),
VALUE_CHAR_HR(ERROR_NO_ASSOCIATION ),
VALUE_CHAR_HR(ERROR_DDE_FAIL ),
VALUE_CHAR_HR(ERROR_DLL_NOT_FOUND ),
VALUE_CHAR_HR(ERROR_BAD_USERNAME ),
VALUE_CHAR_HR(ERROR_NOT_CONNECTED ),
VALUE_CHAR_HR(ERROR_OPEN_FILES ),
VALUE_CHAR_HR(ERROR_ACTIVE_CONNECTIONS ),
VALUE_CHAR_HR(ERROR_DEVICE_IN_USE ),
VALUE_CHAR_HR(ERROR_BAD_DEVICE ),
VALUE_CHAR_HR(ERROR_CONNECTION_UNAVAIL ),
VALUE_CHAR_HR(ERROR_DEVICE_ALREADY_REMEMBERED ),
VALUE_CHAR_HR(ERROR_NO_NET_OR_BAD_PATH ),
VALUE_CHAR_HR(ERROR_BAD_PROVIDER ),
VALUE_CHAR_HR(ERROR_CANNOT_OPEN_PROFILE ),
VALUE_CHAR_HR(ERROR_BAD_PROFILE ),
VALUE_CHAR_HR(ERROR_NOT_CONTAINER ),
VALUE_CHAR_HR(ERROR_EXTENDED_ERROR ),
VALUE_CHAR_HR(ERROR_INVALID_GROUPNAME ),
VALUE_CHAR_HR(ERROR_INVALID_COMPUTERNAME ),
VALUE_CHAR_HR(ERROR_INVALID_EVENTNAME ),
VALUE_CHAR_HR(ERROR_INVALID_DOMAINNAME ),
VALUE_CHAR_HR(ERROR_INVALID_SERVICENAME ),
VALUE_CHAR_HR(ERROR_INVALID_NETNAME ),
VALUE_CHAR_HR(ERROR_INVALID_SHARENAME ),
VALUE_CHAR_HR(ERROR_INVALID_PASSWORDNAME ),
VALUE_CHAR_HR(ERROR_INVALID_MESSAGENAME ),
VALUE_CHAR_HR(ERROR_INVALID_MESSAGEDEST ),
VALUE_CHAR_HR(ERROR_SESSION_CREDENTIAL_CONFLICT ),
VALUE_CHAR_HR(ERROR_REMOTE_SESSION_LIMIT_EXCEEDED ),
VALUE_CHAR_HR(ERROR_DUP_DOMAINNAME ),
VALUE_CHAR_HR(ERROR_NO_NETWORK ),
VALUE_CHAR_HR(ERROR_CANCELLED ),
VALUE_CHAR_HR(ERROR_USER_MAPPED_FILE ),
VALUE_CHAR_HR(ERROR_CONNECTION_REFUSED ),
VALUE_CHAR_HR(ERROR_GRACEFUL_DISCONNECT ),
VALUE_CHAR_HR(ERROR_ADDRESS_ALREADY_ASSOCIATED ),
VALUE_CHAR_HR(ERROR_ADDRESS_NOT_ASSOCIATED ),
VALUE_CHAR_HR(ERROR_CONNECTION_INVALID ),
VALUE_CHAR_HR(ERROR_CONNECTION_ACTIVE ),
VALUE_CHAR_HR(ERROR_NETWORK_UNREACHABLE ),
VALUE_CHAR_HR(ERROR_HOST_UNREACHABLE ),
VALUE_CHAR_HR(ERROR_PROTOCOL_UNREACHABLE ),
VALUE_CHAR_HR(ERROR_PORT_UNREACHABLE ),
VALUE_CHAR_HR(ERROR_REQUEST_ABORTED ),
VALUE_CHAR_HR(ERROR_CONNECTION_ABORTED ),
VALUE_CHAR_HR(ERROR_RETRY ),
VALUE_CHAR_HR(ERROR_CONNECTION_COUNT_LIMIT ),
VALUE_CHAR_HR(ERROR_LOGIN_TIME_RESTRICTION ),
VALUE_CHAR_HR(ERROR_LOGIN_WKSTA_RESTRICTION ),
VALUE_CHAR_HR(ERROR_INCORRECT_ADDRESS ),
VALUE_CHAR_HR(ERROR_ALREADY_REGISTERED ),
VALUE_CHAR_HR(ERROR_SERVICE_NOT_FOUND ),
VALUE_CHAR_HR(ERROR_NOT_AUTHENTICATED ),
VALUE_CHAR_HR(ERROR_NOT_LOGGED_ON ),
VALUE_CHAR_HR(ERROR_CONTINUE ),
VALUE_CHAR_HR(ERROR_ALREADY_INITIALIZED ),
VALUE_CHAR_HR(ERROR_NO_MORE_DEVICES ),
VALUE_CHAR_HR(ERROR_NOT_ALL_ASSIGNED ),
VALUE_CHAR_HR(ERROR_SOME_NOT_MAPPED ),
VALUE_CHAR_HR(ERROR_NO_QUOTAS_FOR_ACCOUNT ),
VALUE_CHAR_HR(ERROR_LOCAL_USER_SESSION_KEY ),
VALUE_CHAR_HR(ERROR_NULL_LM_PASSWORD ),
VALUE_CHAR_HR(ERROR_UNKNOWN_REVISION ),
VALUE_CHAR_HR(ERROR_REVISION_MISMATCH ),
VALUE_CHAR_HR(ERROR_INVALID_OWNER ),
VALUE_CHAR_HR(ERROR_INVALID_PRIMARY_GROUP ),
VALUE_CHAR_HR(ERROR_NO_IMPERSONATION_TOKEN ),
VALUE_CHAR_HR(ERROR_CANT_DISABLE_MANDATORY ),
VALUE_CHAR_HR(ERROR_NO_LOGON_SERVERS ),
VALUE_CHAR_HR(ERROR_NO_SUCH_LOGON_SESSION ),
VALUE_CHAR_HR(ERROR_NO_SUCH_PRIVILEGE ),
VALUE_CHAR_HR(ERROR_PRIVILEGE_NOT_HELD ),
VALUE_CHAR_HR(ERROR_INVALID_ACCOUNT_NAME ),
VALUE_CHAR_HR(ERROR_USER_EXISTS ),
VALUE_CHAR_HR(ERROR_NO_SUCH_USER ),
VALUE_CHAR_HR(ERROR_GROUP_EXISTS ),
VALUE_CHAR_HR(ERROR_NO_SUCH_GROUP ),
VALUE_CHAR_HR(ERROR_MEMBER_IN_GROUP ),
VALUE_CHAR_HR(ERROR_MEMBER_NOT_IN_GROUP ),
VALUE_CHAR_HR(ERROR_LAST_ADMIN ),
VALUE_CHAR_HR(ERROR_WRONG_PASSWORD ),
VALUE_CHAR_HR(ERROR_ILL_FORMED_PASSWORD ),
VALUE_CHAR_HR(ERROR_PASSWORD_RESTRICTION ),
VALUE_CHAR_HR(ERROR_LOGON_FAILURE ),
VALUE_CHAR_HR(ERROR_ACCOUNT_RESTRICTION ),
VALUE_CHAR_HR(ERROR_INVALID_LOGON_HOURS ),
VALUE_CHAR_HR(ERROR_INVALID_WORKSTATION ),
VALUE_CHAR_HR(ERROR_PASSWORD_EXPIRED ),
VALUE_CHAR_HR(ERROR_ACCOUNT_DISABLED ),
VALUE_CHAR_HR(ERROR_NONE_MAPPED ),
VALUE_CHAR_HR(ERROR_TOO_MANY_LUIDS_REQUESTED ),
VALUE_CHAR_HR(ERROR_LUIDS_EXHAUSTED ),
VALUE_CHAR_HR(ERROR_INVALID_SUB_AUTHORITY ),
VALUE_CHAR_HR(ERROR_INVALID_ACL ),
VALUE_CHAR_HR(ERROR_INVALID_SID ),
VALUE_CHAR_HR(ERROR_INVALID_SECURITY_DESCR ),
VALUE_CHAR_HR(ERROR_BAD_INHERITANCE_ACL ),
VALUE_CHAR_HR(ERROR_SERVER_DISABLED ),
VALUE_CHAR_HR(ERROR_SERVER_NOT_DISABLED ),
VALUE_CHAR_HR(ERROR_INVALID_ID_AUTHORITY ),
VALUE_CHAR_HR(ERROR_ALLOTTED_SPACE_EXCEEDED ),
VALUE_CHAR_HR(ERROR_INVALID_GROUP_ATTRIBUTES ),
VALUE_CHAR_HR(ERROR_BAD_IMPERSONATION_LEVEL ),
VALUE_CHAR_HR(ERROR_CANT_OPEN_ANONYMOUS ),
VALUE_CHAR_HR(ERROR_BAD_VALIDATION_CLASS ),
VALUE_CHAR_HR(ERROR_BAD_TOKEN_TYPE ),
VALUE_CHAR_HR(ERROR_NO_SECURITY_ON_OBJECT ),
VALUE_CHAR_HR(ERROR_CANT_ACCESS_DOMAIN_INFO ),
VALUE_CHAR_HR(ERROR_INVALID_SERVER_STATE ),
VALUE_CHAR_HR(ERROR_INVALID_DOMAIN_STATE ),
VALUE_CHAR_HR(ERROR_INVALID_DOMAIN_ROLE ),
VALUE_CHAR_HR(ERROR_NO_SUCH_DOMAIN ),
VALUE_CHAR_HR(ERROR_DOMAIN_EXISTS ),
VALUE_CHAR_HR(ERROR_DOMAIN_LIMIT_EXCEEDED ),
VALUE_CHAR_HR(ERROR_INTERNAL_DB_CORRUPTION ),
VALUE_CHAR_HR(ERROR_INTERNAL_ERROR ),
VALUE_CHAR_HR(ERROR_GENERIC_NOT_MAPPED ),
VALUE_CHAR_HR(ERROR_BAD_DESCRIPTOR_FORMAT ),
VALUE_CHAR_HR(ERROR_NOT_LOGON_PROCESS ),
VALUE_CHAR_HR(ERROR_LOGON_SESSION_EXISTS ),
VALUE_CHAR_HR(ERROR_NO_SUCH_PACKAGE ),
VALUE_CHAR_HR(ERROR_BAD_LOGON_SESSION_STATE ),
VALUE_CHAR_HR(ERROR_LOGON_SESSION_COLLISION ),
VALUE_CHAR_HR(ERROR_INVALID_LOGON_TYPE ),
VALUE_CHAR_HR(ERROR_CANNOT_IMPERSONATE ),
VALUE_CHAR_HR(ERROR_RXACT_INVALID_STATE ),
VALUE_CHAR_HR(ERROR_RXACT_COMMIT_FAILURE ),
VALUE_CHAR_HR(ERROR_SPECIAL_ACCOUNT ),
VALUE_CHAR_HR(ERROR_SPECIAL_GROUP ),
VALUE_CHAR_HR(ERROR_SPECIAL_USER ),
VALUE_CHAR_HR(ERROR_MEMBERS_PRIMARY_GROUP ),
VALUE_CHAR_HR(ERROR_TOKEN_ALREADY_IN_USE ),
VALUE_CHAR_HR(ERROR_NO_SUCH_ALIAS ),
VALUE_CHAR_HR(ERROR_MEMBER_NOT_IN_ALIAS ),
VALUE_CHAR_HR(ERROR_MEMBER_IN_ALIAS ),
VALUE_CHAR_HR(ERROR_ALIAS_EXISTS ),
VALUE_CHAR_HR(ERROR_LOGON_NOT_GRANTED ),
VALUE_CHAR_HR(ERROR_TOO_MANY_SECRETS ),
VALUE_CHAR_HR(ERROR_SECRET_TOO_LONG ),
VALUE_CHAR_HR(ERROR_INTERNAL_DB_ERROR ),
VALUE_CHAR_HR(ERROR_TOO_MANY_CONTEXT_IDS ),
VALUE_CHAR_HR(ERROR_LOGON_TYPE_NOT_GRANTED ),
VALUE_CHAR_HR(ERROR_NT_CROSS_ENCRYPTION_REQUIRED ),
VALUE_CHAR_HR(ERROR_NO_SUCH_MEMBER ),
VALUE_CHAR_HR(ERROR_INVALID_MEMBER ),
VALUE_CHAR_HR(ERROR_TOO_MANY_SIDS ),
VALUE_CHAR_HR(ERROR_LM_CROSS_ENCRYPTION_REQUIRED ),
VALUE_CHAR_HR(ERROR_NO_INHERITANCE ),
VALUE_CHAR_HR(ERROR_FILE_CORRUPT ),
VALUE_CHAR_HR(ERROR_DISK_CORRUPT ),
VALUE_CHAR_HR(ERROR_NO_USER_SESSION_KEY ),
VALUE_CHAR_HR(ERROR_LICENSE_QUOTA_EXCEEDED ),
VALUE_CHAR_HR(ERROR_INVALID_WINDOW_HANDLE ),
VALUE_CHAR_HR(ERROR_INVALID_MENU_HANDLE ),
VALUE_CHAR_HR(ERROR_INVALID_CURSOR_HANDLE ),
VALUE_CHAR_HR(ERROR_INVALID_ACCEL_HANDLE ),
VALUE_CHAR_HR(ERROR_INVALID_HOOK_HANDLE ),
VALUE_CHAR_HR(ERROR_INVALID_DWP_HANDLE ),
VALUE_CHAR_HR(ERROR_TLW_WITH_WSCHILD ),
VALUE_CHAR_HR(ERROR_CANNOT_FIND_WND_CLASS ),
VALUE_CHAR_HR(ERROR_WINDOW_OF_OTHER_THREAD ),
VALUE_CHAR_HR(ERROR_HOTKEY_ALREADY_REGISTERED ),
VALUE_CHAR_HR(ERROR_CLASS_ALREADY_EXISTS ),
VALUE_CHAR_HR(ERROR_CLASS_DOES_NOT_EXIST ),
VALUE_CHAR_HR(ERROR_CLASS_HAS_WINDOWS ),
VALUE_CHAR_HR(ERROR_INVALID_INDEX ),
VALUE_CHAR_HR(ERROR_INVALID_ICON_HANDLE ),
VALUE_CHAR_HR(ERROR_PRIVATE_DIALOG_INDEX ),
VALUE_CHAR_HR(ERROR_LISTBOX_ID_NOT_FOUND ),
VALUE_CHAR_HR(ERROR_NO_WILDCARD_CHARACTERS ),
VALUE_CHAR_HR(ERROR_CLIPBOARD_NOT_OPEN ),
VALUE_CHAR_HR(ERROR_HOTKEY_NOT_REGISTERED ),
VALUE_CHAR_HR(ERROR_WINDOW_NOT_DIALOG ),
VALUE_CHAR_HR(ERROR_CONTROL_ID_NOT_FOUND ),
VALUE_CHAR_HR(ERROR_INVALID_COMBOBOX_MESSAGE ),
VALUE_CHAR_HR(ERROR_WINDOW_NOT_COMBOBOX ),
VALUE_CHAR_HR(ERROR_INVALID_EDIT_HEIGHT ),
VALUE_CHAR_HR(ERROR_DC_NOT_FOUND ),
VALUE_CHAR_HR(ERROR_INVALID_HOOK_FILTER ),
VALUE_CHAR_HR(ERROR_INVALID_FILTER_PROC ),
VALUE_CHAR_HR(ERROR_HOOK_NEEDS_HMOD ),
VALUE_CHAR_HR(ERROR_GLOBAL_ONLY_HOOK ),
VALUE_CHAR_HR(ERROR_JOURNAL_HOOK_SET ),
VALUE_CHAR_HR(ERROR_HOOK_NOT_INSTALLED ),
VALUE_CHAR_HR(ERROR_INVALID_LB_MESSAGE ),
VALUE_CHAR_HR(ERROR_SETCOUNT_ON_BAD_LB ),
VALUE_CHAR_HR(ERROR_LB_WITHOUT_TABSTOPS ),
VALUE_CHAR_HR(ERROR_DESTROY_OBJECT_OF_OTHER_THREAD ),
VALUE_CHAR_HR(ERROR_CHILD_WINDOW_MENU ),
VALUE_CHAR_HR(ERROR_NO_SYSTEM_MENU ),
VALUE_CHAR_HR(ERROR_INVALID_MSGBOX_STYLE ),
VALUE_CHAR_HR(ERROR_INVALID_SPI_VALUE ),
VALUE_CHAR_HR(ERROR_SCREEN_ALREADY_LOCKED ),
VALUE_CHAR_HR(ERROR_HWNDS_HAVE_DIFF_PARENT ),
VALUE_CHAR_HR(ERROR_NOT_CHILD_WINDOW ),
VALUE_CHAR_HR(ERROR_INVALID_GW_COMMAND ),
VALUE_CHAR_HR(ERROR_INVALID_THREAD_ID ),
VALUE_CHAR_HR(ERROR_NON_MDICHILD_WINDOW ),
VALUE_CHAR_HR(ERROR_POPUP_ALREADY_ACTIVE ),
VALUE_CHAR_HR(ERROR_NO_SCROLLBARS ),
VALUE_CHAR_HR(ERROR_INVALID_SCROLLBAR_RANGE ),
VALUE_CHAR_HR(ERROR_INVALID_SHOWWIN_COMMAND ),
VALUE_CHAR_HR(ERROR_NO_SYSTEM_RESOURCES ),
VALUE_CHAR_HR(ERROR_NONPAGED_SYSTEM_RESOURCES ),
VALUE_CHAR_HR(ERROR_PAGED_SYSTEM_RESOURCES ),
VALUE_CHAR_HR(ERROR_WORKING_SET_QUOTA ),
VALUE_CHAR_HR(ERROR_PAGEFILE_QUOTA ),
VALUE_CHAR_HR(ERROR_COMMITMENT_LIMIT ),
VALUE_CHAR_HR(ERROR_MENU_ITEM_NOT_FOUND ),
VALUE_CHAR_HR(ERROR_INVALID_KEYBOARD_HANDLE ),
VALUE_CHAR_HR(ERROR_HOOK_TYPE_NOT_ALLOWED ),
VALUE_CHAR_HR(ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION ),
VALUE_CHAR_HR(ERROR_TIMEOUT ),
VALUE_CHAR_HR(ERROR_EVENTLOG_FILE_CORRUPT ),
VALUE_CHAR_HR(ERROR_EVENTLOG_CANT_START ),
VALUE_CHAR_HR(ERROR_LOG_FILE_FULL ),
VALUE_CHAR_HR(ERROR_EVENTLOG_FILE_CHANGED ),
VALUE_CHAR_HR(RPC_S_INVALID_STRING_BINDING ),
VALUE_CHAR_HR(RPC_S_WRONG_KIND_OF_BINDING ),
VALUE_CHAR_HR(RPC_S_INVALID_BINDING ),
VALUE_CHAR_HR(RPC_S_PROTSEQ_NOT_SUPPORTED ),
VALUE_CHAR_HR(RPC_S_INVALID_RPC_PROTSEQ ),
VALUE_CHAR_HR(RPC_S_INVALID_STRING_UUID ),
VALUE_CHAR_HR(RPC_S_INVALID_ENDPOINT_FORMAT ),
VALUE_CHAR_HR(RPC_S_INVALID_NET_ADDR ),
VALUE_CHAR_HR(RPC_S_NO_ENDPOINT_FOUND ),
VALUE_CHAR_HR(RPC_S_INVALID_TIMEOUT ),
VALUE_CHAR_HR(RPC_S_OBJECT_NOT_FOUND ),
VALUE_CHAR_HR(RPC_S_ALREADY_REGISTERED ),
VALUE_CHAR_HR(RPC_S_TYPE_ALREADY_REGISTERED ),
VALUE_CHAR_HR(RPC_S_ALREADY_LISTENING ),
VALUE_CHAR_HR(RPC_S_NO_PROTSEQS_REGISTERED ),
VALUE_CHAR_HR(RPC_S_NOT_LISTENING ),
VALUE_CHAR_HR(RPC_S_UNKNOWN_MGR_TYPE ),
VALUE_CHAR_HR(RPC_S_UNKNOWN_IF ),
VALUE_CHAR_HR(RPC_S_NO_BINDINGS ),
VALUE_CHAR_HR(RPC_S_NO_PROTSEQS ),
VALUE_CHAR_HR(RPC_S_CANT_CREATE_ENDPOINT ),
VALUE_CHAR_HR(RPC_S_OUT_OF_RESOURCES ),
VALUE_CHAR_HR(RPC_S_SERVER_UNAVAILABLE ),
VALUE_CHAR_HR(RPC_S_SERVER_TOO_BUSY ),
VALUE_CHAR_HR(RPC_S_INVALID_NETWORK_OPTIONS ),
VALUE_CHAR_HR(RPC_S_NO_CALL_ACTIVE ),
VALUE_CHAR_HR(RPC_S_CALL_FAILED ),
VALUE_CHAR_HR(RPC_S_CALL_FAILED_DNE ),
VALUE_CHAR_HR(RPC_S_PROTOCOL_ERROR ),
VALUE_CHAR_HR(RPC_S_UNSUPPORTED_TRANS_SYN ),
VALUE_CHAR_HR(RPC_S_UNSUPPORTED_TYPE ),
VALUE_CHAR_HR(RPC_S_INVALID_TAG ),
VALUE_CHAR_HR(RPC_S_INVALID_BOUND ),
VALUE_CHAR_HR(RPC_S_NO_ENTRY_NAME ),
VALUE_CHAR_HR(RPC_S_INVALID_NAME_SYNTAX ),
VALUE_CHAR_HR(RPC_S_UNSUPPORTED_NAME_SYNTAX ),
VALUE_CHAR_HR(RPC_S_UUID_NO_ADDRESS ),
VALUE_CHAR_HR(RPC_S_DUPLICATE_ENDPOINT ),
VALUE_CHAR_HR(RPC_S_UNKNOWN_AUTHN_TYPE ),
VALUE_CHAR_HR(RPC_S_MAX_CALLS_TOO_SMALL ),
VALUE_CHAR_HR(RPC_S_STRING_TOO_LONG ),
VALUE_CHAR_HR(RPC_S_PROTSEQ_NOT_FOUND ),
VALUE_CHAR_HR(RPC_S_PROCNUM_OUT_OF_RANGE ),
VALUE_CHAR_HR(RPC_S_BINDING_HAS_NO_AUTH ),
VALUE_CHAR_HR(RPC_S_UNKNOWN_AUTHN_SERVICE ),
VALUE_CHAR_HR(RPC_S_UNKNOWN_AUTHN_LEVEL ),
VALUE_CHAR_HR(RPC_S_INVALID_AUTH_IDENTITY ),
VALUE_CHAR_HR(RPC_S_UNKNOWN_AUTHZ_SERVICE ),
VALUE_CHAR_HR(EPT_S_INVALID_ENTRY ),
VALUE_CHAR_HR(EPT_S_CANT_PERFORM_OP ),
VALUE_CHAR_HR(EPT_S_NOT_REGISTERED ),
VALUE_CHAR_HR(RPC_S_NOTHING_TO_EXPORT ),
VALUE_CHAR_HR(RPC_S_INCOMPLETE_NAME ),
VALUE_CHAR_HR(RPC_S_INVALID_VERS_OPTION ),
VALUE_CHAR_HR(RPC_S_NO_MORE_MEMBERS ),
VALUE_CHAR_HR(RPC_S_NOT_ALL_OBJS_UNEXPORTED ),
VALUE_CHAR_HR(RPC_S_INTERFACE_NOT_FOUND ),
VALUE_CHAR_HR(RPC_S_ENTRY_ALREADY_EXISTS ),
VALUE_CHAR_HR(RPC_S_ENTRY_NOT_FOUND ),
VALUE_CHAR_HR(RPC_S_NAME_SERVICE_UNAVAILABLE ),
VALUE_CHAR_HR(RPC_S_INVALID_NAF_ID ),
VALUE_CHAR_HR(RPC_S_CANNOT_SUPPORT ),
VALUE_CHAR_HR(RPC_S_NO_CONTEXT_AVAILABLE ),
VALUE_CHAR_HR(RPC_S_INTERNAL_ERROR ),
VALUE_CHAR_HR(RPC_S_ZERO_DIVIDE ),
VALUE_CHAR_HR(RPC_S_ADDRESS_ERROR ),
VALUE_CHAR_HR(RPC_S_FP_DIV_ZERO ),
VALUE_CHAR_HR(RPC_S_FP_UNDERFLOW ),
VALUE_CHAR_HR(RPC_S_FP_OVERFLOW ),
VALUE_CHAR_HR(RPC_X_NO_MORE_ENTRIES ),
VALUE_CHAR_HR(RPC_X_SS_CHAR_TRANS_OPEN_FAIL ),
VALUE_CHAR_HR(RPC_X_SS_CHAR_TRANS_SHORT_FILE ),
VALUE_CHAR_HR(RPC_X_SS_IN_NULL_CONTEXT ),
VALUE_CHAR_HR(RPC_X_SS_CONTEXT_DAMAGED ),
VALUE_CHAR_HR(RPC_X_SS_HANDLES_MISMATCH ),
VALUE_CHAR_HR(RPC_X_SS_CANNOT_GET_CALL_HANDLE ),
VALUE_CHAR_HR(RPC_X_NULL_REF_POINTER ),
VALUE_CHAR_HR(RPC_X_ENUM_VALUE_OUT_OF_RANGE ),
VALUE_CHAR_HR(RPC_X_BYTE_COUNT_TOO_SMALL ),
VALUE_CHAR_HR(RPC_X_BAD_STUB_DATA ),
VALUE_CHAR_HR(ERROR_INVALID_USER_BUFFER ),
VALUE_CHAR_HR(ERROR_UNRECOGNIZED_MEDIA ),
VALUE_CHAR_HR(ERROR_NO_TRUST_LSA_SECRET ),
VALUE_CHAR_HR(ERROR_NO_TRUST_SAM_ACCOUNT ),
VALUE_CHAR_HR(ERROR_TRUSTED_DOMAIN_FAILURE ),
VALUE_CHAR_HR(ERROR_TRUSTED_RELATIONSHIP_FAILURE ),
VALUE_CHAR_HR(ERROR_TRUST_FAILURE ),
VALUE_CHAR_HR(RPC_S_CALL_IN_PROGRESS ),
VALUE_CHAR_HR(ERROR_NETLOGON_NOT_STARTED ),
VALUE_CHAR_HR(ERROR_ACCOUNT_EXPIRED ),
VALUE_CHAR_HR(ERROR_REDIRECTOR_HAS_OPEN_HANDLES ),
VALUE_CHAR_HR(ERROR_PRINTER_DRIVER_ALREADY_INSTALLED ),
VALUE_CHAR_HR(ERROR_UNKNOWN_PORT ),
VALUE_CHAR_HR(ERROR_UNKNOWN_PRINTER_DRIVER ),
VALUE_CHAR_HR(ERROR_UNKNOWN_PRINTPROCESSOR ),
VALUE_CHAR_HR(ERROR_INVALID_SEPARATOR_FILE ),
VALUE_CHAR_HR(ERROR_INVALID_PRIORITY ),
VALUE_CHAR_HR(ERROR_INVALID_PRINTER_NAME ),
VALUE_CHAR_HR(ERROR_PRINTER_ALREADY_EXISTS ),
VALUE_CHAR_HR(ERROR_INVALID_PRINTER_COMMAND ),
VALUE_CHAR_HR(ERROR_INVALID_DATATYPE ),
VALUE_CHAR_HR(ERROR_INVALID_ENVIRONMENT ),
VALUE_CHAR_HR(RPC_S_NO_MORE_BINDINGS ),
VALUE_CHAR_HR(ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT ),
VALUE_CHAR_HR(ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT ),
VALUE_CHAR_HR(ERROR_NOLOGON_SERVER_TRUST_ACCOUNT ),
VALUE_CHAR_HR(ERROR_DOMAIN_TRUST_INCONSISTENT ),
VALUE_CHAR_HR(ERROR_SERVER_HAS_OPEN_HANDLES ),
VALUE_CHAR_HR(ERROR_RESOURCE_DATA_NOT_FOUND ),
VALUE_CHAR_HR(ERROR_RESOURCE_TYPE_NOT_FOUND ),
VALUE_CHAR_HR(ERROR_RESOURCE_NAME_NOT_FOUND ),
VALUE_CHAR_HR(ERROR_RESOURCE_LANG_NOT_FOUND ),
VALUE_CHAR_HR(ERROR_NOT_ENOUGH_QUOTA ),
VALUE_CHAR_HR(RPC_S_NO_INTERFACES ),
VALUE_CHAR_HR(RPC_S_CALL_CANCELLED ),
VALUE_CHAR_HR(RPC_S_BINDING_INCOMPLETE ),
VALUE_CHAR_HR(RPC_S_COMM_FAILURE ),
VALUE_CHAR_HR(RPC_S_UNSUPPORTED_AUTHN_LEVEL ),
VALUE_CHAR_HR(RPC_S_NO_PRINC_NAME ),
VALUE_CHAR_HR(RPC_S_NOT_RPC_ERROR ),
VALUE_CHAR_HR(RPC_S_UUID_LOCAL_ONLY ),
VALUE_CHAR_HR(RPC_S_SEC_PKG_ERROR ),
VALUE_CHAR_HR(RPC_S_NOT_CANCELLED ),
VALUE_CHAR_HR(RPC_X_INVALID_ES_ACTION ),
VALUE_CHAR_HR(RPC_X_WRONG_ES_VERSION ),
VALUE_CHAR_HR(RPC_X_WRONG_STUB_VERSION ),
VALUE_CHAR_HR(RPC_X_INVALID_PIPE_OBJECT ),
VALUE_CHAR_HR(RPC_X_INVALID_PIPE_OPERATION ),
VALUE_CHAR_HR(RPC_X_WRONG_PIPE_VERSION ),
VALUE_CHAR_HR(RPC_S_GROUP_MEMBER_NOT_FOUND ),
VALUE_CHAR_HR(EPT_S_CANT_CREATE ),
VALUE_CHAR_HR(RPC_S_INVALID_OBJECT ),
VALUE_CHAR_HR(ERROR_INVALID_TIME ),
VALUE_CHAR_HR(ERROR_INVALID_FORM_NAME ),
VALUE_CHAR_HR(ERROR_INVALID_FORM_SIZE ),
VALUE_CHAR_HR(ERROR_ALREADY_WAITING ),
VALUE_CHAR_HR(ERROR_PRINTER_DELETED ),
VALUE_CHAR_HR(ERROR_INVALID_PRINTER_STATE ),
VALUE_CHAR_HR(ERROR_PASSWORD_MUST_CHANGE ),
VALUE_CHAR_HR(ERROR_DOMAIN_CONTROLLER_NOT_FOUND ),
VALUE_CHAR_HR(ERROR_ACCOUNT_LOCKED_OUT ),
VALUE_CHAR_HR(OR_INVALID_OXID ),
VALUE_CHAR_HR(OR_INVALID_OID ),
VALUE_CHAR_HR(OR_INVALID_SET ),
VALUE_CHAR_HR(RPC_S_SEND_INCOMPLETE ),
VALUE_CHAR_HR(ERROR_NO_BROWSER_SERVERS_FOUND ),
VALUE_CHAR_HR(ERROR_INVALID_PIXEL_FORMAT ),
VALUE_CHAR_HR(ERROR_BAD_DRIVER ),
VALUE_CHAR_HR(ERROR_INVALID_WINDOW_STYLE ),
VALUE_CHAR_HR(ERROR_METAFILE_NOT_SUPPORTED ),
VALUE_CHAR_HR(ERROR_TRANSFORM_NOT_SUPPORTED ),
VALUE_CHAR_HR(ERROR_CLIPPING_NOT_SUPPORTED ),
VALUE_CHAR_HR(ERROR_UNKNOWN_PRINT_MONITOR ),
VALUE_CHAR_HR(ERROR_PRINTER_DRIVER_IN_USE ),
VALUE_CHAR_HR(ERROR_SPOOL_FILE_NOT_FOUND ),
VALUE_CHAR_HR(ERROR_SPL_NO_STARTDOC ),
VALUE_CHAR_HR(ERROR_SPL_NO_ADDJOB ),
VALUE_CHAR_HR(ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED ),
VALUE_CHAR_HR(ERROR_PRINT_MONITOR_ALREADY_INSTALLED ),
VALUE_CHAR_HR(ERROR_INVALID_PRINT_MONITOR ),
VALUE_CHAR_HR(ERROR_PRINT_MONITOR_IN_USE ),
VALUE_CHAR_HR(ERROR_PRINTER_HAS_JOBS_QUEUED ),
VALUE_CHAR_HR(ERROR_SUCCESS_REBOOT_REQUIRED ),
VALUE_CHAR_HR(ERROR_SUCCESS_RESTART_REQUIRED ),
VALUE_CHAR_HR(ERROR_WINS_INTERNAL ),
VALUE_CHAR_HR(ERROR_CAN_NOT_DEL_LOCAL_WINS ),
VALUE_CHAR_HR(ERROR_STATIC_INIT ),
VALUE_CHAR_HR(ERROR_INC_BACKUP ),
VALUE_CHAR_HR(ERROR_FULL_BACKUP ),
VALUE_CHAR_HR(ERROR_REC_NON_EXISTENT ),
VALUE_CHAR_HR(ERROR_RPL_NOT_ALLOWED ),
VALUE_CHAR(CO_E_INIT_SHARED_ALLOCATOR ),
VALUE_CHAR(CO_E_INIT_MEMORY_ALLOCATOR ),
VALUE_CHAR(CO_E_INIT_CLASS_CACHE ),
VALUE_CHAR(CO_E_INIT_RPC_CHANNEL ),
VALUE_CHAR(OLE_E_OLEVERB ),
VALUE_CHAR(OLE_E_ADVF ),
VALUE_CHAR(OLE_E_ENUM_NOMORE ),
VALUE_CHAR(OLE_E_ADVISENOTSUPPORTED ),
VALUE_CHAR(OLE_E_NOCONNECTION ),
VALUE_CHAR(OLE_E_NOTRUNNING ),
VALUE_CHAR(OLE_E_NOCACHE ),
VALUE_CHAR(OLE_E_BLANK ),
VALUE_CHAR(OLE_E_CLASSDIFF ),
VALUE_CHAR(OLE_E_CANT_GETMONIKER ),
VALUE_CHAR(OLE_E_CANT_BINDTOSOURCE ),
VALUE_CHAR(OLE_E_STATIC ),
VALUE_CHAR(OLE_E_PROMPTSAVECANCELLED ),
VALUE_CHAR(OLE_E_INVALIDRECT ),
VALUE_CHAR(OLE_E_WRONGCOMPOBJ ),
VALUE_CHAR(OLE_E_INVALIDHWND ),
VALUE_CHAR(OLE_E_NOT_INPLACEACTIVE ),
VALUE_CHAR(OLE_E_CANTCONVERT ),
VALUE_CHAR(OLE_E_NOSTORAGE ),
VALUE_CHAR(DRAGDROP_E_NOTREGISTERED ),
VALUE_CHAR(DRAGDROP_E_ALREADYREGISTERED ),
VALUE_CHAR(DRAGDROP_E_INVALIDHWND ),
VALUE_CHAR(CLASS_E_CLASSNOTAVAILABLE ),
VALUE_CHAR(REGDB_E_READREGDB ),
VALUE_CHAR(REGDB_E_WRITEREGDB ),
VALUE_CHAR(REGDB_E_KEYMISSING ),
VALUE_CHAR(REGDB_E_INVALIDVALUE ),
VALUE_CHAR(REGDB_E_IIDNOTREG ),
VALUE_CHAR(CACHE_E_NOCACHE_UPDATED ),
VALUE_CHAR(OLEOBJ_E_NOVERBS ),
VALUE_CHAR(OLEOBJ_E_INVALIDVERB ),
VALUE_CHAR(CLIPBRD_E_CANT_OPEN ),
VALUE_CHAR(CLIPBRD_E_CANT_EMPTY ),
VALUE_CHAR(CLIPBRD_E_CANT_SET ),
VALUE_CHAR(CLIPBRD_E_BAD_DATA ),
VALUE_CHAR(CLIPBRD_E_CANT_CLOSE ),
VALUE_CHAR(OLE_S_USEREG ),
VALUE_CHAR(OLE_S_STATIC ),
VALUE_CHAR(DRAGDROP_S_DROP ),
VALUE_CHAR(DRAGDROP_S_CANCEL ),
VALUE_CHAR(DRAGDROP_S_USEDEFAULTCURSORS ),
VALUE_CHAR(MK_S_REDUCED_TO_SELF ),
VALUE_CHAR(MK_S_ME ),
VALUE_CHAR(MK_S_HIM ),
VALUE_CHAR(MK_S_US ),
VALUE_CHAR(MK_S_MONIKERALREADYREGISTERED ),
VALUE_CHAR(CO_E_CLASS_CREATE_FAILED ),
VALUE_CHAR(CO_E_SCM_ERROR ),
VALUE_CHAR(CO_E_SCM_RPC_FAILURE ),
VALUE_CHAR(CO_E_BAD_PATH ),
VALUE_CHAR(CO_E_SERVER_EXEC_FAILURE ),
VALUE_CHAR(CO_E_OBJSRV_RPC_FAILURE ),
VALUE_CHAR(MK_E_NO_NORMALIZED ),
VALUE_CHAR(CO_E_SERVER_STOPPING ),
VALUE_CHAR(MEM_E_INVALID_ROOT ),
VALUE_CHAR(MEM_E_INVALID_LINK ),
VALUE_CHAR(MEM_E_INVALID_SIZE ),
VALUE_CHAR(TYPE_E_BUFFERTOOSMALL ),
VALUE_CHAR(TYPE_E_INVDATAREAD ),
VALUE_CHAR(TYPE_E_UNSUPFORMAT ),
VALUE_CHAR(TYPE_E_REGISTRYACCESS ),
VALUE_CHAR(TYPE_E_LIBNOTREGISTERED ),
VALUE_CHAR(TYPE_E_UNDEFINEDTYPE ),
VALUE_CHAR(TYPE_E_QUALIFIEDNAMEDISALLOWED ),
VALUE_CHAR(TYPE_E_INVALIDSTATE ),
VALUE_CHAR(TYPE_E_WRONGTYPEKIND ),
VALUE_CHAR(TYPE_E_ELEMENTNOTFOUND ),
VALUE_CHAR(TYPE_E_AMBIGUOUSNAME ),
VALUE_CHAR(TYPE_E_NAMECONFLICT ),
VALUE_CHAR(TYPE_E_UNKNOWNLCID ),
VALUE_CHAR(TYPE_E_DLLFUNCTIONNOTFOUND ),
VALUE_CHAR(TYPE_E_BADMODULEKIND ),
VALUE_CHAR(TYPE_E_SIZETOOBIG ),
VALUE_CHAR(TYPE_E_DUPLICATEID ),
VALUE_CHAR(TYPE_E_INVALIDID ),
VALUE_CHAR(TYPE_E_TYPEMISMATCH ),
VALUE_CHAR(TYPE_E_OUTOFBOUNDS ),
VALUE_CHAR(TYPE_E_IOERROR ),
VALUE_CHAR(TYPE_E_CANTCREATETMPFILE ),
VALUE_CHAR(TYPE_E_CANTLOADLIBRARY ),
VALUE_CHAR(TYPE_E_INCONSISTENTPROPFUNCS ),
VALUE_CHAR(TYPE_E_CIRCULARTYPE ),
VALUE_CHAR(RPC_E_CALL_REJECTED ),
VALUE_CHAR(RPC_E_CALL_CANCELED ),
VALUE_CHAR(RPC_E_CANTPOST_INSENDCALL ),
VALUE_CHAR(RPC_E_CANTCALLOUT_INASYNCCALL ),
VALUE_CHAR(RPC_E_CANTCALLOUT_INEXTERNALCALL ),
VALUE_CHAR(RPC_E_CONNECTION_TERMINATED ),
VALUE_CHAR(RPC_E_SERVER_DIED ),
VALUE_CHAR(RPC_E_CLIENT_DIED ),
VALUE_CHAR(RPC_E_INVALID_DATAPACKET ),
VALUE_CHAR(RPC_E_CANTTRANSMIT_CALL ),
VALUE_CHAR(RPC_E_CLIENT_CANTMARSHAL_DATA ),
VALUE_CHAR(RPC_E_CLIENT_CANTUNMARSHAL_DATA ),
VALUE_CHAR(RPC_E_SERVER_CANTMARSHAL_DATA ),
VALUE_CHAR(RPC_E_SERVER_CANTUNMARSHAL_DATA ),
VALUE_CHAR(RPC_E_INVALID_DATA ),
VALUE_CHAR(RPC_E_INVALID_PARAMETER ),
VALUE_CHAR(RPC_E_CANTCALLOUT_AGAIN ),
VALUE_CHAR(RPC_E_SERVER_DIED_DNE ),
VALUE_CHAR(RPC_E_SYS_CALL_FAILED ),
VALUE_CHAR(RPC_E_OUT_OF_RESOURCES ),
VALUE_CHAR(RPC_E_ATTEMPTED_MULTITHREAD ),
VALUE_CHAR(RPC_E_NOT_REGISTERED ),
VALUE_CHAR(RPC_E_FAULT ),
VALUE_CHAR(RPC_E_SERVERFAULT ),
VALUE_CHAR(RPC_E_CHANGED_MODE ),
VALUE_CHAR(RPC_E_INVALIDMETHOD ),
VALUE_CHAR(RPC_E_DISCONNECTED ),
VALUE_CHAR(RPC_E_RETRY ),
VALUE_CHAR(RPC_E_SERVERCALL_RETRYLATER ),
VALUE_CHAR(RPC_E_SERVERCALL_REJECTED ),
VALUE_CHAR(RPC_E_INVALID_CALLDATA ),
VALUE_CHAR(RPC_E_CANTCALLOUT_ININPUTSYNCCALL ),
VALUE_CHAR(RPC_E_WRONG_THREAD ),
VALUE_CHAR(RPC_E_THREAD_NOT_INIT ),
VALUE_CHAR(RPC_E_VERSION_MISMATCH ),
VALUE_CHAR(RPC_E_INVALID_HEADER ),
VALUE_CHAR(RPC_E_INVALID_EXTENSION ),
VALUE_CHAR(RPC_E_INVALID_IPID ),
VALUE_CHAR(RPC_E_INVALID_OBJECT ),
VALUE_CHAR(RPC_S_CALLPENDING ),
VALUE_CHAR(RPC_S_WAITONTIMER ),
VALUE_CHAR(RPC_E_CALL_COMPLETE ),
VALUE_CHAR(RPC_E_UNSECURE_CALL ),
VALUE_CHAR(RPC_E_TOO_LATE ),
VALUE_CHAR(RPC_E_NO_GOOD_SECURITY_PACKAGES ),
VALUE_CHAR(RPC_E_ACCESS_DENIED ),
VALUE_CHAR(RPC_E_REMOTE_DISABLED ),
VALUE_CHAR(RPC_E_INVALID_OBJREF ),
VALUE_CHAR(RPC_E_UNEXPECTED ),
VALUE_CHAR(TRUST_E_PROVIDER_UNKNOWN ),
VALUE_CHAR(TRUST_E_ACTION_UNKNOWN ),
VALUE_CHAR(TRUST_E_SUBJECT_FORM_UNKNOWN ),
VALUE_CHAR(TRUST_E_SUBJECT_NOT_TRUSTED ),
VALUE_CHAR(PERSIST_E_SIZEDEFINITE ),
VALUE_CHAR(PERSIST_E_SIZEINDEFINITE ),
VALUE_CHAR(PERSIST_E_NOTSELFSIZING ),
VALUE_CHAR(TRUST_E_NOSIGNATURE ),
VALUE_CHAR(CERT_E_EXPIRED ),
VALUE_CHAR(CERT_E_ROLE ),
VALUE_CHAR(CERT_E_PATHLENCONST ),
VALUE_CHAR(CERT_E_CRITICAL ),
VALUE_CHAR(CERT_E_PURPOSE ),
VALUE_CHAR(CERT_E_ISSUERCHAINING ),
VALUE_CHAR(CERT_E_MALFORMED ),
VALUE_CHAR(CERT_E_UNTRUSTEDROOT ),
VALUE_CHAR(CERT_E_CHAINING ),
};
////////////////////////////////////////////////////////////////////////
// PROPSTATUSMAP
//
////////////////////////////////////////////////////////////////////////
const static WIDENAMEMAP g_rgPropStatusMap[] =
{
VALUE_WCHAR(DBPROPSTATUS_OK),
VALUE_WCHAR(DBPROPSTATUS_NOTSUPPORTED),
VALUE_WCHAR(DBPROPSTATUS_BADVALUE),
VALUE_WCHAR(DBPROPSTATUS_BADOPTION),
VALUE_WCHAR(DBPROPSTATUS_BADCOLUMN),
VALUE_WCHAR(DBPROPSTATUS_NOTALLSETTABLE),
VALUE_WCHAR(DBPROPSTATUS_NOTSETTABLE),
VALUE_WCHAR(DBPROPSTATUS_NOTSET),
VALUE_WCHAR(DBPROPSTATUS_CONFLICTING),
//2.1
VALUE_WCHAR(DBPROPSTATUS_NOTAVAILABLE),
};
////////////////////////////////////////////////////////////////////////
// WCHAR* GetPropStatusName
//
////////////////////////////////////////////////////////////////////////
WCHAR* GetPropStatusName(DBPROPSTATUS dbPropStatus)
{
return GetMapName(dbPropStatus, NUMELE(g_rgPropStatusMap), g_rgPropStatusMap);
}
////////////////////////////////////////////////////////////////////////
// STATUSMAP
//
////////////////////////////////////////////////////////////////////////
const static WIDENAMEMAP g_rgStatusMap[] =
{
VALUE_WCHAR(DBSTATUS_S_OK ),
VALUE_WCHAR(DBSTATUS_E_BADACCESSOR ),
VALUE_WCHAR(DBSTATUS_E_CANTCONVERTVALUE ),
VALUE_WCHAR(DBSTATUS_S_ISNULL ),
VALUE_WCHAR(DBSTATUS_S_TRUNCATED ),
VALUE_WCHAR(DBSTATUS_E_SIGNMISMATCH ),
VALUE_WCHAR(DBSTATUS_E_DATAOVERFLOW ),
VALUE_WCHAR(DBSTATUS_E_CANTCREATE ),
VALUE_WCHAR(DBSTATUS_E_UNAVAILABLE ),
VALUE_WCHAR(DBSTATUS_E_PERMISSIONDENIED ),
VALUE_WCHAR(DBSTATUS_E_INTEGRITYVIOLATION ),
VALUE_WCHAR(DBSTATUS_E_SCHEMAVIOLATION ),
VALUE_WCHAR(DBSTATUS_E_BADSTATUS ),
VALUE_WCHAR(DBSTATUS_S_DEFAULT ),
//2.0
VALUE_WCHAR(MDSTATUS_S_CELLEMPTY ),
VALUE_WCHAR(DBSTATUS_S_IGNORE ),
//2.1
VALUE_WCHAR(DBSTATUS_E_DOESNOTEXIST),
VALUE_WCHAR(DBSTATUS_E_INVALIDURL),
VALUE_WCHAR(DBSTATUS_E_RESOURCELOCKED),
VALUE_WCHAR(DBSTATUS_E_RESOURCEEXISTS),
VALUE_WCHAR(DBSTATUS_E_CANNOTCOMPLETE),
VALUE_WCHAR(DBSTATUS_E_VOLUMENOTFOUND),
VALUE_WCHAR(DBSTATUS_E_OUTOFSPACE),
VALUE_WCHAR(DBSTATUS_S_CANNOTDELETESOURCE),
VALUE_WCHAR(DBSTATUS_E_READONLY),
//2.5
VALUE_WCHAR(DBSTATUS_E_CANCELED),
VALUE_WCHAR(DBSTATUS_E_NOTCOLLECTION),
//2.6
VALUE_WCHAR(DBSTATUS_S_ROWSETCOLUMN ),
};
////////////////////////////////////////////////////////////////////////
// WCHAR* GetStatusName
//
////////////////////////////////////////////////////////////////////////
WCHAR* GetStatusName(DBSTATUS dbStatus, DWORD dwConvFlags)
{
return GetMapName(dbStatus, NUMELE(g_rgStatusMap), g_rgStatusMap, dwConvFlags);
}
////////////////////////////////////////////////////////////////////////
// DBSTATUS GetStatusValue
//
////////////////////////////////////////////////////////////////////////
DBSTATUS GetStatusValue(WCHAR* pwszName)
{
return GetMapName(pwszName, NUMELE(g_rgStatusMap), g_rgStatusMap);
}
////////////////////////////////////////////////////////////////////////
// PROPSET
//
////////////////////////////////////////////////////////////////////////
const static WIDEGUIDMAP g_rgPropSetMaps[] =
{
//Property Sets
VALUE_PWCHAR(DBPROPSET_COLUMN),
VALUE_PWCHAR(DBPROPSET_DATASOURCE),
VALUE_PWCHAR(DBPROPSET_DATASOURCEINFO),
VALUE_PWCHAR(DBPROPSET_DBINIT),
VALUE_PWCHAR(DBPROPSET_DBINITALL),
VALUE_PWCHAR(DBPROPSET_INDEX),
VALUE_PWCHAR(DBPROPSET_TABLE),
VALUE_PWCHAR(DBPROPSET_VIEW),
VALUE_PWCHAR(DBPROPSET_DATASOURCEALL),
VALUE_PWCHAR(DBPROPSET_DATASOURCEINFOALL),
VALUE_PWCHAR(DBPROPSET_ROWSET),
VALUE_PWCHAR(DBPROPSET_ROWSETALL),
VALUE_PWCHAR(DBPROPSET_SESSION),
VALUE_PWCHAR(DBPROPSET_SESSIONALL),
VALUE_PWCHAR(DBPROPSET_PROPERTIESINERROR),
//2.1
VALUE_PWCHAR(DBPROPSET_TRUSTEE),
VALUE_PWCHAR(DBPROPSET_COLUMNALL),
VALUE_PWCHAR(DBPROPSET_INDEXALL),
VALUE_PWCHAR(DBPROPSET_TABLEALL),
VALUE_PWCHAR(DBPROPSET_TRUSTEEALL),
VALUE_PWCHAR(DBPROPSET_CONSTRAINTALL),
//2.6
VALUE_PWCHAR(DBPROPSET_STREAM),
VALUE_PWCHAR(DBPROPSET_STREAMALL),
//Negative Testing
VALUE_PWCHAR(GUID_NULL),
};
const static ULONG g_cPropSetMaps = NUMELE(g_rgPropSetMaps);
////////////////////////////////////////////////////////////////////////
// IsSpecialPropSet
//
////////////////////////////////////////////////////////////////////////
BOOL IsSpecialPropSet(REFGUID guidSpecialPropertySet, GUID* pGuidPropertySet)
{
//Special Property Sets
typedef struct _SPECIALGUIDMAP
{
const GUID* pSpecialPropertySet;
const GUID* pGuidPropertySet;
} SPECIALGUIDMAP;
const static SPECIALGUIDMAP rgSpecialPropSet[] =
{
& DBPROPSET_COLUMNALL, & DBPROPSET_COLUMN,
& DBPROPSET_DATASOURCEALL, & DBPROPSET_DATASOURCE,
& DBPROPSET_DATASOURCEINFOALL, & DBPROPSET_DATASOURCEINFO,
& DBPROPSET_INDEXALL, & DBPROPSET_INDEX,
& DBPROPSET_DBINITALL, & DBPROPSET_DBINIT,
& DBPROPSET_SESSIONALL, & DBPROPSET_SESSION,
& DBPROPSET_TABLEALL, & DBPROPSET_TABLE,
& DBPROPSET_TRUSTEEALL, & DBPROPSET_TRUSTEE,
& DBPROPSET_VIEWALL, & DBPROPSET_VIEW,
& DBPROPSET_ROWSETALL, & DBPROPSET_ROWSET,
& DBPROPSET_STREAMALL, & DBPROPSET_STREAM,
};
//Is this one of the special Property Sets
for(ULONG iPropSet=0; iPropSet<NUMELE(rgSpecialPropSet); iPropSet++)
{
const SPECIALGUIDMAP* pSpecPropSet = &rgSpecialPropSet[iPropSet];
if(guidSpecialPropertySet == *pSpecPropSet->pSpecialPropertySet)
{
if(pGuidPropertySet)
*pGuidPropertySet = *pSpecPropSet->pGuidPropertySet;
return TRUE;
}
}
//Not a special set...
return FALSE;
}
////////////////////////////////////////////////////////////////////////
// GetStaticPropValues
//
////////////////////////////////////////////////////////////////////////
HRESULT GetStaticPropValues(DBPROPID dwPropertyID, REFGUID guidPropertySet, ULONG* pcPropValMap, const WIDENAMEMAP** prgPropValMap)
{
ASSERT(pcPropValMap);
ASSERT(prgPropValMap);
//DBPROPSET_ROWSET
if(guidPropertySet == DBPROPSET_ROWSET)
{
switch(dwPropertyID)
{
case DBPROP_UPDATABILITY:
{
const static WIDENAMEMAP rgUPDATABILITY[] =
{
VALUE_WCHAR(DBPROPVAL_UP_CHANGE ),
VALUE_WCHAR(DBPROPVAL_UP_DELETE ),
VALUE_WCHAR(DBPROPVAL_UP_INSERT ),
};
*pcPropValMap = NUMELE(rgUPDATABILITY);
*prgPropValMap = rgUPDATABILITY;
return S_OK;
}
};
}
else if(guidPropertySet == DBPROPSET_DBINIT)
{
switch(dwPropertyID)
{
case DBPROP_INIT_PROMPT:
{
const static WIDENAMEMAP rgPrompts[] =
{
VALUE_WCHAR(DBPROMPT_PROMPT),
VALUE_WCHAR(DBPROMPT_COMPLETE),
VALUE_WCHAR(DBPROMPT_COMPLETEREQUIRED),
VALUE_WCHAR(DBPROMPT_NOPROMPT),
};
*pcPropValMap = NUMELE(rgPrompts);
*prgPropValMap = rgPrompts;
return S_OK;
}
};
}
return DB_E_NOTFOUND;
}
////////////////////////////////////////////////////////////////////////
// GetStaticPropInfo
//
////////////////////////////////////////////////////////////////////////
HRESULT GetStaticPropInfo(ULONG cPropertyIDSets, DBPROPIDSET* rgPropertyIDSets, ULONG* pcStaticInfoSets, const DBPROPINFOSET** prgStaticInfoSets)
{
HRESULT hr = S_OK;
ASSERT(pcStaticInfoSets);
ASSERT(prgStaticInfoSets);
//DBPROPSET_COLUMN
const static DBPROPINFO rgColumnPropInfo[] =
{
VALUE_WCHAR(DBPROP_COL_AUTOINCREMENT), DBPROPFLAGS_COLUMN, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_COL_DEFAULT ), DBPROPFLAGS_COLUMN, DBTYPE_EMPTY, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_COL_DESCRIPTION ), DBPROPFLAGS_COLUMN, DBTYPE_BSTR, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_COL_FIXEDLENGTH ), DBPROPFLAGS_COLUMN, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_COL_INCREMENT), DBPROPFLAGS_COLUMN, DBTYPE_EMPTY, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_COL_ISLONG), DBPROPFLAGS_COLUMN, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_COL_NULLABLE ), DBPROPFLAGS_COLUMN, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_COL_PRIMARYKEY ), DBPROPFLAGS_COLUMN, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_COL_UNIQUE ), DBPROPFLAGS_COLUMN, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_COLUMNLCID), DBPROPFLAGS_COLUMN, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_COL_SEED), DBPROPFLAGS_COLUMN, DBTYPE_EMPTY, {0,0,0,0,0},
};
//DBPROPSET_DATASOURCE
const static DBPROPINFO rgDataSourcePropInfo[] =
{
VALUE_WCHAR(DBPROP_CURRENTCATALOG ), DBPROPFLAGS_DATASOURCE, DBTYPE_BSTR, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_MULTIPLECONNECTIONS), DBPROPFLAGS_DATASOURCE, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_RESETDATASOURCE), DBPROPFLAGS_DATASOURCE, DBTYPE_I4, {0,0,0,0,0},
};
//DBPROPSET_DATASOURCEINFO
const static DBPROPINFO rgDataSourceInfoPropInfo[] =
{
VALUE_WCHAR(DBPROP_ACTIVESESSIONS ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_ALTERCOLUMN), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_ASYNCTXNABORT ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_ASYNCTXNCOMMIT ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_BYREFACCESSORS ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_CATALOGLOCATION ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_CATALOGTERM ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BSTR, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_CATALOGUSAGE ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_COLUMNDEFINITION ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_COMSERVICES ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_CONCATNULLBEHAVIOR ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_CONNECTIONSTATUS), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_DATASOURCENAME ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BSTR, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_DATASOURCEREADONLY ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_DATASOURCE_TYPE), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_DBMSNAME ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BSTR, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_DBMSVER ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BSTR, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_DSOTHREADMODEL ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_GENERATEURL), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_GROUPBY ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_HETEROGENEOUSTABLES ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IDENTIFIERCASE), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_MAXINDEXSIZE ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_MAXOPENCHAPTERS ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_MAXROWSIZE ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_MAXROWSIZEINCLUDESBLOB ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_MAXTABLESINSELECT ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_MULTIPLEPARAMSETS ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_MULTIPLERESULTS ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_MULTIPLESTORAGEOBJECTS ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_MULTITABLEUPDATE ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_NULLCOLLATION ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_OLEOBJECTS ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_OPENROWSETSUPPORT), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_ORDERBYCOLUMNSINSELECT ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_OUTPUTPARAMETERAVAILABILITY ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_PERSISTENTIDTYPE ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_PREPAREABORTBEHAVIOR ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_PREPARECOMMITBEHAVIOR ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_PROCEDURETERM ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BSTR, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_PROVIDERFRIENDLYNAME), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BSTR, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_PROVIDERMEMORY), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_PROVIDERFILENAME ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BSTR, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_PROVIDEROLEDBVER ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BSTR, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_PROVIDERVER ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BSTR, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_QUOTEDIDENTIFIERCASE ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_ROWSETCONVERSIONSONCOMMAND ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_SCHEMATERM ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BSTR, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_SCHEMAUSAGE ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_SERVERNAME), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BSTR, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_SQLSUPPORT ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_STRUCTUREDSTORAGE ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_SUBQUERIES ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_SUPPORTEDTXNDDL ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_SUPPORTEDTXNISOLEVELS ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_SUPPORTEDTXNISORETAIN ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_TABLETERM ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BSTR, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_TABLESTATISTICS ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_USERNAME ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BSTR, {0,0,0,0,0},
//OLAP Documention
VALUE_WCHAR(MDPROP_AXES), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(MDPROP_FLATTENING_SUPPORT), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(MDPROP_MDX_JOINCUBES), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(MDPROP_NAMED_LEVELS), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(MDPROP_RANGEROWSET), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(MDPROP_MDX_SLICER), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(MDPROP_MDX_CUBEQUALIFICATION), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(MDPROP_MDX_OUTERREFERENCE), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(MDPROP_MDX_QUERYBYPROPERTY), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(MDPROP_MDX_CASESUPPORT), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(MDPROP_MDX_STRING_COMPOP), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(MDPROP_MDX_DESCFLAGS), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(MDPROP_MDX_SET_FUNCTIONS), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(MDPROP_MDX_MEMBER_FUNCTIONS), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(MDPROP_MDX_NUMERIC_FUNCTIONS), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(MDPROP_MDX_FORMULAS), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(MDPROP_MDX_AGGREGATECELL_UPDATE), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BOOL, {0,0,0,0,0},
//Not yet doc'd...
VALUE_WCHAR(DBPROP_STORAGEFLAGS), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_BOOL, {0,0,0,0,0},
//2.6
VALUE_WCHAR(DBPROP_TABLESTATISTICS ), DBPROPFLAGS_DATASOURCEINFO, DBTYPE_I4, {0,0,0,0,0},
};
//DBPROPSET_INDEX
const static DBPROPINFO rgIndexPropInfo[] =
{
VALUE_WCHAR(DBPROP_INDEX_AUTOUPDATE), DBPROPFLAGS_INDEX, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_INDEX_CLUSTERED), DBPROPFLAGS_INDEX, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_INDEX_FILLFACTOR), DBPROPFLAGS_INDEX, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_INDEX_INITIALSIZE), DBPROPFLAGS_INDEX, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_INDEX_NULLCOLLATION), DBPROPFLAGS_INDEX, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_INDEX_NULLS), DBPROPFLAGS_INDEX, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_INDEX_PRIMARYKEY), DBPROPFLAGS_INDEX, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_INDEX_SORTBOOKMARKS), DBPROPFLAGS_INDEX, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_INDEX_TEMPINDEX), DBPROPFLAGS_INDEX, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_INDEX_TYPE), DBPROPFLAGS_INDEX, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_INDEX_UNIQUE), DBPROPFLAGS_INDEX, DBTYPE_BOOL, {0,0,0,0,0},
};
//DBPROPSET_DBINIT
const static DBPROPINFO rgInitPropInfo[] =
{
VALUE_WCHAR(DBPROP_AUTH_CACHE_AUTHINFO ), DBPROPFLAGS_DBINIT, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_AUTH_ENCRYPT_PASSWORD ), DBPROPFLAGS_DBINIT, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_AUTH_INTEGRATED ), DBPROPFLAGS_DBINIT, DBTYPE_BSTR, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_AUTH_MASK_PASSWORD ), DBPROPFLAGS_DBINIT, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_AUTH_PASSWORD ), DBPROPFLAGS_DBINIT, DBTYPE_BSTR, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_AUTH_PERSIST_ENCRYPTED ), DBPROPFLAGS_DBINIT, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO ), DBPROPFLAGS_DBINIT, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_AUTH_USERID ), DBPROPFLAGS_DBINIT, DBTYPE_BSTR, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_INIT_ASYNCH), DBPROPFLAGS_DBINIT, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_INIT_BINDFLAGS), DBPROPFLAGS_DBINIT, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_INIT_CATALOG), DBPROPFLAGS_DBINIT, DBTYPE_BSTR, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_INIT_DATASOURCE), DBPROPFLAGS_DBINIT, DBTYPE_BSTR, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_INIT_GENERALTIMEOUT), DBPROPFLAGS_DBINIT, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_INIT_HWND ), DBPROPFLAGS_DBINIT, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_INIT_IMPERSONATION_LEVEL ), DBPROPFLAGS_DBINIT, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_INIT_LCID ), DBPROPFLAGS_DBINIT, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_INIT_LOCATION ), DBPROPFLAGS_DBINIT, DBTYPE_BSTR, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_INIT_LOCKOWNER), DBPROPFLAGS_DBINIT, DBTYPE_BSTR, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_INIT_MODE ), DBPROPFLAGS_DBINIT, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_INIT_OLEDBSERVICES), DBPROPFLAGS_DBINIT, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_INIT_PROMPT ), DBPROPFLAGS_DBINIT, DBTYPE_I2, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_INIT_PROTECTION_LEVEL ), DBPROPFLAGS_DBINIT, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_INIT_PROVIDERSTRING ), DBPROPFLAGS_DBINIT, DBTYPE_BSTR, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_INIT_TIMEOUT ), DBPROPFLAGS_DBINIT, DBTYPE_I4, {0,0,0,0,0},
};
//DBPROPSET_SESSION
const static DBPROPINFO rgSessionPropInfo[] =
{
VALUE_WCHAR(DBPROP_SESS_AUTOCOMMITISOLEVELS ), DBPROPFLAGS_SESSION, DBTYPE_I4, {0,0,0,0,0},
};
//DBPROPSET_TABLE
const static DBPROPINFO rgTablePropInfo[] =
{
VALUE_WCHAR(DBPROP_TBL_TEMPTABLE ), DBPROPFLAGS_TABLE, DBTYPE_BOOL, {0,0,0,0,0},
};
//DBPROPSET_TRUSTEE
const static DBPROPINFO rgTrusteePropInfo[] =
{
//Documented in Security Whitepaper
VALUE_WCHAR(DBPROP_TRUSTEE_USERNAME), DBPROPFLAGS_TRUSTEE, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_TRUSTEE_AUTHENTICATION), DBPROPFLAGS_TRUSTEE, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_TRUSTEE_NEWAUTHENTICATION), DBPROPFLAGS_TRUSTEE, DBTYPE_BOOL, {0,0,0,0,0},
};
//DBPROPSET_VIEW
const static DBPROPINFO rgViewPropInfo[] =
{
VALUE_WCHAR(DBPROP_FILTERCOMPAREOPS ), DBPROPFLAGS_VIEW, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IAccessor ), DBPROPFLAGS_VIEW, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IColumnsInfo ), DBPROPFLAGS_VIEW, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_ISupportErrorInfo), DBPROPFLAGS_VIEW, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IViewChapter), DBPROPFLAGS_VIEW, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IViewFilter), DBPROPFLAGS_VIEW, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IViewRowset), DBPROPFLAGS_VIEW, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IViewSort), DBPROPFLAGS_VIEW, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_MAXORSINFILTER ), DBPROPFLAGS_VIEW, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_MAXSORTCOLUMNS ), DBPROPFLAGS_VIEW, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_SORTONINDEX ), DBPROPFLAGS_VIEW, DBTYPE_BOOL, {0,0,0,0,0},
};
//DBPROPSET_ROWSET
const static DBPROPINFO rgRowsetPropInfo[] =
{
VALUE_WCHAR(DBPROP_ABORTPRESERVE ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_ACCESSORDER), DBPROPFLAGS_ROWSET, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_APPENDONLY ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_BLOCKINGSTORAGEOBJECTS ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_BOOKMARKINFO), DBPROPFLAGS_ROWSET, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_BOOKMARKS ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_BOOKMARKSKIPPED ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_BOOKMARKTYPE ), DBPROPFLAGS_ROWSET, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_CACHEDEFERRED ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_CANFETCHBACKWARDS ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_CANHOLDROWS ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_CANSCROLLBACKWARDS ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_CHANGEINSERTEDROWS ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_CLIENTCURSOR), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_COLUMNRESTRICT ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_COMMANDTIMEOUT ), DBPROPFLAGS_ROWSET, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_COMMITPRESERVE ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_DEFERRED ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_DELAYSTORAGEOBJECTS ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_FINDCOMPAREOPS ), DBPROPFLAGS_ROWSET, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_HIDDENCOLUMNS), DBPROPFLAGS_ROWSET, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IAccessor ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IChapteredRowset ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IColumnsInfo ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IColumnsInfo2), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IColumnsRowset ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IConnectionPointContainer), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IConvertType ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_ICreateRow), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IDBAsynchStatus ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IGetRow), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IGetSession), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IGetSourceRow), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_ILockBytes), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IMMOBILEROWS), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IMultipleResults), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IParentRowset), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IRow), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IRowChange), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IRowSchemaChange), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IRowset ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IRowsetChange ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IRowsetCurrentIndex), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IRowsetFind ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IRowsetIdentity), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IRowsetIndex), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IRowsetInfo), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IRowsetLocate), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IRowsetRefresh), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IRowsetScroll), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IRowsetUpdate), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IRowsetView), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IScopedOperations), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_ISequentialStream), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IStorage), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IStream), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_ISupportErrorInfo), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_LITERALBOOKMARKS ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_LITERALIDENTITY ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_LOCKMODE), DBPROPFLAGS_ROWSET, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_MAXOPENROWS ), DBPROPFLAGS_ROWSET, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_MAXPENDINGROWS ), DBPROPFLAGS_ROWSET, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_MAXROWS ), DBPROPFLAGS_ROWSET, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_MAYWRITECOLUMN ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_MEMORYUSAGE ), DBPROPFLAGS_ROWSET, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_NOTIFICATIONGRANULARITY ), DBPROPFLAGS_ROWSET, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_NOTIFICATIONPHASES ), DBPROPFLAGS_ROWSET, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_NOTIFYCOLUMNSET ), DBPROPFLAGS_ROWSET, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_NOTIFYROWDELETE ), DBPROPFLAGS_ROWSET, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_NOTIFYROWFIRSTCHANGE ), DBPROPFLAGS_ROWSET, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_NOTIFYROWINSERT ), DBPROPFLAGS_ROWSET, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_NOTIFYROWRESYNCH ), DBPROPFLAGS_ROWSET, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_NOTIFYROWSETRELEASE ), DBPROPFLAGS_ROWSET, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_NOTIFYROWSETFETCHPOSITIONCHANGE), DBPROPFLAGS_ROWSET, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_NOTIFYROWUNDOCHANGE ), DBPROPFLAGS_ROWSET, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_NOTIFYROWUNDODELETE ), DBPROPFLAGS_ROWSET, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_NOTIFYROWUNDOINSERT ), DBPROPFLAGS_ROWSET, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_NOTIFYROWUPDATE ), DBPROPFLAGS_ROWSET, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_ORDEREDBOOKMARKS ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_OTHERINSERT ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_OTHERUPDATEDELETE ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_OWNINSERT ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_OWNUPDATEDELETE ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_QUICKRESTART ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_REENTRANTEVENTS ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_REMOVEDELETED ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_REPORTMULTIPLECHANGES ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_RETURNPENDINGINSERTS ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_ROW_BULKOPS), DBPROPFLAGS_ROWSET, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_ROWRESTRICT ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_ROWSET_ASYNCH ), DBPROPFLAGS_ROWSET, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_ROWTHREADMODEL ), DBPROPFLAGS_ROWSET, DBTYPE_I4, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_SERVERCURSOR ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_SERVERDATAONINSERT), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_STRONGIDENTITY ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_TRANSACTEDOBJECT ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_UNIQUEROWS), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_UPDATABILITY ), DBPROPFLAGS_ROWSET, DBTYPE_I4, {0,0,0,0,0},
//2.6
//TODO: IRowsetBookmark and property are not doc'd - as of today?
VALUE_WCHAR(DBPROP_IRowsetBookmark ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_SKIPROWCOUNTRESULTS ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
//Currently not doc'd due to unknown property set...
VALUE_WCHAR(DBPROP_IBindResource), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IDBBinderProperties), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IRegisterProvider), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_IRowsetResynch), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
//Deprecated Properties
// VALUE_WCHAR(DBPROP_MARSHALLABLE ), DBPROPFLAGS_ROWSET, DBTYPE_BOOL, {0,0,0,0,0},
};
//DBPROPSET_STREAM
const static DBPROPINFO rgStreamPropInfo[] =
{
VALUE_WCHAR(DBPROP_OUTPUTSTREAM ), DBPROPFLAGS_STREAM, DBTYPE_IUNKNOWN, {0,0,0,0,0},
VALUE_WCHAR(DBPROP_OUTPUTENCODING), DBPROPFLAGS_STREAM, DBTYPE_BSTR, {0,0,0,0,0},
};
//Now build a static map of all the sets...
const static DBPROPINFOSET rgAllPropInfoSet[] =
{
//DBPROPSET_COLUMN
(DBPROPINFO*)rgColumnPropInfo, NUMELE(rgColumnPropInfo), {0xc8b522b9,0x5cf3,0x11ce,{0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d}},
//DBPROPSET_DATASOURCE
(DBPROPINFO*)rgDataSourcePropInfo, NUMELE(rgDataSourcePropInfo), {0xc8b522ba,0x5cf3,0x11ce,{0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d}},
//DBPROPSET_DATASOURCEINFO
(DBPROPINFO*)rgDataSourceInfoPropInfo, NUMELE(rgDataSourceInfoPropInfo), {0xc8b522bb,0x5cf3,0x11ce,{0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d}},
//DBPROPSET_INDEX
(DBPROPINFO*)rgIndexPropInfo, NUMELE(rgIndexPropInfo), {0xc8b522bd,0x5cf3,0x11ce,{0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d}},
//DBPROPSET_DBINIT
(DBPROPINFO*)rgInitPropInfo, NUMELE(rgInitPropInfo), {0xc8b522bc,0x5cf3,0x11ce,{0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d}},
//DBPROPSET_SESSION
(DBPROPINFO*)rgSessionPropInfo, NUMELE(rgSessionPropInfo), {0xc8b522c6,0x5cf3,0x11ce,{0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d}},
//DBPROPSET_TABLE
(DBPROPINFO*)rgTablePropInfo, NUMELE(rgTablePropInfo), {0xc8b522bf,0x5cf3,0x11ce,{0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d}},
//DBPROPSET_TRUSTEE
(DBPROPINFO*)rgTrusteePropInfo, NUMELE(rgTrusteePropInfo), {0xc8b522e1,0x5cf3,0x11ce,{0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d}},
//DBPROPSET_VIEW
(DBPROPINFO*)rgViewPropInfo, NUMELE(rgViewPropInfo), {0xc8b522df,0x5cf3,0x11ce,{0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d}},
//DBPROPSET_ROWSET
(DBPROPINFO*)rgRowsetPropInfo, NUMELE(rgRowsetPropInfo), {0xc8b522be,0x5cf3,0x11ce,{0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d}},
//DBPROPSET_STREAM
(DBPROPINFO*)rgStreamPropInfo, NUMELE(rgStreamPropInfo), {0xc8b522fd,0x5cf3,0x11ce,{0xad,0xe5,0x00,0xaa,0x00,0x44,0x77,0x3d}},
};
if(cPropertyIDSets == 0)
{
//Return all OLE DB Defined sets to the caller.
*pcStaticInfoSets = NUMELE(rgAllPropInfoSet);
*prgStaticInfoSets = rgAllPropInfoSet;
return S_OK;
}
else
{
//Currently this routine only handles one level.
//All that we currently need at this point for RowsetViewer...
ASSERT(cPropertyIDSets==1);
ASSERT(rgPropertyIDSets && rgPropertyIDSets[0].cPropertyIDs==0);
//First, is this a special property set, then map it to its defined property set...?
GUID guidSpecialPropertySet = rgPropertyIDSets[0].guidPropertySet;
IsSpecialPropSet(guidSpecialPropertySet, &guidSpecialPropertySet);
//Now loop through all the Property Sets and see which is desired...
for(ULONG iPropSet=0; iPropSet<NUMELE(rgAllPropInfoSet); iPropSet++)
{
const DBPROPINFOSET* pPropInfoSet = &rgAllPropInfoSet[iPropSet];
if(guidSpecialPropertySet == pPropInfoSet->guidPropertySet)
{
*pcStaticInfoSets = 1;
*prgStaticInfoSets = pPropInfoSet;
return S_OK;
}
}
}
//CLEANUP:
//Otherwise propety set was not found...
*pcStaticInfoSets = 0;
*prgStaticInfoSets = NULL;
return DB_E_NOTFOUND;
};
////////////////////////////////////////////////////////////////////////
// GetAllocedPropInfo
//
////////////////////////////////////////////////////////////////////////
HRESULT GetAllocedPropInfo(ULONG cPropertyIDSets, DBPROPIDSET* rgPropertyIDSets, ULONG* pcPropInfoSets, DBPROPINFOSET** prgPropInfoSets)
{
HRESULT hr = S_OK;
ASSERT(pcPropInfoSets);
ASSERT(prgPropInfoSets);
ULONG iPropSet,cStaticInfoSets = 0;
const DBPROPINFOSET* rgStaticInfoSets = NULL;
ULONG cPropInfoSets = 0;
DBPROPINFOSET* rgPropInfoSets = NULL;
//Delegate
TESTC(hr = GetStaticPropInfo(cPropertyIDSets, rgPropertyIDSets, &cStaticInfoSets, &rgStaticInfoSets));
//Now dump this static info into an allocated DBPROPINFOSET...
SAFE_ALLOC(rgPropInfoSets, DBPROPINFOSET, cStaticInfoSets);
cPropInfoSets = cStaticInfoSets;
for(iPropSet=0; iPropSet<cStaticInfoSets; iPropSet++)
{
//Setup outer
rgPropInfoSets[iPropSet].cPropertyInfos = rgStaticInfoSets[iPropSet].cPropertyInfos;
rgPropInfoSets[iPropSet].guidPropertySet = rgStaticInfoSets[iPropSet].guidPropertySet;
SAFE_ALLOC(rgPropInfoSets[iPropSet].rgPropertyInfos, DBPROPINFO, rgStaticInfoSets[iPropSet].cPropertyInfos);
memcpy(rgPropInfoSets[iPropSet].rgPropertyInfos, rgStaticInfoSets[iPropSet].rgPropertyInfos, sizeof(DBPROPINFO)*rgStaticInfoSets[iPropSet].cPropertyInfos);
}
CLEANUP:
*pcPropInfoSets = cPropInfoSets;
*prgPropInfoSets = rgPropInfoSets;
return hr;
};
////////////////////////////////////////////////////////////////////////
// PROPFLAGS
//
////////////////////////////////////////////////////////////////////////
const static WIDENAMEMAP g_rgPropFlagsMap[] =
{
VALUE_WCHAR(DBPROPFLAGS_NOTSUPPORTED ),
VALUE_WCHAR(DBPROPFLAGS_COLUMN ),
VALUE_WCHAR(DBPROPFLAGS_DATASOURCE ),
VALUE_WCHAR(DBPROPFLAGS_DATASOURCECREATE ),
VALUE_WCHAR(DBPROPFLAGS_DATASOURCEINFO ),
VALUE_WCHAR(DBPROPFLAGS_DBINIT ),
VALUE_WCHAR(DBPROPFLAGS_INDEX ),
VALUE_WCHAR(DBPROPFLAGS_ROWSET ),
VALUE_WCHAR(DBPROPFLAGS_TABLE ),
VALUE_WCHAR(DBPROPFLAGS_COLUMNOK ),
VALUE_WCHAR(DBPROPFLAGS_READ ),
VALUE_WCHAR(DBPROPFLAGS_WRITE ),
VALUE_WCHAR(DBPROPFLAGS_REQUIRED ),
VALUE_WCHAR(DBPROPFLAGS_SESSION ),
//2.1
VALUE_WCHAR(DBPROPFLAGS_TRUSTEE),
};
const static WIDENAMEMAP g_rgIsoLevels[] =
{
VALUE_WCHAR(ISOLATIONLEVEL_UNSPECIFIED ),
VALUE_WCHAR(ISOLATIONLEVEL_CHAOS ),
VALUE_WCHAR(ISOLATIONLEVEL_READUNCOMMITTED ),
VALUE_WCHAR(ISOLATIONLEVEL_BROWSE ),
VALUE_WCHAR(ISOLATIONLEVEL_CURSORSTABILITY ),
VALUE_WCHAR(ISOLATIONLEVEL_READCOMMITTED ),
VALUE_WCHAR(ISOLATIONLEVEL_REPEATABLEREAD ),
VALUE_WCHAR(ISOLATIONLEVEL_SERIALIZABLE ),
VALUE_WCHAR(ISOLATIONLEVEL_ISOLATED ),
};
const static ULONG g_cIsoLevels = NUMELE(g_rgIsoLevels);
const static WIDENAMEMAP g_rgXACTTC[] =
{
VALUE_WCHAR(XACTTC_SYNC_PHASEONE ),
VALUE_WCHAR(XACTTC_SYNC_PHASETWO ),
VALUE_WCHAR(XACTTC_SYNC ),
VALUE_WCHAR(XACTTC_ASYNC_PHASEONE ),
};
const static ULONG g_cXACTTC = NUMELE(g_rgXACTTC);
////////////////////////////////////////////////////////////////////////
// OBJECTYTPEMAP
//
////////////////////////////////////////////////////////////////////////
const static WIDEGUIDMAP g_rgObjectTypeMaps[] =
{
VALUE_PWCHAR(DBGUID_DSO ),
VALUE_PWCHAR(DBGUID_SESSION ),
VALUE_PWCHAR(DBGUID_ROWSET ),
VALUE_PWCHAR(DBGUID_ROW ),
VALUE_PWCHAR(DBGUID_COMMAND ),
VALUE_PWCHAR(DBGUID_STREAM ),
//Negative testing
VALUE_PWCHAR(GUID_NULL ),
};
const static ULONG g_cObjectTypeMaps = NUMELE(g_rgObjectTypeMaps);
////////////////////////////////////////////////////////////////////////
// ROWCOLMAP
//
////////////////////////////////////////////////////////////////////////
const static WIDEDBIDMAP g_rgRowColMaps[] =
{
VALUE_PWCHAR(DBROWCOL_DEFAULTSTREAM),
VALUE_PWCHAR(DBROWCOL_DEFAULTDOCUMENT),
VALUE_PWCHAR(DBROWCOL_ROWURL),
VALUE_PWCHAR(DBROWCOL_PARSENAME),
VALUE_PWCHAR(DBROWCOL_PARENTNAME),
VALUE_PWCHAR(DBROWCOL_ABSOLUTEPARSENAME),
VALUE_PWCHAR(DBROWCOL_CONTENTTYPE),
VALUE_PWCHAR(DBROWCOL_CONTENTCLASS),
VALUE_PWCHAR(DBROWCOL_CONTENTLANGUAGE),
VALUE_PWCHAR(DBROWCOL_CREATIONTIME),
VALUE_PWCHAR(DBROWCOL_LASTACCESSTIME),
VALUE_PWCHAR(DBROWCOL_LASTWRITETIME),
VALUE_PWCHAR(DBROWCOL_STREAMSIZE),
VALUE_PWCHAR(DBROWCOL_DISPLAYNAME),
VALUE_PWCHAR(DBROWCOL_ISROOT),
VALUE_PWCHAR(DBROWCOL_ISCOLLECTION),
VALUE_PWCHAR(DBROWCOL_ISSTRUCTUREDDOCUMENT),
VALUE_PWCHAR(DBROWCOL_ISHIDDEN),
VALUE_PWCHAR(DBROWCOL_ISREADONLY),
//Negative testing
VALUE_PWCHAR(DB_NULLID ),
};
const static ULONG g_cRowColMaps = NUMELE(g_rgRowColMaps);
////////////////////////////////////////////////////////////////////////
// WCHAR* GetRowColName
//
////////////////////////////////////////////////////////////////////////
WCHAR* GetRowColName(const DBID* pColumnid)
{
return GetMapName(pColumnid, g_cRowColMaps, g_rgRowColMaps);
}
////////////////////////////////////////////////////////////////////////
// DBPROMPTOPTIONS
//
////////////////////////////////////////////////////////////////////////
const static WIDENAMEMAP g_rgPromptOptions[] =
{
VALUE_WCHAR(DBPROMPTOPTIONS_WIZARDSHEET),
VALUE_WCHAR(DBPROMPTOPTIONS_PROPERTYSHEET),
VALUE_WCHAR(DBPROMPTOPTIONS_BROWSEONLY),
VALUE_WCHAR(DBPROMPTOPTIONS_DISABLE_PROVIDER_SELECTION),
VALUE_WCHAR(DBPROMPTOPTIONS_DISABLESAVEPASSWORD),
};
const static ULONG g_cPromptOptions = NUMELE(g_rgPromptOptions);
////////////////////////////////////////////////////////////////////////
// DBSOURCETYPE
//
////////////////////////////////////////////////////////////////////////
const static WIDENAMEMAP g_rgSourceType[] =
{
VALUE_WCHAR(DBSOURCETYPE_DATASOURCE),
VALUE_WCHAR(DBSOURCETYPE_ENUMERATOR),
VALUE_WCHAR(DBSOURCETYPE_BINDER),
VALUE_WCHAR(DBSOURCETYPE_DATASOURCE_MDP),
};
const static ULONG g_cSourceType = NUMELE(g_rgSourceType);
////////////////////////////////////////////////////////////////////////
// DBBINDURLMAP
//
////////////////////////////////////////////////////////////////////////
const static WIDENAMEMAP g_rgBindURLMaps[] =
{
VALUE_WCHAR(DBBINDURLFLAG_READ),
VALUE_WCHAR(DBBINDURLFLAG_WRITE),
VALUE_WCHAR(DBBINDURLFLAG_READWRITE),
VALUE_WCHAR(DBBINDURLFLAG_SHARE_DENY_READ),
VALUE_WCHAR(DBBINDURLFLAG_SHARE_DENY_WRITE),
VALUE_WCHAR(DBBINDURLFLAG_SHARE_EXCLUSIVE),
VALUE_WCHAR(DBBINDURLFLAG_SHARE_DENY_NONE),
VALUE_WCHAR(DBBINDURLFLAG_ASYNCHRONOUS),
VALUE_WCHAR(DBBINDURLFLAG_COLLECTION),
VALUE_WCHAR(DBBINDURLFLAG_DELAYFETCHSTREAM),
VALUE_WCHAR(DBBINDURLFLAG_DELAYFETCHCOLUMNS),
VALUE_WCHAR(DBBINDURLFLAG_RECURSIVE),
VALUE_WCHAR(DBBINDURLFLAG_OUTPUT),
VALUE_WCHAR(DBBINDURLFLAG_WAITFORINIT),
VALUE_WCHAR(DBBINDURLFLAG_OPENIFEXISTS),
VALUE_WCHAR(DBBINDURLFLAG_OVERWRITE),
VALUE_WCHAR(DBBINDURLFLAG_ISSTRUCTUREDDOCUMENT),
};
const static ULONG g_cBindURLMaps = NUMELE(g_rgBindURLMaps);
////////////////////////////////////////////////////////////////////////
// DBCONSTRAINTTYPE
//
////////////////////////////////////////////////////////////////////////
const static WIDENAMEMAP g_rgConsTypeMaps[] =
{
//Constraint Types
VALUE_WCHAR(DBCONSTRAINTTYPE_UNIQUE),
VALUE_WCHAR(DBCONSTRAINTTYPE_FOREIGNKEY),
VALUE_WCHAR(DBCONSTRAINTTYPE_PRIMARYKEY),
VALUE_WCHAR(DBCONSTRAINTTYPE_CHECK),
};
const static ULONG g_cConsTypeMaps = NUMELE(g_rgConsTypeMaps);
////////////////////////////////////////////////////////////////////////
// DBDEFERRABILITY
//
////////////////////////////////////////////////////////////////////////
const static WIDENAMEMAP g_rgDeferrabilityMaps[] =
{
//Deferrability flags
VALUE_WCHAR(DBDEFERRABILITY_DEFERRED),
VALUE_WCHAR(DBDEFERRABILITY_DEFERRABLE),
};
const static ULONG g_cDeferrabilityMaps = NUMELE(g_rgDeferrabilityMaps);
////////////////////////////////////////////////////////////////////////
// DBMATCHTYPE
//
////////////////////////////////////////////////////////////////////////
const static WIDENAMEMAP g_rgMatchTypeMaps[] =
{
//Match type values
VALUE_WCHAR(DBMATCHTYPE_NONE),
VALUE_WCHAR(DBMATCHTYPE_FULL),
VALUE_WCHAR(DBMATCHTYPE_PARTIAL),
};
const static ULONG g_cMatchTypeMaps = NUMELE(g_rgMatchTypeMaps);
////////////////////////////////////////////////////////////////////////
// DBUPDELRULE
//
////////////////////////////////////////////////////////////////////////
const static WIDENAMEMAP g_rgUpDelRuleMaps[] =
{
//Update/Delete rule values
VALUE_WCHAR(DBUPDELRULE_NOACTION),
VALUE_WCHAR(DBUPDELRULE_CASCADE),
VALUE_WCHAR(DBUPDELRULE_SETNULL),
VALUE_WCHAR(DBUPDELRULE_SETDEFAULT),
};
const static ULONG g_cUpDelRuleMaps = NUMELE(g_rgUpDelRuleMaps);
////////////////////////////////////////////////////////////////////////
// DBCOLUMNDESCFLAGS
//
////////////////////////////////////////////////////////////////////////
const static WIDENAMEMAP g_rgCDFlagsMaps[] =
{
//Deferrability flags
VALUE_WCHAR(DBCOLUMNDESCFLAGS_TYPENAME),
VALUE_WCHAR(DBCOLUMNDESCFLAGS_ITYPEINFO),
VALUE_WCHAR(DBCOLUMNDESCFLAGS_PROPERTIES),
VALUE_WCHAR(DBCOLUMNDESCFLAGS_CLSID),
VALUE_WCHAR(DBCOLUMNDESCFLAGS_COLSIZE),
VALUE_WCHAR(DBCOLUMNDESCFLAGS_DBCID),
VALUE_WCHAR(DBCOLUMNDESCFLAGS_WTYPE),
VALUE_WCHAR(DBCOLUMNDESCFLAGS_PRECISION),
VALUE_WCHAR(DBCOLUMNDESCFLAGS_SCALE),
};
const static ULONG g_cCDFlagsMaps = NUMELE(g_rgCDFlagsMaps);
////////////////////////////////////////////////////////////////////////
// WCHAR* GetObjectTypeName
//
////////////////////////////////////////////////////////////////////////
WCHAR* GetObjectTypeName(REFGUID rguidObjectType)
{
return GetMapName(rguidObjectType, g_cObjectTypeMaps, g_rgObjectTypeMaps);
}
////////////////////////////////////////////////////////////////////////
// WCHAR* GetPropertyName
//
////////////////////////////////////////////////////////////////////////
WCHAR* GetPropertyName(DBPROPID dwPropertyID, REFGUID guidPropertySet)
{
//Thankfully all OLE DB Properties have different DBPROPIDs, (all unique)
//The problem is that provider specific properties may not be.
//So if we know the set we can find the property, otherwsie we don't know it...
ULONG cPropInfoSets = 0;
const DBPROPINFOSET* rgPropInfoSets = NULL;
DBPROPINFO* pPropInfo = NULL;
//Setup the info we are looking for...
const ULONG cPropertyIDSets = 1;
DBPROPIDSET rgPropertyIDSets[cPropertyIDSets];
rgPropertyIDSets[0].cPropertyIDs = 0;
rgPropertyIDSets[0].rgPropertyIDs = NULL;
rgPropertyIDSets[0].guidPropertySet = guidPropertySet;
//Obtain the properties for the specified set...
TESTC(GetStaticPropInfo(cPropertyIDSets, rgPropertyIDSets, &cPropInfoSets, &rgPropInfoSets));
//Now that we have the correct set, just obtain the sub element (property name)
pPropInfo = FindProperty(dwPropertyID, guidPropertySet, cPropInfoSets, (DBPROPINFOSET*)rgPropInfoSets);
if(pPropInfo)
return pPropInfo->pwszDescription;
CLEANUP:
return NULL;
}
////////////////////////////////////////////////////////////////////////
// WCHAR* GetPropSetName
//
////////////////////////////////////////////////////////////////////////
WCHAR* GetPropSetName(REFGUID guidPropertySet)
{
return GetMapName(guidPropertySet, g_cPropSetMaps, g_rgPropSetMaps);
}
////////////////////////////////////////////////////////////////////////
// LCID
//
////////////////////////////////////////////////////////////////////////
const static WIDENAMEMAP g_rgLCID[] =
{
VALUE_WCHAR(LOCALE_SYSTEM_DEFAULT),
VALUE_WCHAR(LOCALE_USER_DEFAULT),
VALUE_WCHAR(LOCALE_NEUTRAL),
VALUE_WCHAR(GetSystemDefaultLCID()),
VALUE_WCHAR(GetUserDefaultLCID()),
};
const static ULONG g_cLCID = NUMELE(g_rgLCID);
////////////////////////////////////////////////////////////////////////
// CHAR* GetMapName
//
////////////////////////////////////////////////////////////////////////
CHAR* GetMapName(LONG lItem, ULONG cNameMap, const NAMEMAP* rgNameMap)
{
for(ULONG i=0; i<cNameMap; i++)
{
if(lItem == rgNameMap[i].lItem)
return rgNameMap[i].pszName;
}
//Otherwise indicate failure
return NULL;
}
////////////////////////////////////////////////////////////////////////
// GetMapName
//
////////////////////////////////////////////////////////////////////////
LONG GetMapName(WCHAR* pwsz, ULONG cNameMap, const WIDENAMEMAP* rgNameMap)
{
for(ULONG i=0; i<cNameMap; i++)
{
if(StringCompare(pwsz, rgNameMap[i].pwszName))
return rgNameMap[i].lItem;
}
//Otherwise indicate failure
return -1;
}
////////////////////////////////////////////////////////////////////////
// GetMapName
//
////////////////////////////////////////////////////////////////////////
LONG GetMapName(CHAR* psz, ULONG cNameMap, const NAMEMAP* rgNameMap)
{
for(ULONG i=0; i<cNameMap; i++)
{
if(strcmp(psz, rgNameMap[i].pszName)==0)
return rgNameMap[i].lItem;
}
//Otherwise indicate failure
return -1;
}
////////////////////////////////////////////////////////////////////////
// WCHAR* GetMapName
//
////////////////////////////////////////////////////////////////////////
WCHAR* GetMapName(LONG lItem, ULONG cNameMap, const WIDENAMEMAP* rgNameMap, DWORD dwConvFlags)
{
for(ULONG i=0; i<cNameMap; i++)
{
if(lItem == rgNameMap[i].lItem)
return rgNameMap[i].pwszName;
}
if(dwConvFlags)
{
//If we didn't find it, then just format the value in a string
//and return it to the user (if requested)...
static WCHAR wszBuffer[MAX_NAME_LEN];
if(dwConvFlags & CONV_HEX)
StringFormat(wszBuffer, NUMELE(wszBuffer), L"0x%x", lItem);
else
StringFormat(wszBuffer, NUMELE(wszBuffer), L"%d", lItem);
return wszBuffer;
}
//Otherwise indicate failure
return NULL;
}
////////////////////////////////////////////////////////////////////////
// WCHAR* GetBitMapName
//
////////////////////////////////////////////////////////////////////////
WCHAR* GetBitMapName(DWORD dwItem, ULONG cNameMap, const WIDENAMEMAP* rgNameMap, DWORD dwBitStart)
{
static WCHAR wszBuffer[MAX_NAME_LEN] = {0};
DWORD dwItemBase = dwItem;
DWORD dwFound = 0;
//NOTE: Some bitmasks, are actually composed of some sequental values, and then some bits.
//For Example, DBTYPE_* contains sequential types upto a point, and then the rest are bit masks.
//This function is designed to handle this case as well, dwBitStart denotes all bits that
//are allowed to be on, all other values (non-indicated-bits) will be compared literally ie: (==).
if(dwBitStart)
dwItemBase &= ~dwBitStart; //Remove all high order bits
for(ULONG i=0; i<cNameMap; i++)
{
//Does our item contains this particular bit?
if(BIT_SET(dwItem, (DWORD)rgNameMap[i].lItem))
{
if(dwBitStart)
{
//If we are using a bitstart, then we need to make sure either this is one
//of the special orable bits, or the items match exactly, if not then skip...
if(! ((dwBitStart & rgNameMap[i].lItem) || dwItemBase == (DWORD)rgNameMap[i].lItem) )
continue;
}
if(dwFound)
{
wcscat_s(wszBuffer, NUMELE(wszBuffer), L" | ");
wcscat_s(wszBuffer, NUMELE(wszBuffer), rgNameMap[i].pwszName);
}
else
{
wcscpy_s(wszBuffer, NUMELE(wszBuffer), rgNameMap[i].pwszName);
}
//NOTE: We keep track of all the "bits" we have found.
dwFound |= rgNameMap[i].lItem;
}
}
//We keep track of all the bits we saw, so if at the end we didn't see some of the bits
//then we just return the bits, and not an incorrect sub-set string mapping...
if(dwFound != dwItem)
{
//Unknown, just display bitmask as hex
StringFormat(wszBuffer, NUMELE(wszBuffer), L"0x%08x", dwItem);
}
//return
return wszBuffer;
}
////////////////////////////////////////////////////////////////////////
// WCHAR* GetMapName
//
////////////////////////////////////////////////////////////////////////
WCHAR* GetMapName(REFGUID guid, ULONG cGuidMap, const WIDEGUIDMAP* rgGuidMap)
{
for(ULONG i=0; i<cGuidMap; i++)
{
if(guid == *(rgGuidMap[i].pGuid))
return rgGuidMap[i].pwszName;
}
//Otherwise indicate failure
return NULL;
}
////////////////////////////////////////////////////////////////////////
// WCHAR* GetMapName
//
////////////////////////////////////////////////////////////////////////
WCHAR* GetMapName(const DBID* pDBID, ULONG cMap, const WIDEDBIDMAP* rgMap)
{
for(ULONG i=0; i<cMap; i++)
{
if(memcmp(pDBID, rgMap[i].pDBID, sizeof(DBID))==0)
return rgMap[i].pwszName;
}
//Otherwise indicate failure
return NULL;
}
////////////////////////////////////////////////////////////////////////
// CHAR* GetErrorName
//
////////////////////////////////////////////////////////////////////////
CHAR* GetErrorName(HRESULT hr)
{
return GetMapName(hr, NUMELE(g_rgErrorMap), g_rgErrorMap);
}
////////////////////////////////////////////////////////////////////////
// WCHAR* GetInterfaceName
//
////////////////////////////////////////////////////////////////////////
WCHAR* GetInterfaceName(REFIID riid)
{
return GetMapName(riid, NUMELE(g_rgInterfaceMaps), g_rgInterfaceMaps);
}
////////////////////////////////////////////////////////////////////////
//TODO: Remove once these are in our SQLOLEDB.H
extern const GUID DBGUID_MSSQLXML = {0x5d531cb2L,0xe6ed,0x11d2,{0xb2,0x52,0x00,0xc0,0x4f,0x68,0x1b,0x71}};
extern const GUID DBGUID_XPATH = {0xec2a4293L,0xe898,0x11d2,{0xb1,0xb7,0x00,0xc0,0x4f,0x68,0x0c,0x56}};
////////////////////////////////////////////////////////////////////////
// DialectMaps
//
////////////////////////////////////////////////////////////////////////
const static WIDEGUIDMAP g_rgDialectMaps[] =
{
VALUE_PWCHAR(DBGUID_DEFAULT ),
VALUE_PWCHAR(DBGUID_SQL ),
VALUE_PWCHAR(MDGUID_MDX ),
VALUE_PWCHAR(DBGUID_MSSQLXML ),
VALUE_PWCHAR(DBGUID_XPATH ),
//Negative testing
VALUE_PWCHAR(GUID_NULL ),
};
const static ULONG g_cDialectMaps = NUMELE(g_rgDialectMaps);
////////////////////////////////////////////////////////////////////////
// WCHAR* GetDialectName
//
////////////////////////////////////////////////////////////////////////
WCHAR* GetDialectName(REFGUID rguid)
{
return GetMapName(rguid, g_cDialectMaps, g_rgDialectMaps);
}
////////////////////////////////////////////////////////////////////////
// HRESULT DisplayBindingErrors
//
/////////////////////////////////////////////////////////////////////////////
HRESULT DisplayBindingErrors(HRESULT hrReturned, DBCOUNTITEM cBindings, const DBBINDING* rgBindings, void* pData)
{
//Display the badstatus for pData operations.
//(ie: GetData / SetData / InsertRow)
INT iSelect = 0;
//Binding Errors only occur with the following returned codes...
if(hrReturned!=DB_S_ERRORSOCCURRED && hrReturned!=DB_E_ERRORSOCCURRED)
return hrReturned;
for(ULONG i=0; i<cBindings; i++)
{
ASSERT(rgBindings);
//If STATUS is not bound, we don't know if this binding failed or not.
//And we can't really access the data or length, since we are not sure what the status is...
if(!STATUS_IS_BOUND(rgBindings[i]))
continue;
DBSTATUS dbStatus = BINDING_STATUS(rgBindings[i], pData);
DBLENGTH dbLength = LENGTH_IS_BOUND(rgBindings[i]) ? BINDING_LENGTH(rgBindings[i], pData) : 0;
switch(dbStatus)
{
case DBSTATUS_S_OK:
case DBSTATUS_S_ISNULL:
case DBSTATUS_S_DEFAULT:
case DBSTATUS_S_IGNORE:
break;
//Display Status Error to the user...
default:
{
iSelect = wMessageBox(GetFocus(), MB_TASKMODAL | MB_ICONERROR | MB_OKCANCEL, wsz_ERROR,
L"Binding Status Errors:\n"
L"rgBindings[%lu]\n\n"
L"iOrdinal = %Id\n"
L"wType = %s\n"
L"cbMaxLen = %Iu\n"
L"bPrecision = %d\n"
L"bScale = %d\n\n"
L"DBSTATUS = %s\n"
L"DBLENGTH = %lu\n",
i,
rgBindings[i].iOrdinal,
GetDBTypeName(rgBindings[i].wType),
rgBindings[i].cbMaxLen,
rgBindings[i].bPrecision,
rgBindings[i].bScale,
GetStatusName(dbStatus),
dbLength
);
if(iSelect == IDCANCEL)
{
hrReturned = DB_E_CANCELED;
goto CLEANUP;
}
break;
}
}
}
CLEANUP:
return hrReturned;
}
////////////////////////////////////////////////////////////////////////
// HRESULT DisplayColAccessErrors
//
/////////////////////////////////////////////////////////////////////////////
HRESULT DisplayColAccessErrors(HRESULT hrReturned, DBORDINAL cColAccess, DBCOLUMNACCESS* rgColAccess)
{
//Display the badstatus for pData operations.
//(ie: GetData / SetData / InsertRow)
INT iSelect = 0;
//Binding Errors only occur with the following returned codes...
if(hrReturned!=DB_S_ERRORSOCCURRED && hrReturned!=DB_E_ERRORSOCCURRED)
return hrReturned;
for(ULONG i=0; i<cColAccess; i++)
{
ASSERT(rgColAccess);
DBCOLUMNACCESS* pColAccess = &rgColAccess[i];
switch(pColAccess->dwStatus)
{
case DBSTATUS_S_OK:
case DBSTATUS_S_ISNULL:
case DBSTATUS_S_DEFAULT:
case DBSTATUS_S_IGNORE:
break;
default:
{
//Convert the Column ID into a string
WCHAR wszBuffer[MAX_NAME_LEN] = {0};
DBIDToString(&pColAccess->columnid, wszBuffer, MAX_NAME_LEN);
//Display Status Error to the user...
iSelect = wMessageBox(GetFocus(), MB_TASKMODAL | MB_ICONERROR | MB_OKCANCEL, wsz_ERROR,
L"ColumnAccess Status Errors:\n"
L"rgColAccess[%lu]\n\n"
L"columnid = %s\n"
L"wType = %s\n"
L"cbMaxLen = %lu\n"
L"bPrecision = %d\n"
L"bScale = %d\n\n"
L"dwStatus = %s\n"
L"cbDataLen = %lu\n",
i,
wszBuffer,
GetDBTypeName(pColAccess->wType),
pColAccess->cbMaxLen,
pColAccess->bPrecision,
pColAccess->bScale,
GetStatusName(pColAccess->dwStatus),
pColAccess->cbDataLen
);
if(iSelect == IDCANCEL)
{
hrReturned = DB_E_CANCELED;
goto CLEANUP;
}
break;
}
}
}
CLEANUP:
return hrReturned;
}
////////////////////////////////////////////////////////////////////////
// HRESULT DisplayColumnErrors
//
/////////////////////////////////////////////////////////////////////////////
HRESULT DisplayColumnErrors(HRESULT hrReturned, DBORDINAL cColumns, DBID* rgColumns, DBSTATUS* rgStatus)
{
//Display the badstatus for pData operations.
//(ie: GetData / SetData / InsertRow)
INT iSelect = 0;
//Binding Errors only occur with the following returned codes...
if(hrReturned!=DB_S_ERRORSOCCURRED && hrReturned!=DB_E_ERRORSOCCURRED)
return hrReturned;
for(ULONG i=0; i<cColumns; i++)
{
ASSERT(rgColumns);
DBID* pDBID = &rgColumns[i];
switch(rgStatus[i])
{
case DBSTATUS_S_OK:
case DBSTATUS_S_ISNULL:
case DBSTATUS_S_DEFAULT:
case DBSTATUS_S_IGNORE:
break;
default:
{
//Convert the Column ID into a string
WCHAR wszBuffer[MAX_NAME_LEN] = {0};
DBIDToString(pDBID, wszBuffer, MAX_NAME_LEN);
//Display Status Error to the user...
iSelect = wMessageBox(GetFocus(), MB_TASKMODAL | MB_ICONERROR | MB_OKCANCEL, wsz_ERROR,
L"Column Status Errors:\n"
L"rgColumnIDs[%lu]\n\n"
L"columnid = %s\n"
L"dwStatus = %s\n",
i,
wszBuffer,
GetStatusName(rgStatus[i])
);
if(iSelect == IDCANCEL)
{
hrReturned = DB_E_CANCELED;
goto CLEANUP;
}
break;
}
}
}
CLEANUP:
return hrReturned;
}
////////////////////////////////////////////////////////////////////////
// STATUSMAP
//
////////////////////////////////////////////////////////////////////////
const static WIDENAMEMAP g_rgRowStatusMap[] =
{
VALUE_WCHAR(DBROWSTATUS_S_OK ),
VALUE_WCHAR(DBROWSTATUS_S_MULTIPLECHANGES ),
VALUE_WCHAR(DBROWSTATUS_S_PENDINGCHANGES ),
VALUE_WCHAR(DBROWSTATUS_E_CANCELED ),
VALUE_WCHAR(DBROWSTATUS_E_CANTRELEASE ),
VALUE_WCHAR(DBROWSTATUS_E_CONCURRENCYVIOLATION ),
VALUE_WCHAR(DBROWSTATUS_E_DELETED ),
VALUE_WCHAR(DBROWSTATUS_E_PENDINGINSERT ),
VALUE_WCHAR(DBROWSTATUS_E_NEWLYINSERTED ),
VALUE_WCHAR(DBROWSTATUS_E_INTEGRITYVIOLATION ),
VALUE_WCHAR(DBROWSTATUS_E_INVALID ),
VALUE_WCHAR(DBROWSTATUS_E_MAXPENDCHANGESEXCEEDED ),
VALUE_WCHAR(DBROWSTATUS_E_OBJECTOPEN ),
VALUE_WCHAR(DBROWSTATUS_E_OUTOFMEMORY ),
VALUE_WCHAR(DBROWSTATUS_E_PERMISSIONDENIED ),
VALUE_WCHAR(DBROWSTATUS_E_LIMITREACHED ),
VALUE_WCHAR(DBROWSTATUS_E_SCHEMAVIOLATION ),
VALUE_WCHAR(DBROWSTATUS_E_FAIL ),
//2.0
VALUE_WCHAR(DBROWSTATUS_S_NOCHANGE ),
};
////////////////////////////////////////////////////////////////////////
// COLUMNFLAGSMAP
//
////////////////////////////////////////////////////////////////////////
const static WIDENAMEMAP g_rgColFlagsMaps[] =
{
VALUE_WCHAR(DBCOLUMNFLAGS_ISBOOKMARK),
VALUE_WCHAR(DBCOLUMNFLAGS_MAYDEFER),
VALUE_WCHAR(DBCOLUMNFLAGS_WRITE),
VALUE_WCHAR(DBCOLUMNFLAGS_WRITEUNKNOWN),
VALUE_WCHAR(DBCOLUMNFLAGS_ISFIXEDLENGTH),
VALUE_WCHAR(DBCOLUMNFLAGS_ISNULLABLE),
VALUE_WCHAR(DBCOLUMNFLAGS_MAYBENULL),
VALUE_WCHAR(DBCOLUMNFLAGS_ISLONG),
VALUE_WCHAR(DBCOLUMNFLAGS_ISROWID),
VALUE_WCHAR(DBCOLUMNFLAGS_ISROWVER),
VALUE_WCHAR(DBCOLUMNFLAGS_CACHEDEFERRED),
//1.5
VALUE_WCHAR(DBCOLUMNFLAGS_ISCHAPTER),
//2.0
VALUE_WCHAR(DBCOLUMNFLAGS_SCALEISNEGATIVE),
//2.1
VALUE_WCHAR(DBCOLUMNFLAGS_ISROWURL),
VALUE_WCHAR(DBCOLUMNFLAGS_ISDEFAULTSTREAM),
VALUE_WCHAR(DBCOLUMNFLAGS_ISCOLLECTION),
//2.6
VALUE_WCHAR(DBCOLUMNFLAGS_ISSTREAM),
VALUE_WCHAR(DBCOLUMNFLAGS_ISROWSET),
VALUE_WCHAR(DBCOLUMNFLAGS_ISROW),
VALUE_WCHAR(DBCOLUMNFLAGS_ROWSPECIFICCOLUMN),
};
const static ULONG g_cColFlagsMaps = NUMELE(g_rgColFlagsMaps);
//////////////////////////////////////////////////////////////////////////////
// DBRESULTFLAG
//
//////////////////////////////////////////////////////////////////////////////
const static WIDENAMEMAP g_rgResultFlagMaps[] =
{
VALUE_WCHAR(DBRESULTFLAG_DEFAULT),
VALUE_WCHAR(DBRESULTFLAG_ROWSET),
VALUE_WCHAR(DBRESULTFLAG_ROW),
};
const static ULONG g_cResultFlagMaps = NUMELE(g_rgResultFlagMaps);
//////////////////////////////////////////////////////////////////////////////
// GetPhaseName
//
//////////////////////////////////////////////////////////////////////////////
WCHAR* GetPhaseName(DBEVENTPHASE ePhase)
{
const static WIDENAMEMAP rgPhase[] =
{
VALUE_WCHAR(DBEVENTPHASE_OKTODO),
VALUE_WCHAR(DBEVENTPHASE_ABOUTTODO),
VALUE_WCHAR(DBEVENTPHASE_SYNCHAFTER),
VALUE_WCHAR(DBEVENTPHASE_DIDEVENT),
VALUE_WCHAR(DBEVENTPHASE_FAILEDTODO)
};
return GetMapName(ePhase, NUMELE(rgPhase), rgPhase);
}
//////////////////////////////////////////////////////////////////////////////
// GetReasonName
//
//////////////////////////////////////////////////////////////////////////////
WCHAR* GetReasonName(DBREASON eReason)
{
const static WIDENAMEMAP rgReason[] =
{
VALUE_WCHAR( DBREASON_ROWSET_FETCHPOSITIONCHANGE ),
VALUE_WCHAR( DBREASON_ROWSET_RELEASE ),
VALUE_WCHAR( DBREASON_COLUMN_SET ),
VALUE_WCHAR( DBREASON_COLUMN_RECALCULATED ),
VALUE_WCHAR( DBREASON_ROW_ACTIVATE ),
VALUE_WCHAR( DBREASON_ROW_RELEASE ),
VALUE_WCHAR( DBREASON_ROW_DELETE ),
VALUE_WCHAR( DBREASON_ROW_FIRSTCHANGE ),
VALUE_WCHAR( DBREASON_ROW_INSERT ),
VALUE_WCHAR( DBREASON_ROW_RESYNCH ),
VALUE_WCHAR( DBREASON_ROW_UNDOCHANGE ),
VALUE_WCHAR( DBREASON_ROW_UNDOINSERT ),
VALUE_WCHAR( DBREASON_ROW_UNDODELETE ),
VALUE_WCHAR( DBREASON_ROW_UPDATE ),
VALUE_WCHAR( DBREASON_ROWSET_CHANGED ),
VALUE_WCHAR( DBREASON_ROWPOSITION_CHANGED ),
VALUE_WCHAR( DBREASON_ROWPOSITION_CHAPTERCHANGED ),
VALUE_WCHAR( DBREASON_ROWPOSITION_CLEARED ),
VALUE_WCHAR( DBREASON_ROW_ASYNCHINSERT ),
// VALUE_WCHAR( DBREASON_ROWSET_ROWSADDED ),
// VALUE_WCHAR( DBREASON_ROWSET_POPULATIONCOMPLETE ),
// VALUE_WCHAR( DBREASON_ROWSET_POPULATIONSTOPPED ),
};
return GetMapName(eReason, NUMELE(rgReason), rgReason);
}
//////////////////////////////////////////////////////////////////////////////
// GetAsynchReason
//
//////////////////////////////////////////////////////////////////////////////
WCHAR* GetAsynchReason(ULONG ulOperation)
{
const static WIDENAMEMAP rgAsynchReason[] =
{
VALUE_WCHAR( DBASYNCHOP_OPEN ),
};
return GetMapName(ulOperation, NUMELE(rgAsynchReason), rgAsynchReason);
}
//////////////////////////////////////////////////////////////////////////////
// GetAsynchPhase
//
//////////////////////////////////////////////////////////////////////////////
WCHAR* GetAsynchPhase(ULONG ulAsynchPhase)
{
const static WIDENAMEMAP rgAsynchPhase[] =
{
VALUE_WCHAR(DBASYNCHPHASE_INITIALIZATION),
VALUE_WCHAR(DBASYNCHPHASE_POPULATION),
VALUE_WCHAR(DBASYNCHPHASE_COMPLETE),
VALUE_WCHAR(DBASYNCHPHASE_CANCELED),
};
return GetMapName(ulAsynchPhase, NUMELE(rgAsynchPhase), rgAsynchPhase);
}
////////////////////////////////////////////////////////////////////////
// HRESULT DisplayRowErrors
//
/////////////////////////////////////////////////////////////////////////////
HRESULT DisplayRowErrors(HRESULT hrReturned, DBROWCOUNT cRows, HROW* rghRows, DBROWSTATUS* rgRowStatus)
{
//Display the badstatus for row operations.
INT iSelect = 0;
//Binding Errors only occur with the following returned codes...
if(hrReturned!=DB_S_ERRORSOCCURRED && hrReturned!=DB_E_ERRORSOCCURRED)
return hrReturned;
for(LONG i=0; i<cRows; i++)
{
ASSERT(rghRows);
ASSERT(rgRowStatus);
switch(rgRowStatus[i])
{
case DBROWSTATUS_S_OK:
break;
//Display RowStatus Error to the user...
default:
{
iSelect = wMessageBox(GetFocus(), MB_TASKMODAL | MB_ICONERROR | MB_OKCANCEL, wsz_ERROR,
L"Row Status Errors:\n\n"
L"rghRow[%lu] = 0x%p\n"
L"DBROWSTATUS = %d=%s",
i,
rghRows[i],
rgRowStatus[i],
GetMapName(rgRowStatus[i], NUMELE(g_rgRowStatusMap), g_rgRowStatusMap)
);
if(iSelect == IDCANCEL)
{
//NOTE: Will return DB_E_CANCELED if the user doesn't wish to continue
hrReturned = DB_E_CANCELED;
goto CLEANUP;
}
break;
}
}
}
CLEANUP:
return hrReturned;
}
////////////////////////////////////////////////////////////////////////
// STATUSMAP
//
////////////////////////////////////////////////////////////////////////
const static WIDENAMEMAP g_rgBindStatusMap[] =
{
VALUE_WCHAR(DBBINDSTATUS_OK ),
VALUE_WCHAR(DBBINDSTATUS_BADORDINAL ),
VALUE_WCHAR(DBBINDSTATUS_UNSUPPORTEDCONVERSION ),
VALUE_WCHAR(DBBINDSTATUS_BADBINDINFO ),
VALUE_WCHAR(DBBINDSTATUS_BADSTORAGEFLAGS ),
VALUE_WCHAR(DBBINDSTATUS_NOINTERFACE ),
VALUE_WCHAR(DBBINDSTATUS_MULTIPLESTORAGE ),
};
////////////////////////////////////////////////////////////////////////
// HRESULT DisplayAccessorErrors
//
/////////////////////////////////////////////////////////////////////////////
HRESULT DisplayAccessorErrors(HRESULT hrReturned, DBCOUNTITEM cBindings, const DBBINDING* rgBindings, DBBINDSTATUS* rgStatus)
{
//Display the badstatus for row operations.
INT iSelect = 0;
//Binding Errors only occur with the following returned codes...
if(hrReturned!=DB_S_ERRORSOCCURRED && hrReturned!=DB_E_ERRORSOCCURRED)
return hrReturned;
//Display any binding errors
for(ULONG i=0; i<cBindings; i++)
{
ASSERT(rgBindings);
ASSERT(rgStatus);
switch(rgStatus[i])
{
case DBBINDSTATUS_OK:
break;
//Display BindStatus Error to the user...
default:
{
iSelect = wMessageBox(GetFocus(), MB_TASKMODAL | MB_ICONERROR | MB_OKCANCEL, wsz_ERROR,
L"Accessor BindStatus Errors:\n"
L"rgBindings[%lu]\n\n"
L"iOrdinal = %ld\n"
L"wType = %s\n"
L"cbMaxLen = %lu\n"
L"bPrecision = %d\n"
L"bScale = %d\n\n"
L"DBBINDSTATUS = %s",
i,
rgBindings[i].iOrdinal,
GetDBTypeName(rgBindings[i].wType),
rgBindings[i].cbMaxLen,
rgBindings[i].bPrecision,
rgBindings[i].bScale,
GetMapName(rgStatus[i], NUMELE(g_rgBindStatusMap), g_rgBindStatusMap)
);
if(iSelect == IDCANCEL)
{
//NOTE: Will return DB_E_CANCELED if the user doesn't wish to continue
hrReturned = DB_E_CANCELED;
goto CLEANUP;
}
break;
}
}
}
CLEANUP:
return hrReturned;
}
////////////////////////////////////////////////////////////////////////
// HRESULT DisplayPropErrors
//
/////////////////////////////////////////////////////////////////////////////
HRESULT DisplayPropErrors(HRESULT hrReturned, ULONG cPropSets, DBPROPSET* rgPropSets)
{
//Property Errors only occur with the following returned codes...
if(hrReturned!=DB_S_ERRORSOCCURRED && hrReturned!=DB_E_ERRORSOCCURRED)
return hrReturned;
//Display all property errors...
for(ULONG iPropSet=0; iPropSet<cPropSets; iPropSet++)
{
DBPROPSET* pPropSet = &rgPropSets[iPropSet];
for(ULONG iProp=0; iProp<pPropSet->cProperties; iProp++)
{
DBPROP* pProp = &pPropSet->rgProperties[iProp];
if(pProp->dwStatus != DBPROPSTATUS_OK)
{
WCHAR wszBuffer[MAX_NAME_LEN+1];
WCHAR wszPropSet[MAX_NAME_LEN+1];
WCHAR* pwszPropSet = GetPropSetName(pPropSet->guidPropertySet);
if(pwszPropSet == NULL)
{
StringFromGUID2(pPropSet->guidPropertySet, wszPropSet, MAX_NAME_LEN);
pwszPropSet = wszPropSet;
}
//Find property Value
wszBuffer[0] = wEOL;
VariantToString(&pProp->vValue, wszBuffer, MAX_NAME_LEN, CONV_VARBOOL);
//Append the Error
INT iSelect = wMessageBox
(
GetFocus(), MB_TASKMODAL | MB_ICONERROR | MB_OKCANCEL, wsz_ERROR,
L"Properties in Error:\n"
L"rgPropSets[%d].rgProperties[%d]\n\n"
L"guidPropertySet\t= %s\n"
L"dwPropertyID\t= %s (0x%x)\n"
L"dwOptions\t\t= %s\n"
L"vValue.vt\t\t= %s\n"
L"vValue\t\t= %s\n\n"
L"dbStatus\t\t= %s",
iPropSet,iProp,
pwszPropSet,
GetPropertyName(pProp->dwPropertyID, pPropSet->guidPropertySet),
pProp->dwPropertyID,
pProp->dwOptions == DBPROPOPTIONS_REQUIRED ? L"DBPROPOPTIONS_REQUIRED" : L"DBPROPOPTIONS_OPTIONAL",
GetVariantTypeName(V_VT(&pProp->vValue)),
wszBuffer,
GetPropStatusName(pProp->dwStatus)
);
if(iSelect == IDCANCEL)
{
//NOTE: Will return DB_E_CANCELED if the user doesn't wish to continue
hrReturned = DB_E_CANCELED;
goto CLEANUP;
}
}
}
}
CLEANUP:
return hrReturned;
}
////////////////////////////////////////////////////////////////////////
// HRESULT DisplayPropErrors
//
/////////////////////////////////////////////////////////////////////////////
HRESULT DisplayPropErrors(HRESULT hrReturned, ULONG cPropInfoSets, DBPROPINFOSET* rgPropInfoSets)
{
//Property Errors only occur with the following returned codes...
if(hrReturned!=DB_S_ERRORSOCCURRED && hrReturned!=DB_E_ERRORSOCCURRED)
return hrReturned;
//Display all property errors...
for(ULONG iPropInfoSet=0; iPropInfoSet<cPropInfoSets; iPropInfoSet++)
{
DBPROPINFOSET* pPropInfoSet = &rgPropInfoSets[iPropInfoSet];
for(ULONG iPropInfo=0; iPropInfo<pPropInfoSet->cPropertyInfos; iPropInfo++)
{
DBPROPINFO* pPropInfo = &pPropInfoSet->rgPropertyInfos[iPropInfo];
if(pPropInfo->dwFlags == DBPROPFLAGS_NOTSUPPORTED)
{
WCHAR wszBuffer[MAX_NAME_LEN+1];
WCHAR wszPropSet[MAX_NAME_LEN+1];
WCHAR* pwszPropSet = GetPropSetName(pPropInfoSet->guidPropertySet);
if(pwszPropSet == NULL)
{
StringFromGUID2(pPropInfoSet->guidPropertySet, wszPropSet, MAX_NAME_LEN);
pwszPropSet = wszPropSet;
}
//Find property Value
wszBuffer[0] = wEOL;
VariantToString(&pPropInfo->vValues, wszBuffer, MAX_NAME_LEN, CONV_VARBOOL);
//Append the Error
INT iSelect = wMessageBox
(
GetFocus(), MB_TASKMODAL | MB_ICONERROR | MB_OKCANCEL, wsz_ERROR,
L"Properties in Error:\n"
L"rgPropInfoSets[%d].rgPropertyInfos[%d]\n\n"
L"guidPropertySet\t= %s\n"
L"pwszDescription\t= %s\n"
L"dwPropertyID\t= %s (0x%x)\n"
L"vtType\t\t= %s\n"
L"vValues\t\t= %s\n\n"
L"dwFlags\t\t= %s (0x%x)",
iPropInfoSet,iPropInfo,
pwszPropSet,
pPropInfo->pwszDescription,
GetPropertyName(pPropInfo->dwPropertyID, pPropInfoSet->guidPropertySet),
pPropInfo->dwPropertyID,
GetVariantTypeName(pPropInfo->vtType),
wszBuffer,
L"DBPROPFLAGS_NOTSUPPORTED",
pPropInfo->dwFlags
);
if(iSelect == IDCANCEL)
{
//NOTE: Will return DB_E_CANCELED if the user doesn't wish to continue
hrReturned = DB_E_CANCELED;
goto CLEANUP;
}
}
}
}
CLEANUP:
return hrReturned;
}
////////////////////////////////////////////////////////////////////////
// HRESULT DisplayPropErrors
//
/////////////////////////////////////////////////////////////////////////////
HRESULT DisplayPropErrors(HRESULT hrReturned, REFIID riid, IUnknown* pIUnknown)
{
ASSERT(pIUnknown);
//Property Errors only occur with the following returned codes...
if(hrReturned!=DB_S_ERRORSOCCURRED && hrReturned!=DB_E_ERRORSOCCURRED)
return hrReturned;
//GetProperties with DBPROPSET_PROPERTIESINERROR.
ULONG cPropSets = 0;
DBPROPSET* rgPropSets = NULL;
IDBProperties* pIDBProperties = NULL;
ICommandProperties* pICommandProperties = NULL;
//Setup input DBPROPSET_PROPERTIESINERROR
const ULONG cPropertyIDSets = 1;
DBPROPIDSET rgPropertyIDSets[cPropertyIDSets];
rgPropertyIDSets[0].guidPropertySet = DBPROPSET_PROPERTIESINERROR;
rgPropertyIDSets[0].cPropertyIDs = 0;
rgPropertyIDSets[0].rgPropertyIDs = NULL;
//Which GetProperties
if(riid == IID_IDBProperties)
{
XTESTC(pIUnknown->QueryInterface(IID_IDBProperties, (void**)&pIDBProperties));
XTESTC(pIDBProperties->GetProperties(cPropertyIDSets, rgPropertyIDSets, &cPropSets, &rgPropSets));
}
else
{
XTESTC(pIUnknown->QueryInterface(IID_ICommandProperties, (void**)&pICommandProperties));
XTESTC(pICommandProperties->GetProperties(cPropertyIDSets, rgPropertyIDSets, &cPropSets, &rgPropSets));
}
//Now delegate to display all properties in error
TESTC(hrReturned = DisplayPropErrors(hrReturned, cPropSets, rgPropSets));
CLEANUP:
FreeProperties(&cPropSets, &rgPropSets);
SAFE_RELEASE(pICommandProperties);
SAFE_RELEASE(pIDBProperties);
return hrReturned;
}
////////////////////////////////////////////////////////////////////////
// HRESULT DisplayRefCountErrors
//
/////////////////////////////////////////////////////////////////////////////
HRESULT DisplayRefCountErrors(WCHAR* pwszName, ULONG ulActRefCount, ULONG ulExpRefCount)
{
ASSERT(pwszName);
//Display RefCount difference...
if(ulActRefCount != ulExpRefCount && GetErrorPosting(EP_REFCOUNT_FAILURE))
{
wMessageBox
(
GetFocus(),
MB_TASKMODAL | MB_ICONERROR | MB_OK,
wsz_ERROR,
L"%s\n"
L"RefCount = %d, Expected = %d",
pwszName,
ulActRefCount,
ulExpRefCount
);
}
return S_OK;
}
////////////////////////////////////////////////////////////////////////
// HRESULT DisplayAllErrors
//
/////////////////////////////////////////////////////////////////////////////
HRESULT DisplayAllErrors(HRESULT hrActual, WCHAR* pwszFile, ULONG ulLine, INT* piResult)
{
//Delegate
//This function just verifies that the hreuslt succeeded...
return DisplayAllErrors(hrActual, SUCCEEDED(hrActual) ? hrActual : S_OK, pwszFile, ulLine, piResult);
}
////////////////////////////////////////////////////////////////////////
// HRESULT DisplayAllErrors
//
/////////////////////////////////////////////////////////////////////////////
HRESULT DisplayAllErrors(HRESULT hrActual, HRESULT hrExpected, WCHAR* pwszFile, ULONG ulLine, INT* piResult)
{
BOOL bEqual = (hrActual == hrExpected) || (hrActual == S_OK);
//First Display any ErrorInfo
//NOTE: If ErrorInfo=Always, ErrorInfo is always displayed
if((!bEqual || GetErrorPosting(EP_ERRORINFO_ALWAYS)) && !GetErrorPosting(EP_ERRORINFO_NEVER))
{
if(DisplayErrorInfo(hrActual, pwszFile, ulLine, piResult)==S_OK)
{
//We had ErrorInfo, no need to display error info
//Unless the user has something other than NOERRORINFO selected
if(GetErrorPosting(EP_HRESULT_NOERRORINFO))
goto CLEANUP;
}
}
//Second, Display the HRESULT, (if requested)
//NOTE: If HRESULT=Always, Hresult is always displayed, except if S_OK is returned, otherwise you would always get message boxes...
if((!bEqual || (hrActual!=S_OK && GetErrorPosting(EP_HRESULT_ALWAYS))) && !GetErrorPosting(EP_HRESULT_NEVER))
{
//Display the HRESULT
DisplayHRESULT(hrActual, pwszFile, ulLine, piResult);
}
CLEANUP:
//We need to return a failure code if not equal, so we don't continue...
if(!bEqual && SUCCEEDED(hrActual))
return E_FAIL;
return hrActual;
}
//////////////////////////////////////////////////////////////////
// DisplayWinError
//
//////////////////////////////////////////////////////////////////
HRESULT DisplayWinError(DWORD dwError, WCHAR* pwszFile, LONG lLine, WCHAR* pwszText)
{
if(dwError)
{
CHAR* pszError = NULL;
//Format the Message (obtain the textual string)
FormatMessageA(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
dwError,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(CHAR*)&pszError,
0,
NULL
);
if(pszError)
{
//Display the Error
wMessageBox
(
GetFocus(), MB_TASKMODAL | MB_ICONERROR | MB_OK, wsz_ERROR,
L"%s: GetLastError() = %d = %S" wWndEOL
L"<File:%s>" wWndEOL
L"Line:%d" wWndEOL,
pwszText,
dwError,
pszError,
pwszFile,
lLine
);
// Free the buffer.
LocalFree( pszError );
}
}
return dwError;
}
////////////////////////////////////////////////////////////////////////
// HRESULT DisplayHRESULT
//
/////////////////////////////////////////////////////////////////////////////
HRESULT DisplayHRESULT(HRESULT hrActual, WCHAR* pwszFile, ULONG ulLine, INT* piResult)
{
//If we end up here, their must not be any extended error info supported by the provider
//the best we can do is display the HRESULT, and see of the system has a defined string
//for the last error?
CHAR* pszError = NULL;
INT iResult = 0;
//Format the Message (obtain the textual string)
FormatMessageA(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
hrActual,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(CHAR*)&pszError,
0,
NULL );
if(pszError)
{
//Display the Error (including Windows Defined String)
iResult = wMessageBox(GetFocus(), MB_TASKMODAL | MB_ICONERROR | MB_OK, wsz_ERROR,
L"Interface: %s\nResult: 0x%08x = %S\n\nFormatMessage: \"%S\"\n\nFile: %s\nLine: %d", L"Unknown", hrActual, GetErrorName(hrActual), pszError, pwszFile, ulLine);
// Free the buffer from Format Message
LocalFree( pszError );
}
else
{
//Display the Error
iResult = wMessageBox(GetFocus(), MB_TASKMODAL | MB_ICONERROR | MB_OK, wsz_ERROR,
L"Interface: %s\nResult: 0x%08x = %S\n\nFile: %s\nLine: %d", L"Unknown", hrActual, GetErrorName(hrActual), pwszFile, ulLine);
}
if(piResult)
*piResult = iResult;
return hrActual;
}
////////////////////////////////////////////////////////////////////////
// HRESULT DisplayErrorInfo
//
/////////////////////////////////////////////////////////////////////////////
HRESULT DisplayErrorInfo(HRESULT hrActual, WCHAR* pwszFile, ULONG ulLine, INT* piResult)
{
HRESULT hr = S_OK;
CSmartPtr<IErrorInfo> spErrorInfo;
CSmartPtr<IErrorRecords> spErrorRecords;
ULONG cErrorRecords = 0;
CComBSTR cstrDescription;
CComBSTR cstrSource;
CComBSTR cstrSQLInfo;
INT iResult = 0;
static LCID lcid = GetSystemDefaultLCID();
//NOTE: GetErrorInfo will return S_OK and a NULL pointer if there is not error object
if((hr = GetErrorInfo(0, &spErrorInfo))==S_OK && spErrorInfo)
{
//The Error Object may support multiple Errors (IErrorRecords)
if(SUCCEEDED(hr = spErrorInfo->QueryInterface(&spErrorRecords)))
{
//Multiple Errors
XTESTC(hr = spErrorRecords->GetRecordCount(&cErrorRecords));
}
else
{
//Only a single Error Object
cErrorRecords = 1;
}
LONG lNativeError = 0;
ERRORINFO ErrorInfo = { hrActual, 0 };
//Loop through the records
for(ULONG i=0; i<cErrorRecords; i++)
{
//For multiple errors, we will allow the user to cancel out of the dialogs
//since the user may not be interested in clicking through many errors...
//NOTE: This logic puts on the CANCEL button if more than 1 and not the last error...
UINT uMBType = MB_TASKMODAL | MB_ICONERROR | MB_OK;
if(i < (cErrorRecords-1))
uMBType |= MB_OKCANCEL;
//ErrorRecords
if(spErrorRecords)
{
spErrorInfo.Release();
XTESTC(hr = spErrorRecords->GetErrorInfo(i, lcid, &spErrorInfo));
//Get the Basic ErrorInfo
XTEST(hr = spErrorRecords->GetBasicErrorInfo(i, &ErrorInfo));
//Get the SQL Info
GetSqlErrorInfo(i, spErrorRecords, &cstrSQLInfo, &lNativeError);
}
else
{
//ErrorInfo is only available...
XTEST(hr = spErrorInfo->GetGUID(&ErrorInfo.iid));
}
//Get the Description
XTEST(hr = spErrorInfo->GetDescription(&cstrDescription));
//Get the Source - this will be the window title...
XTEST(hr = spErrorInfo->GetSource(&cstrSource));
//Display the Error
if(cstrSQLInfo)
{
iResult = wMessageBox(GetFocus(), uMBType, cstrSource ? cstrSource : wsz_ERRORINFO,
L"Source: \"%s\"\n\n"
L"Interface: %s\n"
L"Result: 0x%08x = %S\n\n"
L"ISQLErrorInfo: [%s][0x%08x]\n"
L"IErrorInfo: [0x%08x] \"%s\"\n\n"
L"File: %s\n"
L"Line: %d",
cstrSource,
GetInterfaceName(ErrorInfo.iid),
ErrorInfo.hrError, GetErrorName(ErrorInfo.hrError),
cstrSQLInfo, lNativeError,
ErrorInfo.dwMinor, cstrDescription,
pwszFile,
ulLine);
}
else
{
iResult = wMessageBox(GetFocus(), uMBType, cstrSource ? cstrSource : wsz_ERRORINFO,
L"Source: \"%s\"\n\n"
L"Interface: %s\n"
L"Result: 0x%08x = %S\n\n"
// L"ISQLErrorInfo: [%s][0x%08x]\n"
L"IErrorInfo: [0x%08x] \"%s\"\n\n"
L"File: %s\n"
L"Line: %d",
cstrSource,
GetInterfaceName(ErrorInfo.iid),
ErrorInfo.hrError, GetErrorName(ErrorInfo.hrError),
// cstrSQLInfo, lNativeError,
ErrorInfo.dwMinor, cstrDescription,
pwszFile,
ulLine);
}
spErrorInfo.Release();
cstrDescription.Empty();
cstrSource.Empty();
cstrSQLInfo.Empty();
if(iResult == IDCANCEL)
goto CLEANUP;
}
}
CLEANUP:
if(piResult)
*piResult = iResult;
return hr;
}
////////////////////////////////////////////////////////////////////////
// HRESULT GetSqlErrorInfo
//
// Get the error message generated by an OLE DB object
/////////////////////////////////////////////////////////////////////////////
HRESULT GetSqlErrorInfo(ULONG iRecord, IErrorRecords* pIErrorRecords, BSTR* pBstr, LONG* plNativeError)
{
ASSERT(pBstr);
HRESULT hr = S_OK;
CSmartPtr<ISQLErrorInfo> spSQLErrorInfo;
LONG lNativeError = 0;
//Get the Error Records
if(pIErrorRecords)
{
//If there is ErrorInfo, GetSQLInfo for the desired record
//ISQLErrorInfo is not mandatory
TESTC(hr = pIErrorRecords->GetCustomErrorObject(iRecord, IID_ISQLErrorInfo, (IUnknown**)&spSQLErrorInfo));
//If there was a CustomErrorObject
if(spSQLErrorInfo)
hr = spSQLErrorInfo->GetSQLInfo(pBstr, &lNativeError);
}
CLEANUP:
if(plNativeError)
*plNativeError = lNativeError;
return hr;
}