218 lines
10 KiB
C++
218 lines
10 KiB
C++
///////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Microsoft WMIOLE DB Provider
|
|
// (C) Copyright 1999 Microsoft Corporation. All Rights Reserved.
|
|
//
|
|
// Purpose: WmiOleDBMap.h: interface for the CWmiOleDBMap class.
|
|
//
|
|
//
|
|
///////////////////////////////////////////////////////////////////////////////////
|
|
#ifndef _WMIOLEDBMAP_HEADER
|
|
#define _WMIOLEDBMAP_HEADER
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif // _MSC_VER > 1000
|
|
|
|
|
|
#include "headers.h"
|
|
|
|
const WCHAR strIndex[] = L"Index";
|
|
|
|
class CQuery;
|
|
|
|
#define ALL_QUALIFIERS 0x00000003
|
|
#define NO_QUALIFIERS 0x00000000
|
|
#define CLASS_QUALIFIERS 0x00000001
|
|
#define PROPERTY_QUALIFIERS 0x00000002
|
|
|
|
#define QUALIFIER_ L"Qualifier_"
|
|
#define DEFAULT_QUALIFIER_COUNT 10
|
|
|
|
#define WMI_CLASS_QUALIFIER 1
|
|
#define WMI_PROPERTY_QUALIFIER 2
|
|
#define WMI_PROPERTY 3
|
|
|
|
const CIM_OBJECTARRAY= CIM_FLAG_ARRAY | CIM_OBJECT ;
|
|
|
|
class cRowColumnInfoMemMgr;
|
|
class CRowDataMemMgr;
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
class CWmiOleDBMap
|
|
{
|
|
|
|
private:
|
|
|
|
CWbemClassParameters * m_pWbemClassParms; // Common class information, such as name, context
|
|
CWbemClassDefinitionWrapper * m_pWbemClassDefinition; // Just class definitions
|
|
CWbemInstanceList * m_paWbemClassInstances; // Just instance info
|
|
CWbemCommandManager * m_pWbemCommandManager; // To manage commands
|
|
CWbemCollectionManager * m_pWbemCollectionManager;
|
|
|
|
CWbemClassWrapper * m_pWbemCurInst;
|
|
ULONG m_cRef;
|
|
BOOL m_bMethodRowset;
|
|
|
|
CPropertyMemoryMgr m_PropMemMgr;
|
|
|
|
BOOL ParseQualifiedName(WCHAR * Root, WCHAR *& Parent, WCHAR *& Child );
|
|
HRESULT ValidProperty(const DBCOLUMNDESC * prgColDesc);
|
|
HRESULT MapDBPROPToStdPropertyQualifier( DBPROP pProp, CVARIANT & Qualifier, CVARIANT & Value, LONG & lFlavor );
|
|
HRESULT MapDBPROPToStdClassQualifier( DBPROP pProp, CVARIANT & Qualifier, CVARIANT & Value, LONG & uFlavor );
|
|
|
|
HRESULT SetWMIProperty(const DBCOLUMNDESC* prgColDesc);
|
|
HRESULT SetWMIClassQualifier(const DBCOLUMNDESC * prgColDesc,BOOL bDefault = TRUE);
|
|
HRESULT SetWMIPropertyQualifier(const DBCOLUMNDESC * prgColDesc,BOOL bDefault = TRUE);
|
|
|
|
HRESULT GetPropertyColumnInfo( cRowColumnInfoMemMgr * pColumn, DBCOLUMNINFO ** pCol,CBSTR & pProperty,LONG &lFlavor);
|
|
// HRESULT GetNextPropertyQualifier( CWbemClassWrapper *pInst,BSTR &strPropName,CVARIANT &vValue, LONG &lType);
|
|
|
|
HRESULT GetProperties(CRowDataMemMgr * pRow,CWbemClassWrapper * pClass,cRowColumnInfoMemMgr *pColInfoMgr);
|
|
|
|
HRESULT GetEmbededObjects(CWbemClassInstanceWrapper * pClass,BSTR strProperty,CVARIANT &vValue);
|
|
HRESULT CommitRowDataForQualifier(CRowDataMemMgr * pRow,BSTR strQualifier,CVARIANT &vValue, ULONG lType, ULONG lFlavor);
|
|
void GenerateURL(CWbemClassInstanceWrapper * pClass,BSTR strProperty,ULONG nIndex,CBSTR &strIn);
|
|
void GetDefaultValue(const DBCOLUMNDESC * prgColDesc, VARIANT & varDefault);
|
|
HRESULT SetColumns( const DBORDINAL cColumnDescs, const DBCOLUMNDESC rgColumnDescs[]);
|
|
HRESULT GetPropertyColumnInfoForMixedRowsets( cRowColumnInfoMemMgr * pColumn, DBCOLUMNINFO ** pCol);
|
|
|
|
void SetColumnTypeURL(DBCOLUMNINFO * pCol)
|
|
{
|
|
pCol->dwFlags |= DBCOLUMNFLAGS_ISROWURL;
|
|
}
|
|
|
|
|
|
public:
|
|
|
|
// CWmiOleDBMap(DWORD dwFlags, IDispatch *pDisp,CWbemConnectionWrapper * pWrap);
|
|
/* CWmiOleDBMap(int nSchemaType, DWORD dwFlags, WCHAR * pClassName, WCHAR * pSpecificTable, CWbemConnectionWrapper * Connect);
|
|
CWmiOleDBMap(DWORD dwFlags, WCHAR * pClassName, CWbemConnectionWrapper * Connect,BOOL fSchema = FALSE);
|
|
CWmiOleDBMap(DWORD dwFlags, CQuery* p, CWbemConnectionWrapper * Connect);
|
|
CWmiOleDBMap(DWORD dwFlags, WCHAR * pObjectPath, CWbemConnectionWrapper * Connect,INSTANCELISTTYPE instListType);
|
|
*/ CWmiOleDBMap();
|
|
|
|
HRESULT FInit(int nSchemaType, DWORD dwFlags, WCHAR * pClassName, WCHAR * pSpecificTable, CWbemConnectionWrapper * Connect);
|
|
HRESULT FInit(DWORD dwFlags, WCHAR * pClassName, CWbemConnectionWrapper * Connect);
|
|
HRESULT FInit(DWORD dwFlags, CQuery* p, CWbemConnectionWrapper * Connect);
|
|
HRESULT FInit(DWORD dwFlags, WCHAR * pObjectPath, CWbemConnectionWrapper * Connect,INSTANCELISTTYPE instListType);
|
|
|
|
~CWmiOleDBMap();
|
|
|
|
//===================================================================================
|
|
//
|
|
//===================================================================================
|
|
HRESULT CreateTable( DBORDINAL cColumnDescs, const DBCOLUMNDESC rgColumnDescs[],
|
|
ULONG cPropertySets, DBPROPSET rgPropertySets[]);
|
|
HRESULT AddColumn(const DBCOLUMNDESC* prgColDesc, DBID** ppColumnID);
|
|
HRESULT DropColumn(const DBID* pColumnID);
|
|
|
|
HRESULT SetCommonDBCOLUMNINFO(DBCOLUMNINFO ** pCol,DBORDINAL uCurrentIndex);
|
|
void SetColumnReadOnly(DBCOLUMNINFO * pCol, BOOL bReadOnly);
|
|
HRESULT GetQualifiedNameColumnInfo( cRowColumnInfoMemMgr * pParentCol,DBCOLUMNINFO ** pCol, WCHAR * pName);
|
|
|
|
HRESULT DropTable();
|
|
|
|
|
|
HRESULT GetColumnCount( DBCOUNTITEM & cTotalColumns,DBCOUNTITEM & cParentColumns,DBCOUNTITEM &cNestedCols);
|
|
HRESULT GetColumnInfoForParentColumns(cRowColumnInfoMemMgr * pParentCol);
|
|
|
|
HRESULT ResetInstances();
|
|
HRESULT ResetInstancesToNewPosition(DBROWOFFSET);
|
|
HRESULT GetNextInstance(CWbemClassWrapper *&ppInst, CBSTR &strKey ,BOOL bFetchBack);
|
|
HRESULT GetDataForInstance(CRowDataMemMgr * pRow,CWbemClassWrapper *pInst,cRowColumnInfoMemMgr *pColInfoMgr);
|
|
HRESULT GetDataForSchemaInstance(CRowDataMemMgr * pRow,CWbemClassWrapper *pInst,cRowColumnInfoMemMgr *pColInfoMgr);
|
|
|
|
HRESULT GetPropertyQualifier(BSTR strPropName, BSTR strQualifierName ,VARIANT &vValue);
|
|
BOOL IsPropQualiferIncluded();
|
|
HRESULT GetDataForPropertyQualifier(CRowDataMemMgr * pRow,CWbemClassWrapper *pInst,BSTR strPropName, BSTR strQualifier, cRowColumnInfoMemMgr *pColInfoMgr);
|
|
BOOL IsSystemProperty(BSTR strProperty);
|
|
HRESULT GetNextPropertyQualifier(CWbemClassWrapper *pInst,BSTR strPropName,BSTR &strQualifier,BOOL bFetchBack = FALSE);
|
|
HRESULT ResetPropQualiferToNewPosition(CWbemClassWrapper *pInst,DBROWOFFSET lRowOffset,BSTR strPropertyName);
|
|
|
|
HRESULT GetNextClassQualifier(CWbemClassWrapper *pInst,BSTR &strQualifier,BOOL bFetchBack = FALSE);
|
|
HRESULT GetDataForClassQualifier(CRowDataMemMgr * pRow,CWbemClassWrapper *pInst, BSTR strQualifier, cRowColumnInfoMemMgr *pColInfoMgr);
|
|
HRESULT ResetClassQualiferToNewPosition(CWbemClassWrapper *pInst,DBROWOFFSET lRowOffset);
|
|
|
|
HRESULT DeleteInstance(CWbemClassWrapper * pClass );
|
|
HRESULT UpdateInstance(CWbemClassWrapper *pInst , BOOL bNewInst);
|
|
HRESULT AddNewInstance(CWbemClassWrapper ** ppClass );
|
|
HRESULT RefreshInstance(CWbemClassWrapper * pInstance );
|
|
void ReleaseAllQualifiers(CWbemClassWrapper *pInst) {pInst->ReleaseAllPropertyQualifiers(); }
|
|
void ReleaseQualifier(CWbemClassWrapper *pInst,BSTR strQualifier);
|
|
WCHAR * GetClassName();
|
|
void SetNavigationFlags(DWORD dwFlags);
|
|
void SetQueryFlags(DWORD dwFlags);
|
|
HRESULT DeleteQualifier(CWbemClassWrapper *pInst,
|
|
BSTR strQualifierName,
|
|
BOOL bClassQualifier = TRUE ,
|
|
BSTR strPropertyName = NULL);
|
|
|
|
|
|
|
|
HRESULT SetProperty(CWbemClassWrapper *pInst,BSTR bstrColName,VARIANT *pvarData)
|
|
{
|
|
return pInst->SetProperty(bstrColName,pvarData);
|
|
}
|
|
HRESULT SetQualifier(CWbemClassWrapper *pInst,BSTR bstrColName,BSTR bstrQualifier ,VARIANT *pvarData,LONG lFlavor);
|
|
|
|
|
|
DWORD GetFlags() { return m_pWbemClassParms->GetFlags(); }
|
|
|
|
HRESULT GetProperty(CWbemClassWrapper *pInst,BSTR pProperty, BYTE *& pData,DBTYPE &dwType ,DBLENGTH & dwSize, DWORD &dwFlags );
|
|
|
|
// This method is to be called before fetching any instance
|
|
HRESULT SetClass(WCHAR *pClassName) {return m_pWbemClassDefinition->SetClass(pClassName); }
|
|
|
|
CWbemClassWrapper *GetInstance(BSTR strPath);
|
|
void GetInstanceKey(CWbemClassWrapper *pInst, CBSTR &strPath){ ((CWbemClassInstanceWrapper *)pInst)->GetKey(strPath);}
|
|
CWbemClassWrapper *GetEmbededInstance(BSTR strPath,BSTR strProperty,int nIndex);
|
|
|
|
HRESULT GetKeyPropertyNames( SAFEARRAY **ppsaNames) { return m_pWbemClassDefinition->GetKeyPropertyNames(ppsaNames); }
|
|
int ParseQualifiedNameToGetColumnType(WCHAR * wcsName );
|
|
HRESULT CWmiOleDBMap::GetInstanceCount(ULONG_PTR &lInstanceCount)
|
|
{
|
|
return m_paWbemClassInstances->GetNumberOfInstanceInEnumerator(&lInstanceCount);
|
|
// return m_pWbemClassDefinition->GetInstanceCount(lInstanceCount);
|
|
}
|
|
|
|
HRESULT AddPropertyQualifier(CWbemClassWrapper *pInst,BSTR pProperty, BSTR Qualifier, VARIANT * vValue, LONG Flavor)
|
|
{
|
|
return pInst->SetPropertyQualifier(pProperty,Qualifier, vValue, Flavor);
|
|
}
|
|
HRESULT SetColumnProperties(const DBCOLUMNDESC * prgColDesc);
|
|
|
|
HRESULT AddIndex(const DBID* pColumnID);
|
|
HRESULT DropIndex(const DBID* pColumnID);
|
|
HRESULT UnlinkObjectFromContainer(BSTR strContainerObj,BSTR pstrObject);
|
|
HRESULT LinkObjectFromContainer(BSTR strContainerObj,BSTR pstrObject);
|
|
HRESULT CloneAndAddNewObjectInScope(BSTR strObj, BSTR strScope,WCHAR *& pstrNewPath);
|
|
|
|
void SetSytemPropertiesFlag(BOOL bSystemProperties) { m_pWbemClassParms->SetSytemPropertiesFlag(bSystemProperties);}
|
|
|
|
DWORD GetInstanceStatus(CWbemClassWrapper *pInst)
|
|
{
|
|
return ((CWbemClassInstanceWrapper *)pInst)->GetStatus();
|
|
}
|
|
void SetInstanceStatus(CWbemClassWrapper *pInst, DWORD dwStatus)
|
|
{
|
|
((CWbemClassInstanceWrapper *)pInst)->SetStatus(dwStatus);
|
|
}
|
|
INSTANCELISTTYPE GetObjListType();
|
|
|
|
STDMETHODIMP_(ULONG) AddRef(void);
|
|
STDMETHODIMP_(ULONG) Release(void);
|
|
|
|
HRESULT SetSearchPreferences(ULONG cProps , DBPROP rgProp[]);
|
|
|
|
|
|
HRESULT GetRelativePath(CWbemClassInstanceWrapper *pInst,WCHAR *& strRelPath)
|
|
{
|
|
return pInst->GetRelativePath(strRelPath);
|
|
}
|
|
|
|
FETCHDIRECTION GetCurFetchDirection() { return m_paWbemClassInstances->GetCurFetchDirection(); }
|
|
void SetCurFetchDirection(FETCHDIRECTION FetchDir) { m_paWbemClassInstances->SetCurFetchDirection(FetchDir); }
|
|
};
|
|
|
|
#endif
|