2025-04-27 07:49:33 -04:00

289 lines
11 KiB
C

//***************************************************************************
//
// (c) 1999-2001 by Microsoft Corp. All Rights Reserved.
//
// ESEUTILS.h
//
// cvadai 6-May-1999 created.
//
//***************************************************************************
#ifndef _ESEUTILS_H_
#define _ESEUTILS_H_
#include <ese.h>
#define ESE_FLAG_NULL 0x10000000
void FreeBstr(BSTR * ppStr);
typedef struct tagOBJECTKEY
{
BSTR sObjectKey;
tagOBJECTKEY() {sObjectKey = NULL;};
// ~tagOBJECTKEY() {Clear();};
void Clear() {FreeBstr(&sObjectKey);};
} OBJECTKEY;
typedef struct tagWMIOBJECTID
{
__int64 dObjectId;
} WMIOBJECTID;
typedef struct tagWMIPROPERTYID
{
DWORD dwPropertyId;
} WMIPROPERTYID;
typedef struct tagOBJECTMAP
{
__int64 dObjectId;
__int64 dClassId;
BSTR sObjectPath;
DWORD iObjectState;
DWORD iRefCount;
DWORD iObjectFlags;
__int64 dObjectScopeId;
BSTR sObjectKey;
tagOBJECTMAP() {sObjectKey = NULL; sObjectPath = NULL;};
// ~tagOBJECTMAP() { Clear();};
void Clear() {FreeBstr(&sObjectKey); FreeBstr(&sObjectPath);};
} OBJECTMAP;
typedef struct tagSCOPEMAP
{
SQL_ID dObjectId;
BSTR sScopePath;
SQL_ID dParentId;
tagSCOPEMAP() {sScopePath = NULL; dParentId = 0;};
void Clear() { FreeBstr(&sScopePath); dParentId = 0;};
} SCOPEMAP;
typedef struct tagCLASSMAP
{
__int64 dClassId;
BSTR sClassName;
__int64 dSuperClassId;
__int64 dDynastyId;
BYTE *pClassBuffer;
DWORD dwBufferLen;
tagCLASSMAP() {sClassName = NULL, pClassBuffer = NULL, dwBufferLen = 0;};
// ~tagCLASSMAP() {Clear();};
void Clear() { FreeBstr(&sClassName); dwBufferLen = 0; delete pClassBuffer; pClassBuffer = NULL;};
} CLASSMAP;
typedef struct tagPROPERTYMAP
{
DWORD iPropertyId;
__int64 dClassId;
DWORD iStorageTypeId;
DWORD iCIMTypeId;
BSTR sPropertyName;
DWORD iFlags;
tagPROPERTYMAP() {sPropertyName = NULL;};
// ~tagPROPERTYMAP() {Clear();};
void Clear() {FreeBstr(&sPropertyName);};
} PROPERTYMAP;
typedef struct tagCLASSKEYS
{
__int64 dClassId;
DWORD iPropertyId;
} CLASSKEYS;
typedef struct tagREFERENCEPROPERTIES
{
__int64 dClassId;
DWORD iPropertyId;
__int64 dRefClassId;
} REFERENCEPROPERTIES;
typedef struct tagCLASSIMAGES
{
__int64 dObjectId;
int iPropertyId;
DWORD iArrayPos;
BYTE *pBuffer;
long dwBufferLen;
tagCLASSIMAGES() {pBuffer = NULL; dwBufferLen = 0;};
// ~tagCLASSIMAGES() { Clear();};
void Clear() { delete pBuffer; pBuffer = NULL; dwBufferLen = 0;};
} CLASSIMAGES;
typedef struct tagCLASSDATA
{
__int64 dObjectId;
DWORD iPropertyId;
DWORD iArrayPos;
DWORD iQfrPos;
__int64 dClassId;
BSTR sPropertyStringValue;
__int64 dPropertyNumericValue;
double rPropertyRealValue;
DWORD iFlags;
__int64 dRefId;
__int64 dRefClassId;
BYTE * pBuffer;
DWORD dwBufferLen;
tagCLASSDATA() { sPropertyStringValue = NULL; pBuffer = NULL; dwBufferLen = 0;};
// ~tagCLASSDATA() {Clear();};
void Clear() {FreeBstr(&sPropertyStringValue); delete pBuffer; pBuffer = NULL; dwBufferLen = 0;};
void operator= (tagCLASSDATA&cd)
{
Clear();
dObjectId = cd.dObjectId;
iPropertyId = cd.iPropertyId;
iArrayPos = cd.iArrayPos;
iQfrPos = cd.iQfrPos;
dClassId = cd.dClassId;
if (cd.sPropertyStringValue)
sPropertyStringValue = SysAllocString(cd.sPropertyStringValue);
dPropertyNumericValue = cd.dPropertyNumericValue;
rPropertyRealValue = cd.rPropertyRealValue;
iFlags = cd.iFlags;
dRefId = cd.dRefId;
dRefClassId = cd.dRefClassId;
if (cd.dwBufferLen)
{
pBuffer = new BYTE[cd.dwBufferLen+2];
if (pBuffer)
{
memcpy(pBuffer, cd.pBuffer, cd.dwBufferLen);
pBuffer[cd.dwBufferLen] = L'\0';
pBuffer[cd.dwBufferLen+1] = L'\0';
dwBufferLen = cd.dwBufferLen;
}
}
}
void Copy (tagCLASSIMAGES &cd)
{
Clear();
dObjectId = cd.dObjectId;
iPropertyId = cd.iPropertyId;
iArrayPos = cd.iArrayPos;
iFlags = 0;
if (cd.dwBufferLen)
{
pBuffer = new BYTE[cd.dwBufferLen+2];
if (pBuffer)
{
memcpy(pBuffer, cd.pBuffer, cd.dwBufferLen);
pBuffer[cd.dwBufferLen] = L'\0';
pBuffer[cd.dwBufferLen+1] = L'\0';
dwBufferLen = cd.dwBufferLen;
}
}
}
} CLASSDATA;
typedef struct tagINDEXDATA
{
BSTR sValue;
__int64 dValue;
double rValue;
__int64 dObjectId;
DWORD iPropertyId;
DWORD iArrayPos;
tagINDEXDATA() {sValue = NULL;}
// ~tagINDEXDATA() { Clear();};
void Clear() { FreeBstr(&sValue);};
} INDEXDATA;
typedef struct tagCONTAINEROBJ
{
SQL_ID dContainerId;
SQL_ID dContaineeId;
void Clear() {};
} CONTAINEROBJ;
typedef struct tagAUTODELETE
{
SQL_ID dObjectId;
} AUTODELETE;
HRESULT UpdateDBVersion (CSQLConnection *_pConn, DWORD iVersion);
HRESULT SetupObjectMapAccessor (CSQLConnection *pConn);
HRESULT SetupClassMapAccessor (CSQLConnection *pConn);
HRESULT SetupPropertyMapAccessor (CSQLConnection *pConn);
HRESULT SetupClassKeysAccessor (CSQLConnection *_pConn);
HRESULT SetupClassDataAccessor (CSQLConnection *pConn);
HRESULT SetupIndexDataAccessor (CSQLConnection *pConn, DWORD dwStorage, DWORD &dwPos, LPWSTR * lpTableName = NULL);
HRESULT InsertObjectMap(CSQLConnection *pConn, SQL_ID dObjectId, LPCWSTR lpKey,
DWORD iState, LPCWSTR lpObjectPath, SQL_ID dScopeID, DWORD iClassFlags,
DWORD iRefCount, SQL_ID dClassId, BOOL bInsert = TRUE);
HRESULT InsertClassMap(CSQLConnection *pConn, SQL_ID dClassId, LPCWSTR lpClassName, SQL_ID dSuperClassId, SQL_ID dDynasty,
BYTE *pBuff, DWORD dwBufferLen, BOOL bInsert = TRUE);
HRESULT InsertPropertyMap (CSQLConnection *pConn, DWORD &iPropID, SQL_ID dClassId, DWORD iStorageTypeId,
DWORD iCIMTypeId, LPCWSTR lpPropName, DWORD iFlags, BOOL bInsert = TRUE);
HRESULT InsertClassKeys (CSQLConnection *_pConn, SQL_ID dClassId, DWORD dwPropertyId,
BOOL bInsert = TRUE);
HRESULT InsertClassData_Internal (CSQLConnection *pConn, SQL_ID dObjectId, DWORD iPropID, DWORD iArrayPos, DWORD iQfrPos,
SQL_ID dClassId, LPCWSTR lpStringValue, SQL_ID dNumericValue, double fRealValue,
DWORD iFlags, SQL_ID dRefId, SQL_ID dRefClassId, BOOL bIsNull=FALSE);
HRESULT InsertIndexData (CSQLConnection *pConn, SQL_ID dObjectId, DWORD iPropID, DWORD iArrayPos,
LPWSTR lpValue, SQL_ID dValue, double rValue, DWORD dwStorage);
HRESULT GetObjectMapData (CSQLConnection *pConn,JET_SESID session, JET_TABLEID tableid,
OBJECTMAP &oj);
HRESULT GetFirst_ObjectMap (CSQLConnection *_pConn, SQL_ID dObjectId, OBJECTMAP &oj);
HRESULT GetFirst_ObjectMapByClass (CSQLConnection *_pConn, SQL_ID dClassId, OBJECTMAP &oj);
HRESULT GetNext_ObjectMap (CSQLConnection *pConn, OBJECTMAP &oj);
HRESULT InsertScopeMap_Internal(CSQLConnection *_pConn, SQL_ID dObjectId, LPCWSTR lpPath, SQL_ID dParentId);
HRESULT GetFirst_ClassMap (CSQLConnection *_pConn, SQL_ID dClassId, CLASSMAP &cd);
HRESULT GetFirst_ClassMapByName (CSQLConnection *_pConn, LPCWSTR lpName, CLASSMAP &cd);
HRESULT GetNext_ClassMap (CSQLConnection *_pConn, CLASSMAP &cd);
HRESULT GetClassMapData (CSQLConnection *_pConn, JET_SESID session, JET_TABLEID tableid,
CLASSMAP &oj);
HRESULT GetPropertyMapData (CSQLConnection *_pConn, JET_SESID session, JET_TABLEID tableid,
PROPERTYMAP &oj);
HRESULT GetFirst_PropertyMapByClass (CSQLConnection *_pConn, SQL_ID dClassId, PROPERTYMAP &pm);
HRESULT GetNext_PropertyMap (CSQLConnection *_pConn, PROPERTYMAP &pm);
HRESULT GetFirst_ReferencePropertiesByClass (CSQLConnection *_pConn, SQL_ID dClassId,
REFERENCEPROPERTIES &cd);
HRESULT GetNext_ReferenceProperties (CSQLConnection *_pConn, REFERENCEPROPERTIES &cd);
HRESULT GetReferencePropertiesData (CSQLConnection *_pConn, JET_SESID session, JET_TABLEID tableid,
REFERENCEPROPERTIES &oj);
HRESULT GetFirst_ClassKeys (CSQLConnection *_pConn, SQL_ID dClassId, CLASSKEYS &cd);
HRESULT GetNext_ClassKeys (CSQLConnection *_pConn, CLASSKEYS &cd);
HRESULT GetFirst_ClassData (CSQLConnection *pConn, SQL_ID dId, CLASSDATA &cd,
DWORD iPropertyId = -1, BOOL bMinimum = FALSE, CSchemaCache *pCache = NULL);
HRESULT GetNext_ClassData (CSQLConnection *pConn, CLASSDATA &cd, DWORD iPropertyId = -1, BOOL bMinimum=FALSE,
CSchemaCache *pCache = NULL);
HRESULT GetIndexData (CSQLConnection *pConn, JET_SESID session, JET_TABLEID tableid,
DWORD dwPos, INDEXDATA &is);
HRESULT GetFirst_IndexDataNumeric (CSQLConnection *pConn, SQL_ID dNumericValue, INDEXDATA &cd,
JET_TABLEID &tableid);
HRESULT GetFirst_IndexDataString (CSQLConnection *pConn, LPWSTR lpStringValue, INDEXDATA &cd,
JET_TABLEID &tableid);
HRESULT GetFirst_IndexDataReal (CSQLConnection *pConn, double dValue, INDEXDATA &cd,
JET_TABLEID &tableid);
HRESULT GetFirst_IndexDataRef (CSQLConnection *pConn, SQL_ID dValue, INDEXDATA &cd,
JET_TABLEID &tableid);
HRESULT GetNext_IndexData (CSQLConnection *pConn, JET_TABLEID tableid, DWORD dwPos, INDEXDATA &cd);
HRESULT GetContainerObjsData (CSQLConnection *pConn, JET_SESID session, JET_TABLEID tableid,
CONTAINEROBJ &oj);
HRESULT GetNext_ContainerObjs (CSQLConnection *pConn, CONTAINEROBJ &cd);
HRESULT DeleteObjectMap (CSQLConnection *_pConn, SQL_ID dObjectId,
BOOL bDecRef = FALSE, SQL_ID dScope = 0);
HRESULT DeleteContainerObjs (CSQLConnection *_pConn, SQL_ID dContainerId, SQL_ID dContaineeId = 0);
HRESULT SetupAutoDeleteAccessor(CSQLConnection *pConn);
HRESULT OpenEnum_AutoDelete (CSQLConnection *pConn, AUTODELETE &ad);
HRESULT GetNext_AutoDelete(CSQLConnection *pConn, AUTODELETE &ad);
HRESULT InsertAutoDelete(CSQLConnection *pConn, SQL_ID dObjectId);
HRESULT DeleteAutoDelete(CSQLConnection *pConn, SQL_ID dObjectId);
HRESULT CleanAutoDeletes(CSQLConnection *pConn);
#endif // _ESEUTILS_H_